Đề xuất mẫu trang không hoạt động


12

Tôi đã tạo một chủ đề và có các tệp mẫu của tôi trong cấu trúc này

  • /temsheet/page/page.tpl.php
  • /temsheet/page/page--node-type.tpl.php

Tôi đã tạo một mẫu trang tùy chỉnh nhưng vì một số lý do, nó không được Drupal chọn. Tôi đã xóa bộ nhớ cache và cũng đã thử thêm chức năng tiền xử lý này vào tệp theme.php. Nhưng nó vẫn không hoạt động.

if (isset($vars['node'])) 
  {
    // If the node type is "blog" the template suggestion will be "page--blog.tpl.php".
    $vars['theme_hook_suggestions'][] = 'page__'. str_replace('_', '--', $vars['node']->type);
  }

Bất kỳ trợ giúp sẽ được đánh giá cao.


/temsheet/page/page--node-type.tpl.php có nên không phải là trang - blog.tpl.php?
Jeremy Pháp

Câu trả lời:


14

Như đã báo cáo trong Đề xuất mẫu Drupal 7 , đề xuất mẫu được sử dụng theo mặc định từ Drupal 7 cho các trang là trang - [front | Internal / path] .tpl.php.

Đối với một trang hiển thị tại http://www.example.com/node/1/edit , Drupal sẽ tìm các tệp mẫu sau:

  • trang - nút - edit.tpl.php
  • trang - nút - 1.tpl.php
  • trang - node.tpl.php
  • trang.tpl.php

Để thêm các đề xuất bổ sung, chủ đề của bạn nên triển khai template_pre process_page () và thêm các đề xuất mới trong $variables['theme_hook_suggestions']( $variableslà biến được truyền bởi tham chiếu đến hàm).

Nếu bạn đã làm điều đó, thì lý do duy nhất mà tệp mẫu được đề xuất không được sử dụng là vì tệp không được đặt tên chính xác: trong trường hợp trang hiển thị trang sách, ví dụ: tệp mẫu phải là trang - book.tpl .php. Bạn có thể thay đổi mã cho chủ đề của mình và cho phép nó sử dụng trang - mẫu nút-type.tpl.php, nếu nó không tìm thấy một mẫu như trang - book.tpl.php.

Cũng lưu ý rằng, trong các dấu gạch ngang theme_get_suggestions () (là hàm được gọi bởi các dấu gạch ngang template_pre process_page ()) được thay thế bởi _, chứ không phải ngược lại. Lý do được thực hiện được giải thích trong một bình luận được báo cáo trong mã chức năng.

// When we discover templates in drupal_find_theme_templates(),
// hyphens (-) are converted to underscores (_) before the theme hook
// is registered. We do this because the hyphens used for delimiters
// in hook suggestions cannot be used in the function names of the
// associated preprocess functions. Any page templates designed to be used
// on paths that contain a hyphen are also registered with these hyphens
// converted to underscores so here we must convert any hyphens in path
// arguments to underscores here before fetching theme hook suggestions
// to ensure the templates are appropriately recognized.
$arg = str_replace(array("/", "\\", "\0", '-'), array('', '', '', '_'), $arg);

5

Tôi đang sử dụng Drupal 7.4 và tôi gặp vấn đề tương tự và điều duy nhất hữu ích là bài đăng này: Cách thêm một trang tùy chỉnh.tpl dựa trên các loại nội dung

Từ bài viết:

<?php
/**
* Variables preprocess function for the "page" theming hook.
*/
function THEME_NAME_preprocess_page(&$vars) {

  // Do we have a node?
  if (isset($vars['node'])) {

    // Ref suggestions cuz it's stupid long.
    $suggests = &$vars['theme_hook_suggestions'];

    // Get path arguments.
    $args = arg();
    // Remove first argument of "node".
    unset($args[0]);

    // Set type.
    $type = "page__type_{$vars['node']->type}";

    // Bring it all together.
    $suggests = array_merge(
      $suggests,
      array($type),
      theme_get_suggestions($args, $type)
    );

    // if the url is: 'http://domain.com/node/123/edit'
    // and node type is 'blog'..
    //
    // This will be the suggestions:
    //
    // - page__node
    // - page__node__%
    // - page__node__123
    // - page__node__edit
    // - page__type_blog
    // - page__type_blog__%
    // - page__type_blog__123
    // - page__type_blog__edit
    //
    // Which connects to these templates:
    //
    // - page--node.tpl.php
    // - page--node--%.tpl.php
    // - page--node--123.tpl.php
    // - page--node--edit.tpl.php
    // - page--type-blog.tpl.php          << this is what you want.
    // - page--type-blog--%.tpl.php
    // - page--type-blog--123.tpl.php
    // - page--type-blog--edit.tpl.php
    //
    // Latter items take precedence.
  }
}
?>

Cảm ơn rất nhiều ... cho thấy mối quan hệ giữa gợi ý và tên mẫu thực sự hữu ích. Cảm ơn một lần nữa :)
SGhosh

2

Tôi đã dành quá nhiều thời gian để cố gắng làm theo ví dụ trên bằng cách sử dụng chuỗi thay thế trong Drupal 7.22. Điều này dường như không làm việc cho tôi. Điều thú vị là một số loại nội dung dường như được đề xuất tự động, trong khi những loại khác thì không. Đây là mã làm việc cho tôi cuối cùng.

if (isset($variables['node'])) {
   // $variables['theme_hook_suggestions'][] = 'page__'. str_replace('_', '--', $variables['node']->type);
   //cannot get above working for some reason?
     $variables['theme_hook_suggestions'][] = 'page__' . $variables['node']->type;
  }

vì vậy, đề xuất mẫu cho loại nội dung front_page sau đó sẽ là:

trang - front_cover.tpl.php

Điều thú vị là đề xuất mẫu mã cho loại nội dung 'vấn đề' xuất hiện dưới dạng trang - vấn đề.tpl.php mà không cần tập lệnh tiền xử lý!? Điều này cho mục đích của tôi dường như ghi đè lên mẫu xem sử dụng một đường dẫn tương tự.

I E

xem đường dẫn = / vấn đề / # đề xuất mẫu dựa trên loại nội dung tức là / vấn đề / # / front_cover


đề xuất mẫu cho loại nội dung front_page này sẽ không có bất kỳ tập lệnh tiền xử lý nào: page - front-cover.tpl.php
sneha.kamble
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.