Charger un noeud dans un bloc en passant par un module.

Catégories:

Bonjour,

Dans un de mes types de noeud, j’affiche 5 blocs. Ces blocs affichent des informations du noeud principal. J’ai donc chargé le tableau $node dans ces blocs par le module.

C’est justement là où réside le problème. Pour arriver à transmettre les informations du noeud dans les blocs, j’ai utilisé la fonction hook_preprocess()en ajoutant de dans la ligne : $node = node_load(arg(1)) ; le problème c’est que ça me crée une erreur dans la taxonomie et surtout que node_load() marche avec tous les types de noeuds.

Il faudrait donc que je puisse rajouter un if($node->type == ‘modele_2r’) { }

Je pense qu’il doit y exister une fonction spécial pour charger un noeud dans un bloc ?

J’espère que vous pourrez m’aider !

Voilà la partie de mon module qui me charge les 5 blocs avec le noeud :

<?php
// $Id$

/
* Permissions du module
* @return array Tableau de permissions valides pour le module helloworld
*/
function modele_2r_perm() {
  return array('access modele_2r content');
}

/
* Implémentation de hook_block
*/
function modele_2r_block($op = 'list', $delta = 0, $edit = array ()) {
   switch($op) {
      case 'list':
         return array('modele_2r_presentation_block'=>array('info'=>'Modele 2R: Block Presentation'), 'modele_2r_fiche_technique_block'=>array('info'=>'Modele 2R: Block Fiche Technique'), 'modele_2r_coloris_block'=>array('info'=>'Modele 2R: Block Coloris'), 'modele_2r_galerie_photos_block'=>array('info'=>'Modele 2R: Block Galerie photos'), 'modele_2r_argus_block'=>array('info'=>'Modele 2R: Block Argus'));
      case 'view': {
         if ($delta=='modele_2r_presentation_block') {

               return array(
                    'subject'=>'Presentation du modele',
                    'content'=>theme('modele_2r_presentation_block', $node));
         }
         if ($delta=='modele_2r_fiche_technique_block') {
               return array(
                    'subject'=>'Fiche technique du modele',
                    'content'=>theme('modele_2r_fiche_technique_block', $node));
        }
         if ($delta=='modele_2r_coloris_block') {
               return array(
                    'subject'=>'Coloris disponible pour ce modele',
                    'content'=>theme('modele_2r_coloris_block', $node));
      }      
         if ($delta=='modele_2r_galerie_photos_block') {
               return array(
                    'subject'=>'Galerie photos pour ce modele',
                    'content'=>theme('modele_2r_galerie_photos_block', $node));
         }
         if ($delta=='modele_2r_argus_block') {
               return array(
                    'subject'=>'Argus pour ce modele',
                    'content'=>theme('modele_2r_argus_block', $node));
       }
   }
   }
}

function modele_2r_preprocess(&$variables, $hook ) {
  if(arg(0) == 'node') {
    $node = node_load(arg(1));
    $variables['node'] =  $node;
  }
}

function modele_2r_theme($existing, $type, $theme, $path) {
   return array(
      'modele_2r_presentation_block' => array(
          'arguments' => array('node'),
          'template' => 'modele_2r_presentation_block'),
      'modele_2r_fiche_technique_block' => array(
          'arguments' => array('node'),
          'template' => 'modele_2r_fiche_technique_block'),
      'modele_2r_coloris_block' => array(
          'arguments' => array('node'),
          'template' => 'modele_2r_coloris_block'),
      'modele_2r_galerie_photos_block' => array(
          'arguments' => array('node'),
          'template' => 'modele_2r_galerie_photos_block'),
      'modele_2r_argus_block' => array(
          'arguments' => array('node'),
          'template' => 'modele_2r_argus_block')
  );
}

#

La fonction que tu cherches est menu_get_object()

http://api.drupal.org/api/function/menu_get_object/6

Richard lascols
www.ideia.fr

#

Merci beaucoup ! Ca marche super ! Par contre je n’ai pas bien compris comment cette fonction travail. Si j’ai bien compris elle récupère directement dans le contenu ce que l’on lui a demandé (noeud) et donc n’utilise pas node_load() ce qui veut dire qu’elle utilise moins de resource ( que node_load() ) non ?

#

A votre place j’aurais utilisé panels pour créer ces block avec comme contexte votre node.

#

Je ne connais pas bien ce module… Le but de ces blocs est de les afficher dans le module quicktabs pour avoir dans mon noeud des onglets.

Syndiquer le contenu