Làm cách nào để chuyển một biến từ mô-đun tùy chỉnh sang tệp mẫu của nó?


8

Tôi cần biết phương pháp đơn giản nhất để chuyển biến từ mô đun tùy chỉnh sang tệp mẫu của nó. Tôi đã tạo custom.module và đặt custom.tpl.php trong thư mục mô-đun.

function custom_menu(){
  $items = array();

  $items['custom'] = array(
    'title' => t('custom!'),
    'page callback' => 'custom_page',
    'access arguments' => array('access content'),
    'type' => MENU_CALLBACK,
  );

  return $items;
}

function custom_page() {

    $setVar = 'this is custom module';
    return theme('custom', $setVar);    
}

Tôi đã thêm chức năng chủ đề nhưng nó không hoạt động, có ai có thể gợi ý cho tôi những gì sai với mã này không

function theme_custom($arg) {
  return $arg['output'];
}

function custom_theme() {
  return array(
    'Bluemarine' => array(
        'variables' => 'output',
        'template' => 'Bluemarine',
     ),
  );
}

Câu trả lời:


6

Độc lập với phiên bản Drupal mà bạn đang viết mô-đun, có hai lỗi trong mã của bạn:

  • Bạn định nghĩa "Bluemarine" là chức năng chủ đề, nhưng sau đó bạn gọi theme('custom'), sẽ gọi chức năng chủ đề "tùy chỉnh"
  • Nếu bạn định nghĩa "tùy chỉnh" là một chức năng chủ đề sử dụng tệp mẫu, thì theme_custom()không bao giờ được gọi

Nếu bạn đang viết mã cho Drupal 6, thì mã đó sẽ tương tự như mã sau. Tôi lấy giả định tên cho chức năng chủ đề là custom.

function custom_menu(){
  $items = array();

  $items['custom'] = array(
    'title' => t('custom!'),
    'page callback' => 'custom_page',
    'access arguments' => array('access content'),
    'type' => MENU_CALLBACK,
  );

  return $items;
}

function custom_theme() {
  return array(
    'custom' => array(
      'arguments' => array('output' => NULL),
      'template' => 'custom',
     ),
  );
}

function custom_page() {
    $output = 'This is a custom module';
    return theme('custom', $output);    
}

function theme_custom($output) {
}

Tệp mẫu sẽ có quyền truy cập $outputvà vào bất kỳ biến nào được đặt trong template_preprocess_custom(), nếu mô-đun của bạn thực hiện nó.

Ví dụ: bạn có thể triển khai mã tương tự như sau:

function template_preprocess_custom(&$variables) {
  if ($variables['output'] == 'This is a custom module') {
    $variables['append'] = ' and I wrote it myself.";
  }
}

Với mã này, tệp mẫu có quyền truy cập $output$append.

Ví dụ về chức năng chủ đề sử dụng tệp mẫu, bạn có thể xem theme_node () , được định nghĩa trong node_theme () và sử dụng node.tpl.php làm tệp mẫu; hàm tiền xử lý được thực hiện bởi mô-đun Node cho chức năng chủ đề đó là template_pre process_node () .


Cảm ơn Kiam, rõ ràng đã bỏ lỡ nhận xét đầu tiên của OP về việc sử dụng D6. +1
Laxman13

Cảm ơn Kiam, template_pre process_custom (& $ biến) đã thực hiện thủ thuật
Kamran Akhter

Bây giờ tôi muốn chuyển tpl sang thư mục theme, làm thế nào tôi có thể làm điều đó?
Kamran Akhter

@KamranAkhter Đó là một câu hỏi khác. :-)
kiamlaluno

3

Bạn đang gọi sai chức năng chủ đề. Thay vì function theme_customnó nên được function theme_Bluemarine. Bạn cũng cần truyền một mảng cho phần biến của hook_theme () . Xem một ví dụ đơn giản ở đây .

Sử dụng ví dụ của bạn (sau khi thay đổi chức năng mẫu và chủ đề thành custom):

function custom_menu(){
  $items = array();

  $items['custom'] = array(
    'title' => t('custom!'),
    'page callback' => 'custom_page',
    'access arguments' => array('access content'),
    'type' => MENU_CALLBACK,
  );

  return $items;
}

function custom_page() {
  $setVar = 'this is custom module';
  return theme('custom', array('output' => $setVar));
}

function custom_theme() {
  $path = drupal_get_path('module', 'custom');
  return array(
    'custom' => array(
        'variables' => array('output' => null),
        'template' => 'custom',
     ),
  );
}

Bây giờ trong custom.tpl.php chỉ cần <?php print $output; ?>


Cảm ơn bạn đã trả lời ví dụ u đưa ra là mô-đun nút và tôi không có mô-đun nút. Tôi chỉ cần một cách để chuyển biến sang tệp tpl, tôi sử dụng trợ giúp drupal 6.plz
Kamran Akhter

Cảm ơn đã trả lời, nó gây ra lỗi cho tôi Không có tệp hoặc thư mục như vậy thực sự nó đang mong đợi tệp custom.tpl.php trong thư mục mô-đun mà tôi đã có trong mã bluemarine sẽ được thay thế bằng tùy chỉnh. Bluemarine là chủ đề drupal mà tôi đang sử dụng.
Kamran Akhter

đã thay đổi đoạn mã trên và đưa cho tôi màn hình trống trắng, tôi nên giúp đỡ gì
Kamran Akhter

Tôi đã thay đổi mã, và tôi có nó hoạt động trên trang web của tôi.
Laxman13

Tôi chỉ sao chép dán đoạn mã trên nhưng nó không hoạt động
Kamran Akhter
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.