Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
[Résolu] Notification de nouveau message
#1
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
#2
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.
{SEO}
Inscrivez-vous à notre Newsletter sur le site (colonne de droite, en bas).
Vous appréciez CMSMS et l'aide qui vous est fournie ici, aidez-nous en participant au projet.
Formation CMS Made Simple | Création de site CMS Made Simple.

C'est en se plantant qu'on devient cultivé.
J'ai un string dans l'Array (Paris Hilton)
#3
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
#4
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}
{SEO}
Inscrivez-vous à notre Newsletter sur le site (colonne de droite, en bas).
Vous appréciez CMSMS et l'aide qui vous est fournie ici, aidez-nous en participant au projet.
Formation CMS Made Simple | Création de site CMS Made Simple.

C'est en se plantant qu'on devient cultivé.
J'ai un string dans l'Array (Paris Hilton)
#5
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
#6
RE,
fourni moi le gabarit complet, je chercherai mieux.
{SEO}
Inscrivez-vous à notre Newsletter sur le site (colonne de droite, en bas).
Vous appréciez CMSMS et l'aide qui vous est fournie ici, aidez-nous en participant au projet.
Formation CMS Made Simple | Création de site CMS Made Simple.

C'est en se plantant qu'on devient cultivé.
J'ai un string dans l'Array (Paris Hilton)
#7
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}
#8
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
#9
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.
#10
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
#11
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".
#12
J'ai mis ton gabarit et remplacé {last_blog} par essai.
CMSMS 1.6
90plan OVH
#13
En gros tout se passe comme si le test {if $node->menutext == 'Infos adhérents'} n'était jamais vrai.
CMSMS 1.6
90plan OVH
#14
É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.
#15
Ç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
#16
bonsoir,
à mon avis c'est le caractère accentué "adhérent" qui pose problème.
Essaie en testant :
{if $node->id == 31}
{SEO}
Inscrivez-vous à notre Newsletter sur le site (colonne de droite, en bas).
Vous appréciez CMSMS et l'aide qui vous est fournie ici, aidez-nous en participant au projet.
Formation CMS Made Simple | Création de site CMS Made Simple.

C'est en se plantant qu'on devient cultivé.
J'ai un string dans l'Array (Paris Hilton)
#17
Ç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
CMSMS 1.6
90plan OVH


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)