Submitted by davidm on
Avant de soumettre ce bout de code comme "astuce" dans le wiki, je voudrai m'assurer - même si le code fonctionne - que celui-ci est correct.
Ce code n'est bien sûr pas nécessaire pour gérer la visibilité des blocs créés par le module Organic Groups (qui contrôle bien si un utilisateur est membre avant d'afficher) ou via Views (on passe un argument dans la vue qui contrôle au passage si l'utilisateur est membre).
Pour certains cas on doit utiliser dans les paramètres de visibilité des blocs l'option "Afficher si le code PHP suivant retourne TRUE (mode PHP, experts seulement)."
Dans mon cas pour l'insertion d'un bloc créé par NodeBlock qui insère un noeud de type Directory Listing (cf le module filebrowser) dans un bloc que je souhaite afficher sur la page d'accueil du groupe.
J'ai donc regardé un peu du côté du module Organic Groups comment on teste l'appartenance d'un utilisateur à un groupe :
return og_is_group_member($gid, $include_admins = TRUE, $uid = NULL)
Le code fonctionne, on peut changer les options bien sûr comme indiqué ici : http://api.freestylesystems.co.uk/api/function/og_is_group_member
Maintenant, je veux afficher ce bloc seulement sur la page d'accueil de mon groupe. Mon premier réflex a été de me dire, il faut que je récupère l'ID du noeud courant et que je vérifie qu'il est égal à l'ID de mon noeud de groupe et hop le tour est joué. En fait, ça n'a pas l'air si simple et de ce que j'ai lu ici et là, mieux vaut passer par les arguments.
J'abouti donc au code suivant pour la visibilité de mon bloc :
<?php
if (arg(1) == '59' && arg(2) == NULL) {
return og_is_group_member($gid, $include_admins = TRUE, $uid = NULL);
}
?>
L'ID de mon noeud de groupe dans l'exemple est 59. Pourquoi je passe aussi arg(2) == NULL ? Réponse pour éviter que le bloc soit visible sur toutes les pages de groupe.
C'est un peu du bricolage et je ne suis pas totalement satisfait, ça marche dans mon contexte à moi mais comment rendre ce code plus "générique" / propre ?
Note : Je ne suis pas codeur, je n'ai que des rudiments de PHP alors ne soyez pas trop dur :P
Bon la méthode ci-dessus
Permalien Soumis par davidm le 1 Juillet, 2009 - 18:23
Bon la méthode ci-dessus marchait mais maintenant elle ne marche plus et je n'arrive pas à comprendre pourquoi... j'ai mis à jour OG en 2.0 RC3 mais je ne crois pas que og_is_group_member ai changé...
Je suis en train d'essayer une autre méthode :
<?php
$match = FALSE;
$url = request_uri();
$member = return og_is_group_member($gid, $include_admins = TRUE, $uid = NULL);
if (strpos($url, "extranet/developpement-lecture") && $member==TRUE) {
$match = TRUE;
}
return $match;
?>
mais sans succès pour l'instant... idée ?
Personne pour m'aider ? Ou
Permalien Soumis par davidm le 2 Juillet, 2009 - 23:52
Personne pour m'aider ? Ou alors faut poster dans "Développement" ?
As tu essayé de dumper ce
Permalien Soumis par bricef le 17 Septembre, 2009 - 11:46
As tu essayé de dumper ce que te donne la variable $member?
Non je n'ai pas essayé, et
Permalien Soumis par davidm le 17 Septembre, 2009 - 12:02
Non je n'ai pas essayé, et finalement je suis revenu au menu par défaut d'Organic Groups plutôt que re-construire un menu custom à la mano... merci quand même !
Un petit [résolu] ? ! :p
Permalien Soumis par floown@drupal.org le 17 Septembre, 2009 - 15:56
Un petit [résolu] ? ! :p
Yep ça fait désordre pour
Permalien Soumis par davidm le 17 Septembre, 2009 - 16:14
Yep ça fait désordre pour un modo :P
Par contre mon problème est résolu mais la question elle, non...
Bonjour David, Si tu as
Permalien Soumis par matthieu01 le 28 Juin, 2010 - 09:50
Bonjour David,
Si tu as résolu la question, je veux bien que tu m'en parles car j'essaie d'afficher le menu d'organic groups dans un type de contenu (contemplate) et non sous forme de bloc...
Merci