Sayfa şablonu önerileri çalışmıyor


12

Bir tema oluşturdum ve şablon dosyalarımı bu yapıda yaptım

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

Özel bir sayfa şablonu oluşturdum, ancak bir nedenden dolayı Drupal tarafından alınmıyor. Önbelleğimi temizledim ve tema şablonu.php dosyasına bu önişlemci işlevini eklemeyi denedim, ancak hala çalışmıyor.

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

Herhangi bir yardım mutluluk duyacağız.


/templates/page/page--node-type.tpl.php bu sayfa olmamalı - blog.tpl.php?
Jeremy French

Yanıtlar:


14

Drupal 7 Şablon Önerileri'nde bildirildiği gibi , sayfalar için Drupal 7'den varsayılan olarak kullanılan şablon önerisi sayfa - [ön | dahili / yol] .tpl.php'dir.

Http://www.example.com/node/1/edit adresinde görünen bir sayfa için Drupal aşağıdaki şablon dosyalarını arar:

  • Sayfa - düğüm - edit.tpl.php
  • Sayfa - düğüm - 1.tpl.php
  • Sayfa - node.tpl.php
  • page.tpl.php

Ek öneriler eklemek için temanızın template_preprocess_page () yöntemini uygulaması ve $variables['theme_hook_suggestions']( içinde $variablesişleve referansla geçirilen değişken ) yeni öneriler eklemesi gerekir .

Bunu yaptıysanız, önerilen şablon dosyasının kullanılmamasının tek nedeni, dosyanın doğru adlandırılmamasıdır: sayfanın bir kitap sayfası göstermesi durumunda, şablon dosyası page - book.tpl olmalıdır .php. Temanızın kodunu değiştirebilir ve page - book.tpl.php gibi bir şablon bulamazsa page - node-type.tpl.php şablonunu kullanmasına izin verebilirsiniz.

Bunu da fark etmek için, theme_get_suggestions () 'da ( template_preprocess_page () tarafından çağrılan işlev ) tire işaretleri yerine _, tersi değil. Bunun nedeni fonksiyon kodunda bildirilen bir açıklamada açıklanmaktadır.

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

Drupal 7.4 kullanıyorum ve aynı sorun vardı ve yardımcı olan tek şey bu yazı oldu: İçerik türlerine göre özel bir page.tpl nasıl eklenir

Gönderiden:

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

Çok teşekkürler ... öneri ve şablon adı arasındaki ilişkiyi göstermek gerçekten çok yardımcı oldu. Tekrar teşekkürler :)
SGhosh

2

Ben çok uzun Drupal 7.22 dize yerine kullanarak yukarıdaki örneği izlemeye çalışırken geçirdim. Bu benim için işe yaramıyor. İlginçtir ki, bazı içerik türleri otomatik olarak önerilirken bazıları önerilmemektedir. Sonunda benim için çalışan kod bu.

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

böylece bir front_page içerik türü için şablon önerisi şöyle olur:

Sayfa - front_cover.tpl.php

İlginç bir şekilde, 'sayı' içerik türü için kod şablonu önerisi, bir önişlemci komut dosyasına gerek kalmadan page - issue.tpl.php olarak gelir !? Bu benim amacım için benzer bir yol kullanan görünüm şablonunu geçersiz kılıyor gibi görünüyor.

yani

yolu görüntüle = / issue / # içerik türüne göre şablon önerisi ie / issue / # / front_cover


front_page içerik türü için şablon önerisi, herhangi bir önişlemci komut dosyası olmadan olacaktır: page - front-cover.tpl.php
sneha.kamble
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.