Pages avec contenu différent suivant le groupe
Auteur Sujet

Post 
Bonjour,

Je débute depuis peu avec Zikula.
Que je trouve d'ailleurs très bien fait ! icon_biggrin

Je souhaiterais pouvoir écrire des pages (ou nouvelles) ayant un contenu légèrement différent suivant le groupe des membres.
Mais je n'ai pas réussi à trouver comment faire. icon_confused

Est-ce possible ?
Ou est-ce que je dois réserver les pages pour un groupe et les nouvelles pour un autre via les permissions ?

d'avance merci
Données personnelles

Post 
Bonjour Benchi, bienvenue !

Que désires tu écrire : des pages statiques ? (module Pages) ou des news (module nouvelles) ?

Quelles sont les différences que tu désires mettre en place ? Du contenu ? de l'apparence ?


Gilles  ><>°
Données personnelles Accueil

Post 
A la base, je pensais utiliser des news.

Concernant les différences, ce serait au niveau du contenu.

Par exemple, les membre du groupe VIP auraient une information supplémentaire affichée dans la news.

Tu penses que c'est faisable ?
Données personnelles

Post 
Citation :
Par exemple, les membre du groupe VIP auraient une information supplémentaire affichée dans la news.

Toujours la même information, ou différente de news en news ?

Oui, ca doit être possible si dans ta news, tu dis qu'à partir de ======== ce n'est visible que pour les personnes loggées, ensuite, il y aura un peu de code à faire afin de cacher cette partie au commun des mortels :D

++


Gilles  ><>°
Données personnelles Accueil

Post 
L'information sera différente de news en news. icon_biggrin

Citation :
Oui, ca doit être possible si dans ta news, tu dis qu'à partir de ======== ce n'est visible que pour les personnes loggées, ensuite, il y aura un peu de code à faire afin de cacher cette partie au commun des mortels :D

As-tu une idée du fichier à modifier afin d'y insérer du code ?
Données personnelles

Post 
J'ai trouvé dans "/modules/news/" les fichiers impactant la pré-visualisation de news, ainsi que ceux gérant l'affichage dans les catégories.
Mais je pas encore celui qui s'occupe de l'affichage des new icon_biggrin
Données personnelles

Post 
Histoire de donner de indications sur mon avancée...

Le template qui sert à afficher la news est news_user_articlecontent.htm

Il me reste "plus cas" trouver le fichier contenant la fonction qui appelle le template icon_razz
Données personnelles

Post 
Je n'ai toujours pas trouvé icon_frown

Donc si vous avez une piste pour m'aider, je suis preneur icon_biggrin

icon_wink
Données personnelles

Post 
as tu réussis à limiter l'affichage au utilisateurs loggués comme te l'avais préconiser Gille ?
Données personnelles Accueil

Post 
A tout hasard, il n'existe pas une variable dans Zikula permettant de tester l'appartenance d'un utilisateur à un groupe ?
Pour qu'en gros dans le template il puisse faire quelque chose dans ce style :

  1. {if user.group.name == VIP}Voilà l'info top secrete !{/if} 


----------
Vous êtes fan de séries TV ? SeriesParadise.com recrute !
Données personnelles

Post 
en fait, dans le template de news (dans /themes/tontheme/templates/news ou /modules/news/pntemplates ) et le template news_user_articlecontent.htm dans la variable smarty $preformat.fulltext il faut que tu regarde comment faire un script de type "modifer" (y'a des exemples dans system/pnRender/plugins ) pour que tu puisse modifier ton

  1. <!--[$preformat.fulltext]--> en <!--[$preformat.fulltext|monscript]--> 


et dans ce modifer.monscript, tu fera une recherche de la séquence "====" et tu n'affichera la suite que si on a le droit de privilège qui va bien.


Voilà !

++


Gilles  ><>°
Données personnelles Accueil

Post 
Je vous remercie beaucoup pour vos pistes ! icon_smile icon_smile

J'ai donc créé un script de type "modifier".
Par contre, j'utilise la variable smarty $preformat.maintext

J'ai donc modifier le fichier /modules/news/pntemplates/news_user_articlecontent.htm
  1. <!--[$preformat.maintext]--> remplacé par <!--[$preformat.maintext|controlvip]--> 


Et j'ai créé un fichier system/pnRender/plugins/modifier.controlvip.php

  1. function smarty_modifier_controlvip ($string) 
  2.     $pos = stripos($string, "====="); 
  3.  
  4.     if ($pos !== false) { 
  5.             $string = substr($string, 0, $pos); 
  6.     } 
  7.  
  8.     return $string; 


Tout ceci cache la partie à partir de "=====". icon_smile

Reste à trouver comment récupérer le groupe du membre... icon_biggrin
Données personnelles

Post 
tiens... faudra que je pense à diffuser ce smarty sur le site officiel au passage .. ferait çà demain

pour gid tu mets l'id indiquer dans le module group, j'ai pas mis le nom du group pour éviter une requête sql
  1. /** 
  2.  * Smarty block to implement group checks in a template 
  3.  *  
  4.  * 
  5.  * Example 
  6.  * <!--[checkgroup gid="1" ]--> 
  7.  * do some stuff now we have permission 
  8.  * <!--[/checkgroup]--> 
  9.  * 
  10.  * ;@author   Andre Bergues  
  11.  * ;@param    array    $params     All attributes passed to this function from the template 
  12.  * ;@param    string   $content    The content between the block tags 
  13.  * ;@param    object   $smarty     Reference to the Smarty object 
  14.  * ;@return   mixed    the content if permission is held, null if no permissions is held (or on the opening tag), false on an error 
  15.  */ 
  16. function smarty_block_checkgroup($params, $content, &$smarty) 
  17.     // check if there is something between the tags 
  18.     if (is_null($content)) { 
  19.         return; 
  20.     } 
  21.   
  22.     // check our input 
  23.     if (!isset($params['gid'])) { 
  24.         $smarty->trigger_error('checkgroup: attribute component required'); 
  25.         return false; 
  26.     } 
  27.   
  28.     // look in the session to see if there is a UID 
  29.     $uid = SessionUtil::getVar('uid');  
  30.     if (empty($uid)) { 
  31.         return; // if not return ... no sql request to db are done 
  32.     } 
  33.     
  34.  
  35.    // group check ... 
  36.     if (!pnModAPIFunc('Groups', 'user', 'isgroupmember', array('uid' => $uid, 'gid' => $params['gid']))){ 
  37.         return; 
  38.     } 
  39.  
  40.     return $content; 






modifié par : mumuri, 15 Jn 2008 - 12:07
Données personnelles Accueil

Post 
je pense que tu n'as qu'a rajouter cette partie dans ton script :
  1. if (!pnModAPIFunc('Groups', 'user', 'isgroupmember', array('uid' => $uid, 'gid' => $params['gid']))){  
  2.        return;  
  3.     }  


Content que tu arrives à tes fins !


Gilles  ><>°
Données personnelles Accueil

Post 
J'ai mis ce bout de code pour récupérer l'id de la personne qui consulte la page
  1. $uid = SessionUtil::getVar('uid'); 


Et le bout de code avec pnModAPIFunc.
Par contre, où puis-je trouver des explications sur le fonctionnement de cette fonction ?

J'ai remplacé $params['gid'] par l'id du groupe VIP.
Mais cela ne semble pas fonctionner correctement.... icon_confused

En tout cas, je vous remercie beaucoup pour votre aider icon_smile
Données personnelles

Post 
http://api.zikula.org/Core/PostNuke_Core/pnAPI/_pnMod.php.html

t'a du faire une c*****rie , j'utilise cette méthode et çà marche trés bien

est ce que tu as checké que ton uid était valide ?

if (!empty($uid)) { ...

penser aussi à bosser sans le cache de pnrender et du module themes en forcant la compilation

modifié par : mumuri, 15 Jn 2008 - 21:21
Données personnelles Accueil

Post 
Je viens de comprendre mon erreur icon_biggrin
Je mettais '3' au lieu de 'gid=3' icon_lol

Voici donc le code de ma fonction
  1. function smarty_modifier_controlvip ($string) 
  2.     $pos1 = stripos($string, "====="); 
  3.  
  4.     if ($pos1 !== false) { 
  5.             $string2 = substr($string, 0, $pos1); 
  6.     } 
  7.  
  8.     $uid = SessionUtil::getVar('uid');  
  9.     if (!empty($uid))    { 
  10.         if (!pnModAPIFunc('Groups', 'user', 'isgroupmember', array('uid' => $uid, 'gid' => 'gid=3'))) 
  11.         { 
  12.             $string2 .= substr($string, ($pos1+6), (strlen($string)-$pos1)); 
  13.         } 
  14.     } 
  15.     return $string2; 


Cela fonctionnement maintenant exactement comme je voulais. icon_razz

Mon seul soucis....
lorsque je rafraichis ma page, j'obtient le message d'erreur suivant :
Citation :
Erreur : Un problème est survenu lors du traitement de votre demande. Merci de vérifier les données d'entrées.
Données personnelles

Post 
merci mumuri pour le lien
Données personnelles

Post 
Citation :
t'a du faire une c*****rie

Je pense aussi icon_lol

Et étant donné que j'ai eu un dur week-end, je me pencherais sur le sujet demain
Après une bonne nuit de repos, je ferais moins de bêtise (enfin j'espère) icon_wink
Données personnelles

Post 
http://community.zikula.org/module-...id-8-pid-23.htm

-------------------------------------------
...n'oubliez pas que l'outil Recherche est votre ami !
...bien souvent il répond à nos questions avant même que l'on ne se les pose ! ^^
Données personnelles Accueil
Post 
ça y est enfin !!!! icon_smile icon_smile

Je verrais à faire un code peut-être plus propre plus tard....
Mais voici ce qui fonctionne !
  1. function smarty_modifier_controlvip ($string) 
  2.     $pos1 = stripos($string, "==debut=="); 
  3.     $pos2 = stripos($string, "==fin=="); 
  4.  
  5.     if ($pos1 !== false) { 
  6.         $debstring = substr($string, 0, $pos1); 
  7.         $finstring = substr($string, $pos2+7, strlen($string)); 
  8.  
  9.         $uid = SessionUtil::getVar('uid');  
  10.         if (!empty($uid))    { 
  11.             if (pnModAPIFunc('Groups', 'user', 'isgroupmember', array('uid' => $uid, 'gid' => '3'))) 
  12.             { 
  13.                 $debstring .= substr($string, $pos1+9, ($pos2-($pos1+9))); 
  14.             } 
  15.             else 
  16.             { 
  17.             } 
  18.         } 
  19.         $string = $debstring ."". $finstring; 
  20.     } 
  21.  
  22.      
  23.     return $string; 


Je commence mon paragraphe VIP par ==debut== et je le termine par ==fin== icon_cool

Mon erreur principale venait de la négation devant pnModAPIFunc

Un grand merci à vous tous !!! icon_smile
Données personnelles