Saran templat halaman tidak berfungsi


12

Saya telah membuat tema dan memiliki file template saya dalam struktur ini

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

Saya telah membuat templat halaman khusus tetapi untuk beberapa alasan itu tidak diambil oleh Drupal. Saya telah membersihkan cache dan juga mencoba menambahkan fungsi preprocessor ini dalam file theme.php theme tetapi masih tidak berfungsi.

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

Bantuan apa pun akan dihargai.


/templates/page/page--node-type.tpl.php haruskah itu bukan halaman - blog.tpl.php?
Jeremy French

Jawaban:


14

Seperti yang dilaporkan dalam Saran Template Drupal 7 , saran template yang digunakan secara default dari Drupal 7 untuk halaman adalah halaman - [depan | internal / path] .tpl.php.

Untuk halaman yang terlihat di http://www.example.com/node/1/edit , Drupal akan mencari file templat berikut:

  • halaman - simpul - edit.tpl.php
  • halaman - simpul - 1.tpl.php
  • halaman - node.tpl.php
  • page.tpl.php

Untuk menambahkan saran tambahan, tema Anda harus menerapkan template_preprocess_page () dan menambahkan saran baru di $variables['theme_hook_suggestions']( $variablesadalah variabel yang diteruskan oleh referensi ke fungsi).

Jika Anda melakukannya, maka satu-satunya alasan file templat yang disarankan tidak digunakan adalah karena file tersebut tidak diberi nama dengan benar: dalam kasus ini halaman menampilkan halaman buku, misalnya, file templat tersebut harus berupa halaman - book.tpl .php. Anda dapat mengubah kode untuk tema Anda, dan membiarkannya menggunakan halaman - template node-type.tpl.php, jika tidak menemukan template seperti halaman - book.tpl.php.

Untuk memperhatikan juga bahwa, di theme_get_suggestions () (yang merupakan fungsi yang disebut oleh template_preprocess_page () ) tanda hubung diganti dengan _, dan bukan sebaliknya. Alasan yang dilakukan dijelaskan dalam komentar yang dilaporkan dalam kode fungsi.

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

Saya menggunakan Drupal 7.4, dan saya memiliki masalah yang sama dan satu-satunya hal yang membantu adalah posting ini: Bagaimana cara menambahkan halaman kustom.tpl berdasarkan jenis konten

Dari pos:

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

Terima kasih banyak ... menunjukkan hubungan antara saran dan nama templat sangat membantu. Terima kasih lagi :)
SGhosh

2

Saya telah menghabiskan terlalu lama untuk mencoba mengikuti contoh di atas menggunakan ganti string di Drupal 7.22. Ini sepertinya tidak berhasil untuk saya. Menariknya beberapa jenis konten tampaknya disarankan secara otomatis, sementara yang lain tidak. Ini adalah kode yang pada akhirnya berhasil bagi saya.

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

jadi saran template untuk tipe konten front_page ini akan menjadi:

halaman - front_cover.tpl.php

Menariknya saran templat kode untuk tipe konten 'masalah' muncul sebagai halaman - issue.tpl.php tanpa perlu skrip preprosesor !? Ini untuk tujuan saya tampaknya menimpa tampilan template yang menggunakan jalur yang sama.

yaitu

view path = / issue / # template saran berdasarkan tipe konten yaitu / issue / # / front_cover


saran templat untuk jenis konten front_page ini akan tanpa skrip preprosesor: halaman - sampul depan.tpl.php
sneha.kamble
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.