I suggerimenti del modello di pagina non funzionano


12

Ho creato un tema e ho i miei file modello in questa struttura

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

Ho creato un modello di pagina personalizzato ma per qualche motivo non è stato raccolto da Drupal. Ho svuotato la cache e ho anche provato ad aggiungere questa funzione di preprocessore nel file template.php tema ma non funziona ancora.

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

Qualsiasi aiuto sarebbe apprezzato.


/templates/page/page--node-type.tpl.php non dovrebbe essere page - blog.tpl.php?
Jeremy francese,

Risposte:


14

Come riportato in Suggerimenti modello Drupal 7 , il suggerimento modello utilizzato di default da Drupal 7 per le pagine è page - [front | internal / path] .tpl.php.

Per una pagina visibile su http://www.example.com/node/1/edit , Drupal cercherà i seguenti file modello:

  • Pagina - nodo - edit.tpl.php
  • Pagina - nodo - 1.tpl.php
  • Pagina - node.tpl.php
  • page.tpl.php

Per aggiungere ulteriori suggerimenti, il tema dovrebbe implementare template_preprocess_page () e aggiungere nuovi suggerimenti in $variables['theme_hook_suggestions']( $variablesè la variabile passata per riferimento alla funzione).

Se lo hai fatto, l'unico motivo per cui il file modello suggerito non viene utilizzato è perché il file non ha un nome corretto: nel caso in cui la pagina mostri una pagina del libro, ad esempio, il file modello dovrebbe essere page - book.tpl .php. Puoi cambiare il codice per il tuo tema e lasciarlo usare il modello page - node-type.tpl.php, se non trova un modello come page - book.tpl.php.

Da notare anche che, in theme_get_suggestions () (che è la funzione chiamata da template_preprocess_page () ) i trattini sono sostituiti da _, e non viceversa. Il motivo è spiegato in un commento riportato nel codice funzione.

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

Sto usando Drupal 7.4 e ho avuto lo stesso problema e l'unica cosa che mi ha aiutato è stato questo post: Come aggiungere un page.tpl personalizzato in base ai tipi di contenuto

Dal post:

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

Grazie mille ... mostrare che la relazione tra il suggerimento e il nome del modello mi ha davvero aiutato. Grazie ancora :)
SGhosh,

2

Ho passato troppo tempo a cercare di seguire l'esempio sopra usando la sostituzione della stringa in Drupal 7.22. Questo non sembra funzionare per me. È interessante notare che alcuni tipi di contenuto sembrano essere suggeriti automaticamente, mentre altri no. Questo è il codice che ha funzionato per me alla fine.

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

quindi il suggerimento del modello per un tipo di contenuto di front_page sarebbe quindi:

Pagina - front_cover.tpl.php

È interessante notare che il suggerimento del modello di codice per il tipo di contenuto 'issue' arriva come pagina - issue.tpl.php senza la necessità di uno script di preprocessore !? Questo per i miei scopi sembra sovrascrivere il modello di visualizzazione che utilizza un percorso simile.

vale a dire

view path = / issue / # suggerimento modello basato sul tipo di contenuto, ad esempio / issue / # / front_cover


suggerimento di modello per un tipo di contenuto di front_page questo sarà senza alcun script del preprocessore: page - front-cover.tpl.php
sneha.kamble
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.