2010-08-11 25 views
0

Je travaille dans Drupal 6.Détermination du type de contenu de la page

J'ai besoin d'ajouter un bloc particulier lorsque l'utilisateur est sur une page de blog. Cela semble assez simple, mais ça m'a rendu fou.

Le bloc doit être affiché lorsque l'utilisateur consulte un aperçu de blog ou une entrée de blog individuelle.

J'ai d'abord pensé que je pouvais le filtrer par nom de page afin qu'il n'apparaisse que si page =/blog/. Malheureusement, cela ne s'applique qu'à la page d'aperçu du blog; les pages d'entrée de blog individuelles ont leurs propres URL (la valeur par défaut est/node/ mais sera modifiée en fonction des besoins du propriétaire).

Un peu plus de googler, et j'ai découvert $ node-> type == 'blog' qui devrait prendre en compte le fait que je suis sur une page d'entrée de blog, mais ne semble pas fonctionner.

Dans l'admin/build/block/page configure Je la page visibilité réglée sur le mode PHP et le code PHP comme suit:

<?php 
return ($node->type == 'blog'); 
?> 

mais cela ne semble pas fonctionner, même si si je print_r ($ node) dans le template, il affiche type == blog.

J'ai également ajouté strpos ($ _ SERVER ['REQUEST_URI', 'blog') à ce qui précède, mais bien sûr, puisque la première condition ne fonctionne pas, l'ajout de la seconde n'aidera pas.

On dirait qu'il devrait y avoir une réponse évidente, mais je ne peux pas le trouver. Quelqu'un peut m'aider. Merci.

+0

Le code que vous avez semble correct. Vous pouvez également utiliser le module de contexte pour activer les blocs dans certains contextes. La graine de développement a une bonne vidéo à ce sujet. – Keyo

+0

Pour une vue de nœud simple, utilisez $ node = node_load (arg (1)); return ($ node-> type == 'blog'); pour la liste des blogs utiliser blog ou blog/* – Nikit

Répondre

1

Votre problème avec le code ci-dessus, c'est que lorsque vous exécutez le code pour le bloc, il n'a pas la variable $ node disponible. Vous devez faire quelque chose comme ceci pour l'ajouter aux nœuds de blog.

<?php 
    // This code checks the internal url, which for nodes always will be node/[nid]. 
    // Last condition: don't display the block on node edit forms etc. 
    if (arg(0) == 'node' && is_numeric(arg(1)) && empty(arg(2))) { 
     $node = node_load(arg(1)); 
     return $node->type == 'blog'; 
    } 
?> 
+0

Le code est moche et non-évident, mais semble fonctionner (après la correction de la syntaxe!;)), alors merci pour cela. Merci aussi à Nikit qui a suggéré à peu près la même chose. Compte tenu de la similitude dans les deux commentaires, je présume qu'il est documenté quelque part sur le site drupal? Je suppose que mon google-fu n'est pas aussi fort que je voudrais le penser. Y at-il un surcoût majeur à appeler node_load() tout le temps comme ça? – Spudley

+0

Les appels node_load sont mis en cache (statiques) donc il n'y a pas de surcharge, car le nœud que vous visualisez sera chargé de toute façon. – Tom