タブのタイトルに合わせてページのタイトを変更する


7

私は次の機能を持っています:

function cvminterviews_menu() {

  $items = array();

  $items['admin/settings/cvminterviews'] = array(
    'title' => 'Interview Schedule Overview',
    'description' => 'Overview',
    'file' => 'cvminterviews_admin_overview.inc.php',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('cvminterviews_overview_form'),
    'access arguments' => array('administer cvminterviews'),
  );

  $items['admin/settings/cvminterviews/overview'] = array(
    'title' => 'Overview',
    'description' => 'Overview',
    'file' => 'cvminterviews_admin_overview.inc.php',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('cvminterviews_overview_form'),
    'access arguments' => array('administer cvminterviews'),
    'type' => MENU_DEFAULT_LOCAL_TASK,
  );

  $items['admin/settings/cvminterviews/setup'] = array(
    'title' => 'Interview Schedule Setup',
    'description' => 'Setup',
    'file' => 'cvminterviews_admin_setup.inc.php',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('cvminterviews_dateroomsetup_form'),
    'access arguments' => array('administer cvminterviews'),
    'type' => MENU_LOCAL_TASK,
  );


  return $items;
}

これにより、ページの上部に2つのタブが出力されます。ただし、各タブをクリックすると、親メニュー項目「インタビュースケジュールの概要」と同じページタイトルが表示されます。

各タブに一意のページタイトルを設定する方法はありますか?

回答:


2

あなたは電話しなければなりません

> 4.6  6   drupal_set_title($title = NULL)
> 7  8     drupal_set_title($title = NULL, $output = CHECK_PLAIN)

コードを少し変更する必要があります

  $items['admin/settings/cvminterviews/setup'] = array(
    'title' => 'Interview Schedule Setup',
    'description' => 'Setup',
    'file' => 'cvminterviews_admin_setup.inc.php',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('cvminterviews_dateroomsetup_form'),
    'access arguments' => array('administer cvminterviews'),
    'type' => MENU_LOCAL_TASK,
  );

  $items['admin/settings/cvminterviews/setup'] = array(
    'title' => 'Interview Schedule Setup',
    'description' => 'Setup',
    'file' => 'cvminterviews_admin_setup.inc.php',
    'page callback' => '_cvminterviews_admin_page',
    'page arguments' => array(
      'variables' => array(
        'form' => 'cvminterviews_dateroomsetup_form', 
        'title' => t('my_title')
      )
    ),
    'access arguments' => array('administer cvminterviews'),
    'type' => MENU_LOCAL_TASK,
  );

function _cvminterviews_admin_page($variables = NULL) {
  if(isset($variables['title'])) {
    drupal_set_title($variables['title']);
  }
  if(isset($variables['form'])) {
    return drupal_get_form($variables['form']);
  }
}

次に同じことを$items[admin/settings/cvminterviews']&に行います$items['admin/settings/cvminterviews/setup']

コードを変更する場合は、もう1つ注意する必要がある問題があります。

admin / settings / cvminterviewsには2つのタブがあり、1つは「概要」と「面接スケジュールの設定」でアクティブになります。「概要」はadmin / settings / cvminteviewsにリンクしますが、admin / settings / cvminterviews / overviewにはリンクしません。admin / settings / cvminterviews / overviewは、(アドレスバーに入力しない限り)呼び出されることはありません'type' => MENU_DEFAULT_LOCAL_TASK。これは、によって設定されるデフォルトのタブであるためです。


1
t()変数ではなく文字列リテラルを渡す方が望ましいと思います。また、キーのフォームタイトルを囲む引用符も忘れてしまいました。
アンディ

ケースで誰かが同様の問題があったが、例えば、$フォーム[「#のafter_build」]をチェックし、ページのコールバックとしてentity_ui_get_formを使用して:drupalcode.org/project/crm_core.git/blob/...
Favio

1

私はこのコードを使用しました(ブレッドクラムを設定する関数ではこれですが、これはページコールバックでも使用できます)

<?php
// get current menu item informations. This contain the title of the tab.
$item = menu_get_item();
// use it as page title.
drupal_set_title($item['title']);
?>

-1

一般に、ローカルタスクを使用するときは同じタイトルを維持する傾向があると思います。タスク自体は、いくつかの一般的なオブジェクト/領域に対して実行できるアクションであることを意図しています。あなたがしているタスク。


この場合、「タイトルコールバック」の戻り値は、ページのタイトルではなくタブのタイトルを変更します。drupal_set_title( 'my_new_title')をコールバック関数内に追加すると、機能します。
iStryker、2011

反対投票についてのフィードバックはありますか?!
アンディ

@iStryker-フィードバックをありがとう。タイトルはタイトルコールバックへの引数として渡されるので、a)タイトルコールバックを使用するdrupal_set_title(バイパスt())か、b)タイトルを渡して手動でt()呼び出すカスタムコールバックを使用できることを理解していますdrupal_set_title()。そのアプローチに問題がありますか?
アンディ

myshiftデモで。3つのメニュー項目すべてに「タイトルコールバック」=>「example_title_callback」を追加しました。3つのページすべてで、関数example_title_callbackが2回以上呼び出されます。これは、hook_menu()のメニュー項目が、ページにあるすべてのレンダリングされた(タブ)リンクの呼び出しを取得しているためです。(そしてexample_title_callbackはリンクのタイトルを決定しようとするたびに呼び出しを取得しています)。したがって、example_title_callbackにdrupal_set_titleがある場合、2回以上呼び出されます。これは悪いです。drupal_set_titleをページのコールバック内に配置すると、一度だけ呼び出されます。
iStryker

1
@iStrykerよろしくお願いします。これは非常に良い点です。複数回呼び出されるだけでなく、メソッドは本質的に壊れています。コールバックを介してタイトルを実行する最後のタブがページのタイトルを設定するためのものです(たとえそれが現在アクティブなタブではありません)。
アンディ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.