[Resolu]insérer vue dans tpl.php

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour,

J'ai créé un type de contenu 'Profil adhérent' avec le module content profile.
J'ai rajouté les champs dont j'avais besoin avec le CCK.

J'ai créer un modèle de page node-profil-adherent.tpl.php.

J'ai un champ qui devrait apparaître sur cette page, mais que les utilisateurs ne doivent pas pouvoir modifier.

J'ai donc créer un autre type de contenu 'avantage-annuel' auquel j'ai mis un node-reference pointant sur le type de contenu 'profil-adherent'.

J'ai réalisé une view récupérant l'avantage annuel grâce à l'argument de l'url.

Cela fonctionne bien.

Mon problème c'est que je voudrais insérer la vue (block) dans ma page node-profil-adherent.tpl.php.

J'ai parcouru le forum et j'ai essayé de créer une zone pour mettre le bloc mais apparement ça ne fonctionne pas dans le contenu.

J'ai essayé ça mais sans succès

<?php $block = module_invoke('views', 'block', 'view',22); ?>
    <?php print "ma vue".$block['subject']; ?>
      <?php print $block['content']; ?>

<?php
       $view
= views_get_view('avantage_annuel');
print
"ma vue."views_build_view('embed', $view, $current_view->args, true, 10)
     
?>

Comment puis-je faire?

Merci de votre aide.

Forum : 
Version de Drupal : 

Salut
je ne me souviens plus du code exact. Par contre je te conseille effectivement de passer plutôt par la création d'un nouvelle région :
- déclarer la nouvelle région dans ton fichier.info (si il n'y en a pas de déjà déclaré, je crois qu'il faut que tu rédéclares les régions par défaut)
- ajouter la variable correspondante dans ton template
- et surtout vider le cache de Drupal car sinon il ne prendra pas ta nouvelle région si mes souvenirs sont bons.

Quand on l'a fait une fois et qu'on a compris le truc, ça prend vraiment 30 secondes à faire.

j'ai parlé trop vite.

Ma zone apparaît bien dans les zones bloc mais elle ne s'affiche pas dans le contenu même s'il y a des blocs paramétrés pour cette zone.

Pour info, ma zone n'apparaît pas dans page.tpl.php

et ma page node-profil-adherent.tpl.php n'a pas de $content mais uniquement les champs CCK que j'ai besoin d'afficher.

node-profil-adherent.tpl.php

<div class="node <?php print $classes; ?>" id="node-<?php print $node->nid; ?>">
  <div class="node-inner">
<div class="content">
     
    <h1 class="title bandeau-rose"><!-- nom boutique + adresse dans bandeau rose -->

   
   
    <div id="infos-profil">
     ...
    
     <?php if ($interieur):  // zone contenant le bloc issu de ma vue?>
            <div id="interieur">
              <?php print $interieur; ?>
            </div><!-- /#interieur -->
          <?php endif; ?>
   

    </div><!--fin div infos-profil -->

   
  </div> <!-- /node-inner -->
</div> <!-- /node-->

C'est moi qui ai lu trop vite, rajouter une zone dans un node est moins facile et oblige à passer par une fonction de preprocess pour router la variable de région vers les templates de nodes. (par défauts, les variables sont routées vers le page.tpl.php)
j'avais mis ça dans mon template.php pour communiquer ma région au node, tu peux essayer. (en l'occurence le nom machine de ma région était node_pub_article, et phptemplate était mon moteur de template).

<?php
function phptemplate_preprocess(&$variables, $hook) {
 
//ajouter une région dans les nodes
 
$variables['node_pub_article'] = theme('blocks', 'node_pub_article');
}
?>

Sinon en cherchant bien sur le web tu devrais trouver un snippet pour appeler une vue qui fonctionne.

[ edit : note qu'avec cette manip ta région sera accessible de la même manière que dans le page.tpl.php, simplement en tapant (dans mon cas) $node_pub_article ]

j'ai essayé avec mon code et ça me retourne une internal server errorsur tout le site.

ma region s'appelle 'interieur'

//appel de la region ds node-profile_adherent_partenaire
function phptemplate_preprocess(&$variables, $hook) {
  //ajouter une région dans les nodes
  $variables['interieur'] = theme('blocks', 'interieur');
}

Ne doit-on pas indiquer quelque part le nom du type de contenu?

ca marcherait pas mieux avec ça ?
(désolé je suis pas super au point encore avec les preprocess)

<?php
function phptemplate_preprocess_node(&$variables, $hook) {
 
$variables['interieur'] = theme('blocks', 'interieur');
}
?>

Le preprocess fonctionne ?

aux dernières nouvelles une vue en bloc ne prend pas les arguments, tu es obligé de lui fournir par défaut en php (sauf si c'est du nid dont tu as besoin, tu peux cocher nid from url dans les "provide default argument).
(met un empty text à ta vue et regarde si ça l'affiche)

FOR-MI-DABLE!!

Mille merci, ça fonctionne.
J'avais fourni l'argument en donnant arg(1) au lieu de à partir de l'URL et ça ne fonctionnait pas. C'est curieux tout de même, que ça ne fonctionne pas pour les blocs...