it-swarm-eu.dev

Návrhy šablony stránky nefungují

Vytvořil jsem téma a mám své šablony v této struktuře

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

Vytvořil jsem vlastní šablonu stránky, ale z nějakého důvodu ji Drupal nezvedl. Vymazal jsem mezipaměť a také jsem se pokusil přidat tuto funkci preprocesoru do souboru theme.php, ale stále to nefunguje.

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

Jakákoli pomoc by byla oceněna.

12
Paul Sheldrake

Jak je uvedeno v Návrhy šablon 7 Drupal , návrh šablon používaný ve výchozím nastavení z Drupal 7 pro stránky je stránka - [přední | interní/cesta] .tpl.php .

Pro stránku viditelnou na http://www.example.com/node/1/edit , Drupal bude hledat následující soubory šablon:

  • page - node - edit.tpl.php
  • stránka - uzel - 1.tpl.php
  • stránka - node.tpl.php
  • page.tpl.php

Chcete-li přidat další návrhy, měl by váš motiv implementovat template_preprocess_page () a přidat nové návrhy do $variables['theme_hook_suggestions'] ($variables je proměnná předaná odkazem na funkci).

Pokud jste tak učinili, pak jediný navrhovaný soubor šablony není používán, je to, že soubor není správně pojmenován: v případě, že stránka zobrazuje stránku knihy, měl by být soubor šablony například stránka - book.tpl .php. Můžete změnit kód svého motivu a nechat jej použít stránku page - node-type.tpl.php, pokud nenajde šablonu, jako je stránka - book.tpl.php.

Všimněte si také, že v theme_get_suggestions () (což je funkce nazvaná template_preprocess_page () ) jsou spojovníky nahrazeny _, a ne naopak. Důvod, proč se tak stane, je vysvětlen v komentáři hlášeném ve funkčním kódu.

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

Používám Drupal 7,4 a měl jsem stejný problém a jediná věc, která mi pomohla, byl tento příspěvek: Jak přidat vlastní page.tpl na základě typů obsah =

Z příspěvku:

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

Strávil jsem příliš dlouho pokusem následovat výše uvedený příklad pomocí nahrazení řetězce v Drupal 7,22. Nezdá se mi, že by to fungovalo. Zajímavé je, že některé typy obsahu jsou navrženy automaticky, zatímco jiné ne. To je nakonec ten kód, který pro mě pracoval.

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

návrh šablony pro typ obsahu front_page by tedy byl:

stránka - front_cover.tpl.php

Zajímavé je, že návrh šablony kódu pro typ obsahu „vydání“ přichází jako stránka - issue.tpl.php bez potřeby předprocesorového skriptu !? Zdá se, že to pro mé účely přepíše šablonu pohledu, která používá podobnou cestu.

tj.

zobrazit cestu =/issue/# návrh šablony na základě typu obsahu, tj./issue/#/front_cover

2
Daniel