Nom de fichier du modèle de page candidate pour une entrée de type de contenu personnalisé particulier

11

Je travaille sur un site Web Drupal 7. J'ai créé un type de contenu personnalisé pour les œuvres. J'ai de nombreux champs, et certains d'entre eux sont liés à la mise en page, comme une page bg particulière pour chaque entrée. J'ai donc besoin de page.tpl personnalisé pour ce type de contenu particulier.

J'ai donc activé et ouvert le module Theme Developer, et j'ai cliqué sur la zone du corps pour obtenir le nom du candidat pour cette entrée de page de type de contenu particulier. et cela me donne l'écran ci-dessous qui ne veut rien dire pour moi: / Quand je clique sur la zone du nœud, ça va, ça donne node - work.tpl.php, mais j'ai besoin d'une page. J'ai essayé "page - work.tpl.php", cela n'a pas fonctionné.

Qu'est-ce que je rate?

entrez la description de l'image ici

Drupal guy
la source

Réponses:

12
function mytheme_process_page(&$variables) {
    $variables['theme_hook_suggestions'][] = 'page__'. $variables['node']->type;
}

En supposant que votre nom de type de contenu lisible par machine est "work", page - work.tpl.php fonctionnera.

Reportez-vous à ce fil pour plus d'informations.

mingos
la source
Hou la la! cela a très bien fonctionné! Je peux m'adresser à la page - work.tpl.php maintenant :) bien que cela fonctionne bien, j'ai un message d'erreur en tant que d.pr/EaMa que j'ai googlé et essayé de résoudre, essayant toujours ... une idée? Merci beaucoup pour votre temps!!
Drupal guy
oh je suppose que c'était à cause du module Theme Developer. Je désactive le module et l'erreur a disparu :) merci beaucoup!
Drupal guy
2

Dans template.php, ajoutez:

function themeName_preprocess_page(&$vars) {
  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);
  }
}

Vous pouvez omettre str_replace(); testez la version qui vous convient le mieux.

Ensuite, créez un fichier modèle dont le nom de fichier est page –- [content_type] .tpl.php. (Remplacez [content_type] par le nom de machine du type de contenu.)

Voir http://drupal.org/node/1089656#comment-4426790 .

Mołot
la source
1

Si vous souhaitez également l'ID du nœud, utilisez-le.

function mytheme_process_page(&$variables) {
  if (isset($variables['node'])) { 
    $variables['theme_hook_suggestions'][] = 'page__type__'. $variables['node']->type;
    $variables['theme_hook_suggestions'][] = 'page__node__' . $variables['node']->nid;
  }
}

la source
0

Avoir un modèle différent pour chaque type de contenu n'est pas une bonne pratique selon les gars de Drupal. C'est la raison pour laquelle vous ne trouvez pas page--work.tpl.phpdans la liste des fichiers de modèles candidats. Ils estiment que seuls les fichiers de modèle de nœud devraient être différents. Cependant, si vous voulez pirater, allez-y.

Utilisez l'alias de chemin pour configurer un chemin basé sur le type de contenu. Et puis insérez ce code

 if (module_exists('path')) {
    $alias = drupal_get_path_alias(str_replace('/edit','',$_GET['q']));
    if ($alias != $_GET['q']) {
      $template_filename = 'page';
      foreach (explode('/', $alias) as $path_part) {
        $template_filename = $template_filename . '-' . $path_part;
        $vars['template_files'][] = $template_filename;
      }
    }
  }

dans la phptemplate_preprocess_page(&$vars)fonction template.phpdans le dossier du thème.

Vous pouvez cependant modifier un peu le code pour le rendre plus efficace.

Gokul NK
la source