it-swarm-vi.com

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

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.

12
Paul Sheldrake

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 đề xuất bổ sung, chủ đề của bạn nên triển khai template_pre process_page () và thêm đề xuất mới trong $variables['theme_hook_suggestions'] ($variables là 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 theme_get_suggestions () (là hàm được gọi bởi template_pre process_page () ) dấu gạch nối được thay thế bằng _, và không phải ngược lại. Lý do được thực hiện được giải thích trong một nhận xét đượ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);
14
kiamlaluno

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 có í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.
  }
}
?>
5
Bob Rivers

Tôi đã mất 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 hiệu quả với tôi. Một số điều thú vị 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 bất kỳ tập lệnh tiền xử lý nào!? Đ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

2
Daniel