Forum CMS Made Simple FR

Version complète : [resolu] Réaliser un répertoire FEU et CGUserDirectrory
Vous consultez actuellement la version basse qualité d’un document. Voir la version complète avec le bon formatage.
Citation :#~~~~~ DEBUT BLOC A NE PAS SUPPRIMER ~~~~~
#~ Version du CMS: #1.11.2
#~ Url du site :
#~ Hébergeur / Soft : OVH Perso
#~ Informations Système :
#~~~~~ FIN BLOC A NE PAS SUPPRIMER ~~~~~


Bonjour,

J'ai pour objectif de réaliser un répertoire des utilisateurs, qui sont des professionnels de santé et qui souhaiteraient pouvoir se retrouver sur le site par secteur d'intervention.
Facile ! Smile Il suffit de créer une propriété (menu déroulant) dans FEU nommée "secteur" par exemple et avec CGUserdirectory de trier les membres selon cette propriété. C'est ce que j'ai fait. Mais j'ai un soucis qui me gêne. Un simple détail pour certains. Sûrement. Mais pas pour moi.

Je souhaite qu'il y ait marqué pour un utilisateur travaillant dans le secteur "Recherche" :
Julien BERNARD (Recherche)

C'est à dire en terme CMSMS :
Code :
{$oneuser.username} ({$oneuser.properties.secteur})

Pour commencer, j''ai donc créé une propriété, au format menu déroulant nommée "secteur", la voici :
Code :
 
Addictions et post-cure
Education spécialisée (enfants)
Troubles envahissants du développement
Education spécialisée (adultes)
Personnes âgées et vieillissement
Prestations et services socioculturels
Prévention et promotion de la santé
Psychiatrie
Réadaptation fonctionnelle
Rééducation cardiovasculaire
Réhabilitation cardiorespiratoire
Réinsertion sociale
Réinsertion professionnelle
Recherche
Autre secteur
Notez la première ligne "&nbsp" qui affiche un ligne vide dans le menu déroulant. Je l'utilise pour que mon utilisateur qui modifie son profil, mais qui ne souhaite pas attribuer de secteur, ne se retrouve pas avec un secteur non désiré par défaut. Je souhaite qu'il ai la possibilité de laisser vide ce champ. Donc "&nbsp" plutôt que "non défini" (par exemple).

J'utilise en suite dans ma page le gabarit de résumé "répertoire" de CGUserDirectrory
Code :
<form> <input onclick="history.back()" type="button" value="Retour" /> </form>
<!-- CGUsers - summary template - repertoire -->
<div id="userdirectory_summary">
<div>
{if isset($firstpage_url)}
  <a href="{$firstpage_url}" title="{$mod->Lang('lbl_first_page')}"><<</a>
{/if}
{if isset($prevpage_url)}
  <a href="{$prevpage_url}" title="{$mod->Lang('libl_prev_page')}"><</a>
{/if}
{$mod->Lang('page')} {$curpage} sur {$numpages}
{if isset($nextpage_url)}
  <a href="{$nextpage_url}" title="{$mod->Lang('lbl_next_page')}">></a>
{/if}
{if isset($lastpage_url)}
  <a href="{$lastpage_url}" title="{$mod->Lang('lbl_last_page')}">>></a>
{/if}
</div>
<ul>
{foreach from=$users item='oneuser'}
<li><a href="{$oneuser.detail_url}" title="{$oneuser.username}">{$oneuser.username}</a> {if !isset($oneuser.properties.secteur) || $oneuser.properties.secteur == " "}{else} ({$oneuser.properties.secteur}){/if}
</li>
{/foreach}
</ul>
</div>

<div>
{if isset($firstpage_url)}
  <a href="{$firstpage_url}" title="{$mod->Lang('lbl_first_page')}"><<</a>
{/if}
{if isset($prevpage_url)}
  <a href="{$prevpage_url}" title="{$mod->Lang('libl_prev_page')}"><</a>
{/if}
{$mod->Lang('page')} {$curpage} sur {$numpages}
{if isset($nextpage_url)}
  <a href="{$nextpage_url}" title="{$mod->Lang('lbl_next_page')}">></a>
{/if}
{if isset($lastpage_url)}
  <a href="{$lastpage_url}" title="{$mod->Lang('lbl_last_page')}">>></a>
{/if}
</div>

<form> <input onclick="history.back()" type="button" value="Retour" /> </form>

Mon soucis vient du fait que :
1/ un utilisateur qui n'a jamais modifié son profil apparaîtra dans la liste retournée comme ça :
Julien BERNARD <!-- ok résultat attendu -->
2/ un utilisateur qui a modifié son profil, mais jamais choisi de secteur, ou qui a choisi le secteur ligne vide (càd &nbsp) :
Julien BERNARD ( ) <!-- résultat non désiré -->
3/ un utilisateur qui a rempli son secteur sur Recherche :
Julien BERNARD (Recherche) <!-- ok c'est bon -->

Comment puis-je faire pour que je ne me retrouve plus avec des utilisateurs qui ont des paranthèses vides à côté de leur nom comme dans le cas n°2 ? J'ai essayé les ocnditions suivantes, mais sans succès :

{if $oneuser.properties.secteur == " "}.......{/if}
{if $oneuser.properties.secteur}.......{/if}
{if $oneuser.properties.secteur == "&nbsp;"}.......{/if}
{if !isset($oneuser.properties.secteur)....}......{/if}

Je ne comprends pas ce qui cloche dans mon gabarit, des idées ? Peut-être dois-je revoir la manière d'aborder la chose ? Si quelqu'un a une idée je suis preneur car là je me grille les quelques neurones qui fonctionnent encore à essayer de trouver une solution. Merci d'avance Smile
salut,
à tout hasard:
{if $oneuser.properties.secteur|ord == "%A0"} <=code hexa de &nbsp
jissey a écrit :{if $oneuser.properties.secteur|ord == "%A0"} <=code hexa de &nbsp

Merci, mais cela ne change rien non plus.

Des idées ?
{if empty ....}
jissey a écrit :{if empty ....}

Je n'ai pas trouvé comment utiliser {if empty}. Pour celà, j'ai utilisé {if $variable} ce qui je pense revient au même non ?

Sinon, voici quelques éléments supplémentaires :

Je me suis rendu compte en allant dans la base de données, que pour un membre qui a déjà mis à jour son profil (modifié ses paramètres), la valeur par défaut dans la liste déroulant s'enregistre. Dans mon cas, il s'agit d'une ligne vide (ou "&nbsp"). On retrouve donc dans la table 'cmsms_module_feusers_properties', pour le 'userid' de ce membre, une ligne ayant pour 'title' : 'secteur' et pour 'data' un champ vide (' ').

Donc la valeur existe, mais est vide. Dans ce cas, avec le code évoqué plus haut, on aura comme rendu : Nom Prénom ( )

Ce qui me pose problème, c'est que les paranthèses doivent encadrer le 'secteur' du membre, si celui-ci est rempli (càd non égal à rien), et non si celui-ci existe...
et si tu contourne le problème?
Au lieu de ne rien mettre, tu pourrais mettre *** Choisir ***? C'est plu facile à tester...
C'est bien ce que j'ai fait au moment où tu devais écrire ces lignes. Preuve que la télépathie à l'air de fonctionner.


J'ai donc créé la première ligne de la liste déroulante avec l'option : -non renseigné-

Puis, j'ai revu la logique pour aboutir à cela :
Code :
[== Indéfini ==]
{foreach from=$users item='oneuser'}
<li><a href="{$oneuser.detail_url}" title="{$oneuser.username}">{$oneuser.username}</a> {if $oneuser.properties.secteur && $oneuser.properties.secteur ne "-non renseigné-"}{$oneuser.properties.secteur}{else}{/if}
</li>
{/foreach}

Et là, ça fonctionne. Reste plus qu'à voir avec une variable vide si ça marche. Retour à la liste déroulant avec l'option de première ligne vide... Modification du gabarit pour tester :

Code :
[== Indéfini ==]
{foreach from=$users item='oneuser'}
<li><a href="{$oneuser.detail_url}" title="{$oneuser.username}">{$oneuser.username}</a> {if $oneuser.properties.secteur && $oneuser.properties.secteur ne " "}{$oneuser.properties.secteur}{else}{/if}
</li>
{/foreach}

Les résultats montrent que ça marche. Notez bien qu'il n'y à pas de paranthèses dans l'affichage. Mon problème se trouve sur l'affichage de la variable entre paranthèses, si elle n'est pas vide ou inexistante.

Je viens de me rendre compte que le problème se situe à ce niveau, et non sur la condition {if}...
Le problème d'affichage vient de l'espace, qui est ma première option sur la liste déroulante, côté utilisateur. Si je supprime l'espace dans la base de données, les paranthèses ne s'affichent pas, ce qui veut dire que ma condition est bonne.
et tu ne peux pas définir une valeur par défaut? -non renseigné-
Arf ! Dans l'idéal non. Mais je crois que je vais bien devoir passez par là.

Sinon, en fouillant dans la base de données (table cmsms_module_feusers_dropdowns), je me rends compte que je peux changer la valeur de ma liste déroulant directement, pour vider les valeurs, et laisser "order_id" et "control_name" tels quels. Du coup, j'ai mon option vide, qui enregistre un chaîne de caractères vides. Et qui fonctionne avec ma condition.

Peut être que cela pourra faire l'objet d'un "feature request" pour FEU module plus tard pour pouvoir enregistrer une chaîne de caractère vide en première option d'une dropdown list.

Avec la solution de modifier directement la base de données, on va dire que c'est résolu Wink

Merci pour ton aide Jissey
de rien, on a cogité ensemble!