web-dev-qa-db-fra.com

Drupal 7 Comment remplacer page.tpl pour un type de contenu spécifique?

Je voulais remplacer page.tpl.php pour un type de contenu spécifique. J'ai essayé ces choses, rien ne fonctionne pour moi.

  1. page--article.tpl.php
  2. page--node--article.tpl.php
  3. page--node--type--article.tpl.php
  4. page--node-type--article.tpl.php
  5. page--type--article.tpl.php

Mais lorsque j’ai ciblé un noeud par numéro, c’est-à-dire page--node--8.tpl.php, cela a bien fonctionné. Je pense que page--article.tpl.php aurait dû fonctionner, mais je ne sais pas pourquoi cela ne fonctionne pas.

S'il vous plaît dites-moi si je le nomme mal. et comment puis-je déboguer de telles choses. J'ai entendu dire que je pouvais utiliser le module Devel, mais je n'en savais rien. Un léger indice dans la bonne direction sera apprécié.

Merci d'avance

15
Rahul Prasad

Vous devez vous assurer que votre modèle peut gérer cela ... J'ai un extrait de code qui a fonctionné pour moi ici:

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

<?php
function themeName_preprocess_page(&$vars, $hook) {
  if (isset($vars['node'])) {
    // If the node type is "blog_madness" the template suggestion will be "page--blog-madness.tpl.php".
    $vars['theme_hook_suggestions'][] = 'page__'. $vars['node']->type;
  }
}
?>
19
BeWhy

Avez-vous pensé à vider le cache (sous Administrer> Configuration du site> Performances) pour que Drupal soit "informé" de votre nouveau fichier et l'utilise plutôt que celui par défaut.

Voir ici sur Effacement des données en cache

En outre, vous devrez peut-être ajouter un hook de prétraitement (je n’ai pas utilisé D7 moi-même, mais 5/6 - je pense que cela a légèrement changé.) Ce message sur Drupal Stack Exchange semble donner plus de détails.

4
anotherdave

Je viens de rencontrer le même problème.

noeud - recipe.tpl.php

not

page - recipe.tpl.php

bien entendu, il s’agit d’un type de contenu appelé «recette».

3
mikeDOTexe

TOUJOURS VIDER LE CACHE ...

Accédez à/admin/config/development/performance et cliquez sur le bouton d'effacement du cache. Ce devrait être la première chose à faire si vous avez modifié la structure du backend et que celle-ci ne s'affiche pas comme prévu.

Sinon vous avez presque eu raison 

  1. page - content-type-name.tpl.php

vous permettra de thème le modèle de type de contenu.

1
Ezra

Étape 1.créer un type de contenu par exemple: mon type de contenu est "fullwidthpage"

Étape 2. Copiez page.tpl.php et renommez le dossier page - fullwidthpage.tpl in.

Étape 3. Ajoutez ce code à template.php

function <strong>YOUR_THEME_NAME_HERE</strong>_preprocess_page(&$variables) {
  if (isset($variables['node']->type)) {
    // If the content type's machine name is "my_machine_name" the file
    // name will be "page--my-machine-name.tpl.php".
    $variables['theme_hook_suggestions'][] = 'page__' . $variables['node']->type;
  }
}

N'oubliez pas de changer YOUR_THEME_NAME_HERE

0
Arul M joseph

Donc, en fonction de ce que vous essayez d'accomplir, certaines astuces CSS pourraient vous aider.

Par exemple, pour remplacer les règles CSS d'un type de noeud spécifique, rappelez-vous que vos pages pour ce type de noeud auront une classe de corps de "node-type-[TYPE]" (c'est-à-dire: .node-type-article).

Vous pouvez ensuite remplacer le CSS comme suit:

body.node-type-article #selector {}
0
bitfed

Je sais que c’est une vieille question, mais si d’autres arrivent ici, la façon dont je substitue les types de contenu dans Drupal 7 est la suivante:

noeud - contenttype . tpl

0
Purplemonkey

Vous devrez remplacer le modèle de noeud spécifique pour le type de contenu s'il diffère de la page de base. S'il vous plaît vérifier ceci:

http://api.drupal.org/node/19080

Sous cette page, copiez/collez les éléments de la page node.tpl.php et écrasez-les comme vous le souhaitez. Vous pouvez accéder au noeud spécifiquement par $ node

Votre modèle pour les articles serait:

noeud - article.tpl.php

Une fois que cela est créé, assurez-vous de vider le cache pour vous assurer que cela fonctionne.

0
chadpeppers