Forum CMS Made Simple FR

Version complète : [Résolu] Notification de nouveau message
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.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
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.
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}
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}
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...
RE,
fourni moi le gabarit complet, je chercherai mieux.
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}
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.
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.
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}
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".
J'ai mis ton gabarit et remplacé {last_blog} par essai.
En gros tout se passe comme si le test {if $node->menutext == 'Infos adhérents'} n'était jamais vrai.
É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.
Ç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
)
bonsoir,
à mon avis c'est le caractère accentué "adhérent" qui pose problème.
Essaie en testant :
{if $node->id == 31}
Ç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 Smile