Thay đổi tite trang của bạn để phù hợp với tiêu đề của các tab của bạn


7

Tôi có chức năng sau:

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

Điều này xuất ra hai tab ở đầu trang. Tuy nhiên, khi tôi nhấp vào từng tab, nó có cùng tiêu đề trang với mục menu "Tổng quan về lịch phỏng vấn".

Có cách nào để đặt tiêu đề trang duy nhất cho mỗi tab không?

Câu trả lời:


2

Bạn phải gọi

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

Bạn sẽ phải thay đổi mã của bạn xung quanh một chút

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

đến

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

Sau đó, làm điều tương tự cho $items[admin/settings/cvminterviews']&$items['admin/settings/cvminterviews/setup']

Khi bạn thay đổi mã của mình, có một vấn đề nữa mà bạn sẽ cần phải biết.

Sẽ có 2 tab trên admin / settings / cvminterview, một tab sẽ hoạt động 'Tổng quan' và Setup Cài đặt lịch phỏng vấn '. 'Tổng quan' sẽ liên kết với quản trị viên / cài đặt / cvminteview KHÔNG phải quản trị viên / cài đặt / cvminterview / tổng quan. quản trị / cài đặt / cvminterview / tổng quan sẽ không bao giờ được gọi (trừ khi bạn nhập nó vào thanh địa chỉ) bởi vì đó là tab mặc định được đặt bởi 'type' => MENU_DEFAULT_LOCAL_TASK.


1
Tôi nghĩ rằng nó được ưu tiên để chuyển chuỗi bằng chữ t()thay vì một biến. Bạn cũng đã quên các trích dẫn xung quanh mẫu khóa và tiêu đề .
Andy

Trong trường hợp ai đó gặp vấn đề tương tự, nhưng sử dụng entity_ui_get_form làm cuộc gọi lại trang, hãy kiểm tra $ form ['# after_build'], ví dụ: drupalcode.org/project/crm_core.git/blob/ tựa
Favio

1

Tôi đã sử dụng mã này (trong chức năng của tôi đã đặt Breadcrumb nhưng điều này cũng có thể được sử dụng trong một cuộc gọi lại trang)

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

Tôi tin rằng nói chung, bạn có xu hướng giữ cùng một tiêu đề khi sử dụng các tác vụ cục bộ - bản thân các tác vụ đó là các hành động bạn có thể thực hiện trên một số đối tượng / khu vực chung, do đó, thật hợp lý khi giữ cùng một tiêu đề cho dù là cục bộ nào nhiệm vụ bạn đang làm.


Trong tình huống này, giá trị trả về của 'gọi lại tiêu đề' thay đổi tiêu đề của tab, không phải tiêu đề của trang. Bạn có thể thêm drupal_set_title ('my_new_title') bên trong chức năng gọi lại và nó hoạt động.
iStryker

Bất kỳ thông tin phản hồi về việc hạ cấp?!
Andy

@iStryker - cảm ơn đã phản hồi. Tôi hiểu rằng tiêu đề được truyền dưới dạng đối số cho cuộc gọi lại tiêu đề, vì vậy bạn có thể a) sử dụng một cuộc gọi lại tiêu đề của drupal_set_title(sẽ bỏ qua t()) hoặc b) sử dụng một cuộc gọi lại tùy chỉnh chuyển tiêu đề qua t()và gọi drupal_set_title()thủ công. Bạn có thấy một vấn đề với cách tiếp cận đó?
Andy

Trong bản demo myshift của tôi. Tôi đã thêm 'gọi lại tiêu đề' => 'example_title_callback' cho cả 3 mục menu. Trên tất cả 3 trang, hàm example_title_callback được gọi hơn 2 lần, Điều này là do các mục menu trong hook_menu () đang nhận cuộc gọi cho mỗi liên kết (tab) được hiển thị trên trang. (và example_title_callback luôn nhận được cuộc gọi để cố gắng xác định tiêu đề của liên kết). Do đó, nếu bạn có drupal_set_title trong example_title_callback, nó sẽ được gọi hơn 2 lần. Thật tệ. Nếu bạn đặt drupal_set_title bên trong trang gọi lại, thì nó chỉ được gọi một lần.
iStryker

1
@iStryker Cảm ơn, đó là một điểm rất tốt - cũng như được gọi nhiều hơn một lần, phương thức vốn đã bị phá vỡ, vì tab cuối cùng để tiêu đề của nó chạy qua cuộc gọi lại sẽ là một để đặt tiêu đề của trang (ngay cả khi nó không phải là tab hiện đang hoạt động).
Andy
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.