Existe-t-il un moyen de supprimer la sortie des nœuds sur les pages de taxonomie, sans avoir à installer un module (c'est-à-dire juste dans template.php)?
Les nœuds étiquetés avec un terme de taxonomie apparaissent sur la "page Index de taxonomie" (par exemple, votre site.com/taxonomy/term/[id]).
Nouveau dans Drupal 7, les pages d'index de taxonomie peuvent avoir des champs qui leur sont attachés. Cependant, si vous essayez de contourner la page de taxonomie avec une vue (par exemple, pour contrôler la façon dont les nœuds sont affichés) , les champs des pages Index de taxonomie n'apparaîtront pas.
J'ai donc placé ma vue taxonomique en tant que bloc sur la page Index de taxonomie. De cette façon, je peux contrôler la façon dont les nœuds apparaissent et avoir toujours les champs de la page Index de taxonomie.
Pour cette raison, la page de taxonomie génère toujours ses nœuds. Je peux les masquer en définissant l'accroche des nœuds sur caché, mais cela charge toujours les nœuds (et donc tout CSS/Jquery attaché aux nœuds même si les nœuds ne sont pas affichés). Comment puis-je empêcher les nœuds d'apparaître, idéalement de l'intérieur de template.php?
Je sais, qui voulait une solution sans module, mais dans Drupal 7, il y a un module qui fait exactement ce dont vous avez besoin: Disable Term Node Listings
Il vous permet de choisir par vocabulaire, si vous souhaitez désactiver la sortie de la liste des termes.
La solution de http://www.wardontheweb.com/remove-node-lists-from-taxonomy-pages-in-drupal-7/ fonctionne bien pour moi:
function THEMENAME_preprocess_page(&$vars){
if (arg(0) == 'taxonomy' && arg(1) == 'term' && is_numeric(arg(2))){
unset($vars['page']['content']['system_main']['nodes']);
unset($vars['page']['content']['system_main']['pager']);
unset($vars['page']['content']['system_main']['no_content']);
}
}
Remarque: vous devez réinitialiser le cache de votre site.
Vous devez supprimer les nœuds de la variable $ page.
Dans template.php vous pouvez le faire comme ceci:
function MY_THEME_preprocess_page(&$variables) {
if(arg(0) == "taxonomy" && arg(1) == "term") {
$variables['page']['content']['system_main']['nodes'] = null;
}
}
Dans votre page.tpl.php utilisez ce code:
if(arg(0) == "taxonomy" && arg(1) == "term"){
$page['content']['system_main']['nodes'] = null;
}
Cela supprime les nœuds de tous les vocabulaires et termes. Si vous souhaitez les supprimer uniquement sur certains termes ou sur tous les termes d'un vocabulaire, utilisez arg(2)
qui contient le tid
pour charger le terme, puis mettez à jour l'instruction if.
J'utilisais CSS pour masquer les éléments de taxonomie, mais en définissant leur affichage sur personnalisé et en supprimant cela semble être une meilleure option.
Vous pouvez faire pratiquement n'importe quoi dans template.php, mais ce n'est pas recommandé. Le but de l'utilisation d'un CMS, c'est que vous séparez les données, le comportement et l'apparence. Le fichier template.php fait partie de la couche thématique, et vous devez l'utiliser pour ajuster le style visuel de votre site.
Si vous souhaitez ajuster le comportement d'un site (dans ce cas: contrôler quels éléments sont affichés dans une certaine liste), vous devez changer le comportement, donc vous installez et configurez des modules. Si vous souhaitez créer des listes de contenu personnalisées, le module Views est exactement ce dont vous avez besoin.
Dans votre cas (si je comprends bien), vous souhaitez que les champs du terme de taxonomie soient affichés au-dessus de la liste des nœuds marqués avec ce terme. Vous pouvez recréer cela dans votre vue en créant un bloc de vues qui prend le terme ID de l'URL et affiche les informations dont vous avez besoin.