Mes nouvelles activités ne me laissent que peu de temps pour mettre à jour ce blog. En attendant une éventuelle reprise de mes divagations éditoriales, vous pouvez toujours parcourir les anciens articles. A+ et bonne lecture!
Inéation
100% Drupal : Actualité, Documentation, Formation, Module, Thème
Les relations
Les relations permettent d'ajouter de nouveaux contextes à un panel en se basant sur des informations déjà chargées par un contexte existant (via les arguments ou les paramètres statiques).
Un fois encore, Panels est très flexible et les relations proposées par la liste déroulante sont extensibles via un système de plugins intégré à Panel. Ainsi si vous ne trouvez pas la relation qui convient à votre application, vous pouvez toujours en développer une en prenant comme exemple les relations standards. Vous les trouverez dans le répertoire "relationships" du module Panels.
Justement ! Dans le cadre de mon exemple, j'ai besoin d'un relation de type "user from node". A l'heure où j'écris cet article elle n'est pas disponible. Par contre on trouve un patch dans le site drupal.org qui permet d'ajouter cette relation fort utile (Merci Michelle).
Pour information voila à quoi ressemble ce fichier :
<?php
// $Id: user_from_node
/**
* @file relationships/user_from_node.inc
*
* Plugin to provide an relationship handler for user from node
*/
/**
* Plugin to provide an relationship handler for node from user
*/
function panels_user_from_node_panels_relationships() {
$args['user_from_node'] = array(
'title' => t("User from node"),
'keyword' => 'user',
'description' => t('Adds a user from node author context'),
'required context' => new panels_required_context(t('Node'), 'node'),
'context' => 'panels_user_from_node_context',
);
return $args;
}
/**
* Return a new context based on an existing context
*/
function panels_user_from_node_context($context = NULL, $conf) {
// If unset it wants a generic, unfilled context, which is just NULL
if (empty($context->data)) {
return panels_context_create_empty('user', NULL);
}
if (isset($context->data->uid)) {
// Load the user that is the author of the node
$uid = $context->data->uid;
$account = user_load(array('uid' => $uid));
// Send it to panels
return panels_context_create('user', $account);
} else {
return panels_context_create_empty('user', NULL);
}
}
?>
La partie intéressante est à la fin : le plugin récupère le uid de l'auteur du noeud, puis l'utilise comme argument pour charger l'objet user avec user_load() pour finalement le transformer en contexte avec panels_cntext_create().
Mon exemple maintenant : imaginons que je souhaite créer un panel qui remplace l'affichage standard des noeuds pour afficher le contenu du noeud à gauche et le profil de son auteur à droite. Je vais alors créer un argument de type noeud que Panels ira chercher dans l'url, puis je vais créer une relation de type "user from node". Cette relation va permettre à Panels de charger le contexte précis qui correspond aux informations qui décrivent l'auteur du noeud en question.
Voila c'est tout.



Commentaires récents