J'essaie de masquer le titre de la page actuelle (tel qu'imprimé par page.tpl.php
) Si la page actuelle est 1) un nœud en plein affichage (par opposition au mode teaser) ET 2) le type de nœud est soit concert ou bio . J'imprime le titre du nœud pour ces types de contenu directement dans le contenu du nœud, donc je veux masquer le doublon en cours d'impression par page.tpl.php. Je ne suis pas en mesure de faire fonctionner cela directement dans page.tpl.php, et ma lecture suggère que la meilleure pratique consiste à gérer la logique du modèle dans template.php à l'aide de fonctions de prétraitement et de traitement. Donc, j'essaie de cacher le titre de la page actuelle (avec les 2 conditions ci-dessus) en utilisant template_preprocess_page()
. Ceci est mon code.
<?php
function MYTHEME_preprocess_page(&$variables) {
if (!empty($variables['node']) && $variables['node']->type == 'concert') {
hide($variables['title']);
}
}
?>
J'ai lu Comment puis-je tester le type de nœud pour imprimer une variable à partir de template.php? et la page de documentation pour template_preprocess_page()
, et divers autres sites, mais je n'arrive pas à faire fonctionner ça. J'ai vu des suggestions selon lesquelles vous devez appeler isset()
sur $variables['node']
Avant de tester le type de nœud, mais cela n'a pas fonctionné non plus. Je n'ai vu aucune solution claire affichée nulle part, et je suis à bout de souffle.
et ma lecture suggère que la meilleure pratique est de gérer la logique du modèle dans template.php en utilisant des fonctions de prétraitement et de traitement.
Le découplage de la logique du code de rendu signifie simplement que le code dans template.php définit une variable qui est vérifiée dans le fichier de modèle. De cette façon, la logique est entièrement contenue dans le fichier template.php, tandis que le code de rendu est tout dans les fichiers de modèle.
function mytheme_preprocess_page(&$variables) {
if (!empty($variables['node']) && $variables['node']->type == 'concert') {
$variables['show_title'] = FALSE;
}
}
<?php if ($show_title && $title): ?><h1 class="title" id="page-title"><?php print $title; ?></h1><?php endif; ?>
hide()
ne fonctionne pas car $variables['title']
est une chaîne, pas un tableau de rendu. hide()
est toujours utilisé avec un tableau de rendu, et il n'a aucun effet avec une chaîne, pas même lorsque la chaîne est passée à render()
.
En fait, passer une chaîne (ou toute valeur qui n'est pas une référence à une variable contenant un tableau) à hide()
entraînerait une erreur PHP, car la fonction utilise ce code.
function hide(&$element) {
$element['#printed'] = TRUE;
return $element;
}
La suppression de $variables['title']
Avec unset($variables['title'])
ne fonctionne pas non plus, car template_process_page()
obtiendrait le titre de la page de drupal_get_title()
.
if (!isset($variables['title'])) {
$variables['title'] = drupal_get_title();
}
Vous pouvez gérer cela en utilisant drupal_set_title ().
function mytheme_preprocess_page(&$vars){
if (isset($vars['node']) && $vars['node']->type == 'news'){
drupal_set_title('');
}
}
Essayez ceci en supposant que votre condition est correcte :)
function MYTHEME_preprocess_page(&$variables) {
if (!empty($variables['node']) && $variables['node']->type == 'concert') {
unset($variables['title']);
}
}
La fonction correcte est
function mytheme_preprocess_node(&$vars) {
}
au lieu de
function mytheme_preprocess_page(&$vars) {
}
La manière la moins compliquée consiste à l'imprimer dans votre page.tpl.php
<?php hide($title); ?>
Mais si vous voulez qu'il soit dynamique, je vous suggère d'utiliser le preprocess_page
comme suggéré par d'autres.
la suggestion de mytheme_preprocess_page fonctionne pour moi mais si elle est utilisée $vars['title_hidden'] = TRUE;
function mytheme_preprocess_page(&$vars) {
if (isset($vars['node']->type) && $vars['node']->type == 'type') {
$vars['title_hidden'] = TRUE;
}
}
En CSS, je l'ai fait pour mon thème
/* Front Page - hide title */
body.front header h1 {
position: absolute;
left: -999em;
}
Tel que recommandé par http://www.alistapart.com/articles/now-you-see-me/
Pourquoi? Parce que vous voulez toujours que l'en-tête et h1 soient "visibles" pour filtrer l'accessibilité des lecteurs. Si vous supprimez simplement la valeur du H1, vous volez à vos visiteurs aveugles et malvoyants des informations potentiellement importantes.