Messages : 152
Sujets : 6
Inscription : May 2009
Réputation :
0
01/02/2012, 16:08:23
(Modification du message : 23/02/2012, 02:00:16 par toniodesbois.)
Citation :#~~~~~ DEBUT BLOC A NE PAS SUPPRIMER ~~~~~
#~ Version du CMS: #1.10.3
#~ Url du site :
#~ Hébergeur / Soft :
#~ Informations Système :
#~~~~~ FIN BLOC A NE PAS SUPPRIMER ~~~~~
Bonjour,
A la demande d'un client, je cherche un système de notification de nouveau message.
J'utilise CGBlog avec 2 catégories : une publique qui s'affiche en page d'accueil et une autre réservé aux adhérents. Cette dernière s'affiche lorsqu'on clique sur "Infos adhérents" dans le menu.
Le soucis est que l'on ne voit pas du premier coup d'oeil si il y a des nouveaux messages dans "Infos adhérents".
J'ai abandonné l'idée de notifier le nombre de nouveaux messages car je ne sais pas où récupérer la date de dernière connexion par FEUser... Si quelqu'un à une idée ?
J'ai donc penser à afficher la date du dernier post en notification à côté de "Infos adhérents".
Par ex : "Infos adhérents - 12/01" pour un dernier message le 12 janvier.
Balise utilisateur {last_blog} :
Code : global $gCms;
$db = $gCms->GetDb();
$query = "
SELECT cgblog_date
FROM cms_module_cgblog AS b
INNER JOIN cms_module_cgblog_blog_categories AS bc
ON b.cgblog_id=bc.blog_id
WHERE bc.category_id=2
ORDER By b.cgblog_id DESC LIMIT 0,1";
$dbresult = &$db->Execute($query);
while ($dbresult && !$dbresult->EOF)
{
$cgdate = $dbresult->fields['cgblog_date'];
$jour = substr("$cgdate", -11, 2);
$mois = substr("$cgdate", -14, 2);
echo "{$jour}/{$mois}";
$dbresult->MoveNext();
}
if ($dbresult)
$dbresult->Close();
Pour tester, j'ai créé une div :
Code : <div id="notif">
<a href="index.php" class="notification" data-notification="{last_blog}">test</a>
</div>
Tout cela fonctionne bien.
J'aimerais juste que ça apparaisse dans mon menu à côté de "Infos adhérents" mais je ne sais pas où placer mon code.
Merci pour vos réponses,
Antoine
CMSMS 1.6
90plan OVH
Messages : 5,034
Sujets : 63
Inscription : Oct 2009
Réputation :
0
bonjour,
à vue de nez, je dirai de placer ton udt dans le gabarit du menu en testant l'alias de la page traitée.
Pour optimiser ton udt, vu que tu fais un LIMIT 0,1, la boucle while est inutile et $db->execute peut être avantageusement remplacé par $db->getOne...
Dernier point, la table feusers_history devrait te donner la date de dernière connexion du user FEU.
Messages : 152
Sujets : 6
Inscription : May 2009
Réputation :
0
01/02/2012, 19:02:34
(Modification du message : 01/02/2012, 19:28:52 par toniodesbois.)
Merci pour la rapidité. J'ai bien modifié l'udt.
J'arrive à tester l'alias sur la page active mais pas sur le lien du menu non-actif (dernier else). En gros, la date du dernier article s'affiche bien à côté de Infos adhérents mais uniquement quand je clique dessus...
Code : {if $node->parent == true or $node->current == true}
{assign var='classes' value='menuactive'}
{if $node->parent == true}
{assign var='classes' value='menuactive menuparent'}
{/if}
{if $node->children_exist == true and $node->depth < $number_of_levels}
{assign var='classes' value=$classes|cat:' parent'}
{/if}
<li class="{$classes}">
<a href="{$node->url}"
{if $page_alias == 'infos_adherents'}
class="{$classes} notification" data-notification="{last_blog}">
{else}
class="{$classes}">
{/if}
<span>{$node->menutext}</span></a>
{elseif $node->children_exist == true and $node->depth < $number_of_levels and $node->type != 'sectionheader' and $node->type != 'separator'}
<li class="parent"><a href="{$node->url}" class="parent"><span>{$node->menutext}</span></a>
{elseif $node->current == true}
<li class="currentpage"><h3><span>{$node->menutext}</span></h3>
{elseif $node->type == 'sectionheader'}
<li class="sectionheader"><span>{$node->menutext}</span>
{elseif $node->type == 'separator'}
<li class="separator" style="list-style-type: none;"> <hr />
{else}
<li><a href="{$node->url}"><span>{$node->menutext}</span></a>
{/if}
CMSMS 1.6
90plan OVH
Messages : 5,034
Sujets : 63
Inscription : Oct 2009
Réputation :
0
re,
j'ai pas regardé dans le détail, mais il faut refaire le test du page_alias dans tout les cas de figures, sauf sectionheader et separator.
Autrement dit, à chaque fois que le lien va être généré, il faut refaire le test Code : [== PHP ==]
{if $node->parent == true or $node->current == true}
{assign var='classes' value='menuactive'}
{if $node->parent == true}
{assign var='classes' value='menuactive menuparent'}
{/if}
{if $node->children_exist == true and $node->depth < $number_of_levels}
{assign var='classes' value=$classes|cat:' parent'}
{/if}
<li class="{$classes}">
<a href="{$node->url}"
{if $page_alias == 'infos_adherents'}
class="{$classes} notification" data-notification="{last_blog}">
{else}
class="{$classes}">
{/if}
<span>{$node->menutext}</span></a>
{elseif $node->children_exist == true and $node->depth < $number_of_levels and $node->type != 'sectionheader' and $node->type != 'separator'}
{if $page_alias == 'infos_adherents'}
<li class="parent"><a href="{$node->url}" class="parent {$classes}" data-notification="{last_blog}"><span>{$node->menutext}</span></a>
{else}
<li class="parent"><a href="{$node->url}" class="parent"><span>{$node->menutext}</span></a>
{/if}
{elseif $node->current == true}
<li class="currentpage"><h3><span>{$node->menutext}</span></h3>
{elseif $node->type == 'sectionheader'}
<li class="sectionheader"><span>{$node->menutext}</span>
{elseif $node->type == 'separator'}
<li class="separator" style="list-style-type: none;"> <hr />
{else}
{if $page_alias == 'infos_adherents'}
<li><a href="{$node->url}" class="{$classes} notification" data-notification="{last_blog}"><span>{$node->menutext}</span></a>
{else}
<li><a href="{$node->url}"><span>{$node->menutext}</span></a>
{/if}
{/if}
Messages : 152
Sujets : 6
Inscription : May 2009
Réputation :
0
02/02/2012, 10:45:44
(Modification du message : 02/02/2012, 10:49:34 par toniodesbois.)
En fait $page_alias == 'infos_adherents' teste si la page active est Infos adhérents.
Quand j'applique tes tests, lorsque je clique sur Infos adhérents, tous les liens du menu prennent la classe 'notification' car la page active est bien 'infos_adhérents'.
Si je clique sur un autre lien, aucun ne prend la classe.
J'ai essayé {if $node->menutext == 'Infos adhérents'} mais ça ne fonctionne pas...
CMSMS 1.6
90plan OVH
Messages : 5,034
Sujets : 63
Inscription : Oct 2009
Réputation :
0
RE,
fourni moi le gabarit complet, je chercherai mieux.
Messages : 8,242
Sujets : 58
Inscription : Dec 2007
Réputation :
0
03/02/2012, 00:22:32
(Modification du message : 03/02/2012, 00:29:44 par Jean le Chauve.)
Citation :J'ai essayé {if $node->menutext == 'Infos adhérents'} mais ça ne fonctionne pas...
ça fonctionne parfaitement si le "texte du menu" est Infos adhérents...
Le problème est qu'on ne sait pas si ta page info adhérents est parente, avec ou sans enfants ou si elle est enfant.
Voilà le gabarit left simple navigation + 1 col qui reprend tous les cas (sauf section header et separator) : Code : {* CSS classes used in this template:
.activeparent - The top level parent when a child is the active/current page
li.active0n h3 - n is the depth/level of the node. To style the active page for each level separately. The active page is not clickable.
.clearfix - Used for the unclickable h3 to use the entire width of the li, just like the anchors. See the Tools stylesheet in the default CMSMS installation.
li.sectionheader h3 - To style section header
li.separator - To style the ruler for the separator *}
{assign var='number_of_levels' value=10000}
{if isset($menuparams.number_of_levels)}
{assign var='number_of_levels' value=$menuparams.number_of_levels}
{/if}
{if $count > 0}
<ul>
{foreach from=$nodelist item=node}
{if $node->depth > $node->prevdepth}
{repeat string="<ul>" times=$node->depth-$node->prevdepth}
{elseif $node->depth < $node->prevdepth}
{repeat string="</li></ul>" times=$node->prevdepth-$node->depth}
</li>
{elseif $node->index > 0}</li>
{/if}
{if $node->parent == true or $node->current == true}
{assign var='classes' value='menuactive'}
{if $node->parent == true}
{assign var='classes' value='menuactive menuparent'}
{/if}
{if $node->children_exist == true and $node->depth < $number_of_levels}
{assign var='classes' value=$classes|cat:' parent'}
{/if}
{if $node->menutext == 'Infos adhérents'}
<li class="{$classes}"><a class="{$classes}" href="{$node->url}"><span>{$node->menutext}{last_blog}</span></a>
{else}
<li class="{$classes}"><a class="{$classes}" href="{$node->url}"><span>{$node->menutext}</span></a>
{/if}
{elseif $node->children_exist == true and $node->depth < $number_of_levels and $node->type != 'sectionheader' and $node->type != 'separator'}
{if $node->menutext == 'Infos adhérents'}
<li class="parent"><a class="parent" href="{$node->url}"><span>{$node->menutext}{last_blog}</span></a>
{else}
<li class="parent"><a class="parent" href="{$node->url}"><span>{$node->menutext}</span></a>
{/if}
{elseif $node->current == true}
{if $node->menutext == 'Infos adhérents'}
<li class="currentpage"><h3><span>{$node->menutext}{last_blog}</span></h3>
{else}
<li class="currentpage"><h3><span>{$node->menutext}</span></h3>
{/if}
{elseif $node->type == 'sectionheader'}
<li class="sectionheader"><span>{$node->menutext}</span>
{elseif $node->type == 'separator'}
<li class="separator" style="list-style-type: none;"> <hr />
{else}
{if $node->menutext == 'Infos adhérents'}
<li><a href="{$node->url}"><span>{$node->menutext}{last_blog}</span></a>
{else}
<li><a href="{$node->url}"><span>{$node->menutext}</span></a>
{/if}
{/if}
{/foreach}
{repeat string="</li></ul>" times=$node->depth-1}</li>
</ul>
{/if}
Messages : 152
Sujets : 6
Inscription : May 2009
Réputation :
0
Bonjour,
Merci pour vos réponses. Je n'avais pas reçu de suivi pour cette discussion, je ne pensais pas qu'elle s'était poursuivie... Voici les précisions que vous souhaitiez :
@jissey
Voici le gabarit entier :
Code : {* CSS classes used in this template:
.activeparent - The top level parent when a child is the active/current page
li.active0n h3 - n is the depth/level of the node. To style the active page for each level separately. The active page is not clickable.
.clearfix - Used for the unclickable h3 to use the entire width of the li, just like the anchors. See the Tools stylesheet in the default CMSMS installation.
li.sectionheader h3 - To style section header
li.separator - To style the ruler for the separator *}
{assign var='number_of_levels' value=10000}
{if isset($menuparams.number_of_levels)}
{assign var='number_of_levels' value=$menuparams.number_of_levels}
{/if}
{if $count > 0}
<ul>
{foreach from=$nodelist item=node}
{if $node->depth > $node->prevdepth}
{repeat string="<ul>" times=$node->depth-$node->prevdepth}
{elseif $node->depth < $node->prevdepth}
{repeat string="</li></ul>" times=$node->prevdepth-$node->depth}
</li>
{elseif $node->index > 0}</li>
{/if}
{if $node->parent == true or $node->current == true}
{assign var='classes' value='menuactive'}
{if $node->parent == true}
{assign var='classes' value='menuactive menuparent'}
{/if}
{if $node->children_exist == true and $node->depth < $number_of_levels}
{assign var='classes' value=$classes|cat:' parent'}
{/if}
<li class="{$classes}">
<a href="{$node->url}"
{if $page_alias == 'infos_adherents'}
class="{$classes} notification" data-notification="{last_blog}">
{else}
class="{$classes}">
{/if}
<span>{$node->menutext}</span></a>
{elseif $node->children_exist == true and $node->depth < $number_of_levels and $node->type != 'sectionheader' and $node->type != 'separator'}
{if $page_alias == 'infos_adherents'}
<li class="parent"><a href="{$node->url}" class="parent {$classes}" data-notification="{last_blog}"><span>{$node->menutext}</span></a>
{else}
<li class="parent"><a href="{$node->url}" class="parent"><span>{$node->menutext}</span></a>
{/if}
{elseif $node->current == true}
<li class="currentpage"><h3><span>{$node->menutext}</span></h3>
{elseif $node->type == 'sectionheader'}
<li class="sectionheader"><span>{$node->menutext}</span>
{elseif $node->type == 'separator'}
<li class="separator" style="list-style-type: none;"> <hr />
{else}
{if $node->menutext == 'Infos adhérents'}
<li><a href="{$node->url}" class="{$classes} notification" data-notification="{last_blog}"><span>{$node->menutext}</span></a>
{else}
<li><a href="{$node->url}"><span>{$node->menutext}</span></a>
{/if}
{/if}
{/foreach}
{repeat string="</li></ul>" times=$node->depth-1}</li>
</ul>
{/if}
@Jean le Chauve
Ma page Infos adhérents est parente et sans enfant.
CMSMS 1.6
90plan OVH
Messages : 8,242
Sujets : 58
Inscription : Dec 2007
Réputation :
0
toniodesbois a écrit :@Jean le Chauve
Ma page Infos adhérents est parente et sans enfant. Alors, tu peux utiliser le gabarit que je t'ai donné dans le post précédent.
Messages : 152
Sujets : 6
Inscription : May 2009
Réputation :
0
21/02/2012, 17:50:14
(Modification du message : 21/02/2012, 17:57:32 par toniodesbois.)
J'essaye avec le nouveau gabarit mais rien ne se passe.
J'ai un peu modifié celui-ci pour rajouter la propriété data-notification="{last_blog}" au lien et la classe css "notification".
Comme ceci par exemple pour la class="parent" :
si oui
class="parent notification" data-notification="{last_blog}"
sinon
class="parent"
J'ai essayé mais ça ne fonctionne pas non plus.
Code : {* CSS classes used in this template:
.activeparent - The top level parent when a child is the active/current page
li.active0n h3 - n is the depth/level of the node. To style the active page for each level separately. The active page is not clickable.
.clearfix - Used for the unclickable h3 to use the entire width of the li, just like the anchors. See the Tools stylesheet in the default CMSMS installation.
li.sectionheader h3 - To style section header
li.separator - To style the ruler for the separator *}
{assign var='number_of_levels' value=10000}
{if isset($menuparams.number_of_levels)}
{assign var='number_of_levels' value=$menuparams.number_of_levels}
{/if}
{if $count > 0}
<ul>
{foreach from=$nodelist item=node}
{if $node->depth > $node->prevdepth}
{repeat string="<ul>" times=$node->depth-$node->prevdepth}
{elseif $node->depth < $node->prevdepth}
{repeat string="</li></ul>" times=$node->prevdepth-$node->depth}
</li>
{elseif $node->index > 0}</li>
{/if}
{if $node->parent == true or $node->current == true}
{assign var='classes' value='menuactive'}
{if $node->parent == true}
{assign var='classes' value='menuactive menuparent'}
{/if}
{if $node->children_exist == true and $node->depth < $number_of_levels}
{assign var='classes' value=$classes|cat:' parent'}
{/if}
{if $node->menutext == 'Infos adhérents'}
<li class="{$classes}"><a class="{$classes} notification" data-notification="{last_blog}" href="{$node->url}"><span>{$node->menutext}</span></a>
{else}
<li class="{$classes}"><a class="{$classes}" href="{$node->url}"><span>{$node->menutext}</span></a>
{/if}
{elseif $node->children_exist == true and $node->depth < $number_of_levels and $node->type != 'sectionheader' and $node->type != 'separator'}
{if $node->menutext == 'Infos adhérents'}
<li class="parent"><a class="parent notification" data-notification="{last_blog}" href="{$node->url}"><span>{$node->menutext}</span></a>
{else}
<li class="parent"><a class="parent" href="{$node->url}"><span>{$node->menutext}</span></a>
{/if}
{elseif $node->current == true}
{if $node->menutext == 'Infos adhérents'}
<li class="currentpage notification" data-notification="{last_blog}"><h3><span>{$node->menutext}</span></h3>
{else}
<li class="currentpage"><h3><span>{$node->menutext}</span></h3>
{/if}
{elseif $node->type == 'sectionheader'}
<li class="sectionheader"><span>{$node->menutext}</span>
{elseif $node->type == 'separator'}
<li class="separator" style="list-style-type: none;"> <hr />
{else}
{if $node->menutext == 'Infos adhérents'}
<li><a href="{$node->url} class="notification" data-notification="{last_blog}"><span>{$node->menutext}</span></a>
{else}
<li><a href="{$node->url}"><span>{$node->menutext}</span></a>
{/if}
{/if}
{/foreach}
{repeat string="</li></ul>" times=$node->depth-1}</li>
</ul>
{/if}
CMSMS 1.6
90plan OVH
Messages : 8,242
Sujets : 58
Inscription : Dec 2007
Réputation :
0
Dur de t'aider sans les résultats sous les yeux.
Quel est le code source généré quand tu places mon gabarit ?
Essaye en remplaçant "{last_blog}" par "essai".
Messages : 152
Sujets : 6
Inscription : May 2009
Réputation :
0
21/02/2012, 23:39:01
(Modification du message : 23/02/2012, 02:01:16 par toniodesbois.)
J'ai mis ton gabarit et remplacé {last_blog} par essai.
CMSMS 1.6
90plan OVH
Messages : 152
Sujets : 6
Inscription : May 2009
Réputation :
0
En gros tout se passe comme si le test {if $node->menutext == 'Infos adhérents'} n'était jamais vrai.
CMSMS 1.6
90plan OVH
Messages : 8,242
Sujets : 58
Inscription : Dec 2007
Réputation :
0
Écris <pre>{$nodelist|print_r}</pre> dans ta page Infos adhérents, puis colle le résultat ici.
Cela nous donnera la valeur de tous les $node->menutext.
Messages : 152
Sujets : 6
Inscription : May 2009
Réputation :
0
Ça à l'air d'être ça pourtant :
Code : stdClass Object
(
[id] => 31
[pagetitle] => Infos adhérents
[url] => http://www.unssf.org/index.php?page=unssf_syndicat-des-sages-femmes_un-info-lettre
[accesskey] =>
[type] => content
[tabindex] =>
[titleattribute] =>
[modified] => 1329941636
[created] => 1305548080
[hierarchy] => 7
[depth] => 1
[prevdepth] => 1
[children_exist] =>
[haschildren] =>
[menutext] => Infos adhérents
[raw_menutext] => Infos adhérents
[target] =>
[index] => 5
[alias] => unssf_syndicat-des-sages-femmes_un-info-lettre
[parent] =>
[extra1] =>
[extra2] =>
[extra3] =>
[current] => 1
)
CMSMS 1.6
90plan OVH
Messages : 5,034
Sujets : 63
Inscription : Oct 2009
Réputation :
0
bonsoir,
à mon avis c'est le caractère accentué "adhérent" qui pose problème.
Essaie en testant :
{if $node->id == 31}
Messages : 152
Sujets : 6
Inscription : May 2009
Réputation :
0
23/02/2012, 01:59:44
(Modification du message : 23/02/2012, 02:14:14 par toniodesbois.)
Ça marche !
Je vais tenter aussi de notifier les nombres de messages depuis la dernière connexion grâce à feusers_history. Je vais essayer seul, si je n'y arrive pas j'ouvrirai une nouvelle discussion.
Merci beaucoup
CMSMS 1.6
90plan OVH
|