Submitted by Matmat on
Bonjour,
Je cherche à restreindre la vue d'un bloc, non en fonction du rôle d'un utilisateur, mais en fonction du 'type de structure' auquel il appartient.
Je m'explique...
Sur mon site, les utilisateurs, quelque soit leur rôle, appartiennent à un 'type de Structure' particulier (institutionnel,entreprise,...). Ils renseignent cette information par un champ CCK sur leur page de profil customisée par Content Profile.
Je voudrais maintenant afficher (ou non) certains blocs (créés avec views) en fonction de la valeur qu'ils ont renseignée dans ce champ.
Une petite idée ? Un conseil ?
Merci d'avance,
Mat
Par les templates, tu peux
Permalien Soumis par Econq le 10 Février, 2010 - 11:36
Par les templates, tu peux coder assez simplement l'affichage de ta vue en fonction de la valeur du champ cck .
Il y a probablement une solution plus élégante en utilisant les contextes mais là, je ne saurais t'aider.
D'après ce que j'ai compris
Permalien Soumis par Matmat le 10 Février, 2010 - 12:59
D'après ce que j'ai compris de 'Context', il permet de gérer l'affichage des blocs en fonction de la page où l'on est et non en fonction de "qui l'on est" (au sens large dans mon cas).
Je voudrais que cet affichage soit conditionné par la valeur qu'a soumis l'utilisateur dans le champ CCK 'type de Structure'.
Et pour les templates de views, as-tu un lien qui serait intéressant dans mon cas? Je suis en train de me taper le 'Theming guide' de Views 2 et je n'ai pas l'impression qu'il réponde à ma question.
Peut-être dois-je gérer cela par une fonction qui override une fonction d'affichage du module 'Block' dans mon fichier template.php ?
Merci
Tu peux conditionner
Permalien Soumis par emerya le 10 Février, 2010 - 14:06
Tu peux conditionner l'affichage d'un bloc en PHP dans la config du bloc.
L'idéal serait donc de conditionner ici l'affichage du bloc. Reste à savoir s'il y a une fonction spécifique à Content Profile qui te permettrait d'obtenir la valeur facilement, sans appeler tous les paramètres de l'utilisateur avec user_load().
Au pire, il est toujour possible de faire un appel "manuel" avec db_result() et db_query().
Salut, Pour ceux que ça
Permalien Soumis par Matmat le 11 Février, 2010 - 14:38
Salut,
Pour ceux que ça intéresse je poste ma solution, même si je trouve que c'est un peu du bricolage car :
L'exemple que je montre permet de conditionner l'affichage d'un bloc en fonction :
<?php
// Si l'utilisateur a le rôle 'webmaster', return true
// SINON
// Bloc Promotion : return TRUE pour 74 (Institutionnels)
global $user;
// Récupérer l'ID utilisateur courant
$user_uid = $user->uid;
// Si l'utilisateur est non authentifié
if($user_uid == '0'){return false;}
foreach($user->roles as $role){
if($role == 'webmaster'){return true;}
}
// Récupérer l'ID de la node correspondant au profil de l'utilisateur
$query = "SELECT n.nid FROM {node} n INNER JOIN {users} users ON n.uid = users.uid WHERE n.type in ('profil') AND users.uid={$user_uid}";
$result = db_query($query);
$nid = db_result($result);
// Récupérer l'ID du terme de taxonomie qui réfère au type de structure
$query2 = "SELECT c.field_type_structure_value FROM {content_field_type_structure} c WHERE c.nid ={$nid} AND c.delta=0";
$result2 = db_query($query2);
$type_structure_value = db_result($result2);
if($type_structure_value == '74'){return true;}else{return false;}
?>
Voilou.
Le problème c'est que je dois faire ça pour chaque bloc qui conditionne l'affichage à la valeur de ce champ CCK. Et l'aspect dynamique n'est plus conservé si je modifie le vocabulaire (ajout/retrait de termes).
APPEL AUX DEVELOPPEURS :
2 questions donc :
Mat
Je pense qu'il faut alors te
Permalien Soumis par Econq le 11 Février, 2010 - 14:48
Je pense qu'il faut alors te poser la question de savoir s'il est opportun de recourir à taxonomy pour le classement qui te concerne.
Compte tenu du fait que tes utilisateurs sont des utilisateurs enregistrés, il me semble préférable d'aller dans le sens de l'architecture de Drupal et d'utiliser les groupes pour "classer" tes utilisateurs plutôt que les taxonomies.
En effet, la difficulté à laquelle tu te heurtes actuellement va inévitablement se reproduire pour toute fonctionnalité spécifique à un type d'utilisateur que tu souhaitera implémenter(car ce sont finalement des types d'utilisateurs différents qui auront accès à des fonctionnalités différentes).
En fait, j'ai déjà des rôles
Permalien Soumis par Matmat le 11 Février, 2010 - 14:58
En fait, j'ai déjà des rôles définis pour ce site : authentifié, expert et webmaster. Ils ont des droits différents pour l'écriture des types de contenus et le workflow de publication.
Mais chaque utilisateur fait aussi partie d'une Structure qui, elle, appartient à un groupe Institutionnel (avec ses sous-groupes) ou Entreprise (et ses sous-groupes).
Et je voudrais afficher les blocs en fonction de la nature de la Structure à laquelle l'utilisateur appartient.
Qu'appelles-tu les "groupes" ? Tu parles de "Organic Group" ?
Merci
Mat
Non, je voulais bien dire
Permalien Soumis par Econq le 11 Février, 2010 - 15:55
Non, je voulais bien dire "profils" (on non pas groupes).