Ändern des Titels Ihrer Seite entsprechend dem Titel Ihrer Registerkarten


7

Ich habe folgende Funktion:

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;
}

Dies gibt zwei Registerkarten oben auf der Seite aus. Wenn ich jedoch auf jede Registerkarte klicke, hat sie denselben Seitentitel wie der übergeordnete Menüpunkt "Interview-Zeitplanübersicht".

Gibt es eine Möglichkeit, eindeutige Seitentitel für jede Registerkarte festzulegen?

Antworten:


2

Du musst anrufen

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

Sie müssen Ihren Code ein wenig ändern

  $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,
  );

zu

  $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']);
  }
}

Dann machen Sie dasselbe für $items[admin/settings/cvminterviews']&$items['admin/settings/cvminterviews/setup']

Wenn Sie Ihren Code ändern, müssen Sie sich eines weiteren Problems bewusst sein.

Es gibt zwei Registerkarten für admin / settings / cvminterviews, eine mit den Optionen "Übersicht" und "Setup des Interviewplans". 'Übersicht' verlinkt auf admin / settings / cvminteviews NICHT admin / settings / cvminterviews / summary. admin / settings / cvminterviews / summary wird niemals aufgerufen (es sei denn, Sie geben dies in die Adressleiste ein), da dies die Standardregisterkarte ist, die von festgelegt wird 'type' => MENU_DEFAULT_LOCAL_TASK.


1
Ich denke, es ist vorzuziehen, das String-Literal an t()eine Variable zu übergeben. Sie haben auch Anführungszeichen um den Schlüssel vergessen Form und Titel .
Andy

Wenn jemand ein ähnliches Problem hatte, aber entity_ui_get_form als Seitenrückruf verwendet, überprüfen Sie $ form ['# after_build'], zum Beispiel: drupalcode.org/project/crm_core.git/blob/…
Favio

1

Ich habe diesen Code verwendet (in meiner Funktion, die den Breadcrumb festlegt, aber dies könnte auch in einem Seitenrückruf verwendet werden)

<?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

Ich glaube, im Allgemeinen behalten Sie bei der Verwendung lokaler Aufgaben den gleichen Titel bei. Die Aufgaben selbst sind Aktionen, die Sie für ein gemeinsames Objekt / einen gemeinsamen Bereich ausführen können. In diesem Fall ist es also sinnvoll, den gleichen Titel für jeden lokalen Titel beizubehalten Aufgabe, auf der du bist.


In dieser Situation ändert der Rückgabewert von 'title callback' den Titel der Registerkarte und nicht den Titel der Seite. Sie können drupal_set_title ('my_new_title') in die Rückruffunktion einfügen und es funktioniert.
iStryker

Feedback zum Downvoting?!
Andy

@iStryker - danke für das Feedback. Nach meinem Verständnis wird der Titel als Argument an den Titelrückruf übergeben, sodass Sie entweder a) einen Titelrückruf von drupal_set_title(der umgangen werden würde t()) oder b) einen benutzerdefinierten Rückruf verwenden können, der den Titel weiterleitet t()und drupal_set_title()manuell aufruft . Sehen Sie ein Problem mit diesem Ansatz?
Andy

In meiner myshift Demo. Ich habe 'title callback' => 'example_title_callback' für alle 3 Menüpunkte hinzugefügt. Auf allen 3 Seiten wird die Funktion example_title_callback mehr als 2 Mal aufgerufen. Dies liegt daran, dass die Menüelemente in hook_menu () für jeden gerenderten (Tab-) Link auf der Seite aufgerufen werden. (und example_title_callback wird jedes Mal aufgerufen, um zu versuchen, den Titel des Links zu ermitteln). Wenn Sie also drupal_set_title in example_title_callback haben, wird es 2+ Mal aufgerufen. Das ist schlecht. Wenn Sie drupal_set_title in den Seitenrückruf einfügen, wird dieser nur einmal aufgerufen.
iStryker

1
@iStryker Danke, das ist ein sehr guter Punkt - die Methode wird nicht nur mehrmals aufgerufen, sondern ist auch von Natur aus fehlerhaft, da die letzte Registerkarte, deren Titel durch den Rückruf geführt wird, diejenige ist, die den Titel der Seite festlegt (selbst wenn dies der Fall ist) nicht die aktuell aktive Registerkarte).
Andy
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.