2010-08-19 4 views
0

J'ai besoin de lister tous les projets d'une société de publicité avec leurs photos et vidéos regroupées par sujet. Par exemple, listez sous "Campagnes vertes", tous les projets liés à celui-ci, et en même temps, sous chaque projet montre (en utilisant une grille) toutes les images et vidéos de ce projet spécifique. Mon approche consistait à faire une vue différente pour chaque liste, mais je ne peux pas attacher une vue à l'intérieur d'une autre vue.Drupal Liste des vues liées

J'ai créé un type de contenu pour les images, les projets et les sujets. Chacun faisant des références les uns aux autres. (Cette partie fonctionne)

Répondre

0

Je ne dirai pas que c'est la méthode la plus simple/la meilleure mais cela devrait fonctionner ... Je suppose que vous utilisez les modules node_reference, cck et views. Je pense que vous devriez faire 2 choses:

D'abord, vous ne devriez pas créer un nouveau type de contenu pour les sujets. Il est préférable de créer une "campagne" de taxonomie et de la configurer de sorte que vous puissiez choisir un thème de taxonomie à partir du type de contenu "projets". Vous pouvez l'utiliser pour filtrer les "sujets" dans vos vues.

En second lieu, voici un exemple de chargement d'un nœud à l'aide du module node_reference: Dans mon exemple, disons qu'il existe 2 types de contenu: événement et eventsubscribers un événement a une référence à plusieurs eventsubscribers. Pour cet exemple, je vais thématiser le type de contenu en utilisant le tpl.php. Pour plus d'informations consulter: http://drupal.org/node/17565, http://drupal.org/node/53464 et http://drupal.org/node/266817

  • Créer une vue avec l'élément principal que vous souhaitez filtrer. Dans mon exemple, chaque événement est associé à des eventsubscribers, donc je crée un filtre de vue sur le type de noeud (événement) et le noeud publié (oui).

  • Définissez le style de ligne sur "noeud". Cela vous donnera la possibilité de créer un fichier node- [content-type] .tpl.php dans votre carte de thème. Créez le node- [type contenu] fichier .tpl.php dans votre carte thématique (nœud-event.tpl.php)

  • Dans le fichier tpl.php vous pouvez imprimer toutes les données en utilisant (php): print_r($node); cette vous donnera tous les champs. Parmi ces champs, il y aura le champ node_reference. Le champ node_reference vous donne les identifiants des nœuds, utilisez donc node_load pour charger le nœud complet dans une variable. par exemple: $picturenode = node_load($node->field_ref_subscriber[0]['nid']). pour une image multiple, utilisez une boucle foreach autour d'elle. Après le node_load, vous aurez tous les champs de la node_reference dans la variable (vous pouvez utiliser print_r à nouveau pour voir à quoi ressemble le tableau). Vous pouvez utiliser cette variable pour imprimer l'image. par exemple: print($picturenode->field_image[0]['view']);

Dans votre cas, la node_load vous donnera des valeurs au lieu de vues. Utilisez donc la fonction imagecache pour thématiser les images (sans savoir quoi faire avec les vidéos). Pour le rendre un peu plus facile, voici quelques exemples de code:

<?php 
// $Id: node.tpl.php,v 1.7 2007/08/07 08:39:36 goba Exp $ 
?> 
    <div class="node<?php if ($sticky) { print " sticky"; } ?><?php if (!$status) { print " node-unpublished"; } ?>"> 
    <?php if (!$page) { ?> 
     <h2 class="nodetitle"><a href="<?php print $node_url?>"><?php print $title?></a></h2> 
    <?php }; ?> 
    <div class="content"><?php print $node->content['body']['#value']; ?></div> 
    <div class="subscribers"><?php //this will load all subscribers to the event 
    foreach((array)$node->node_ref_subscribers as $subscriber){ 
     $subscriberdata = node_load($subscriber['nid']); //load the subscriber values in $subscriberdata 
     print($subscriberdata->field_subscriber_body[0]['value'];); //print subscriber field 
    } 
    ?></div> 
    <?php if ($links) { ?><div class="links">&raquo; <?php print $links?></div><?php }; ?> 
    </div> 
<?php 
//print_r($node); 
?> 

Cet exemple n'a pas été testé, et ne doit être considéré comme une version approximative de ce que vous pourriez faire. Utilisez print_r pour voir les données disponibles dans le noeud (et node_reference après node_load).