Search + detail CGblog (ou News) = Erreur 404

Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
#1
Citation :#~~~~~ DEBUT BLOC A NE PAS SUPPRIMER ~~~~~
#~ Version du CMS: 1.12.x
#~ Url du site :
#~ Hébergeur / Soft :
#~ Informations Système :
#~ Cms Version: 1.12.1
#~ Installed Modules:
#~ CGBlog: 1.13.3
#~~~~~ FIN BLOC A NE PAS SUPPRIMER ~~~~~

Salut tout le monde,
J'avais fait appelle à votre aide il y a quelque temps à propos un bug sur des résultats de recherche avec les modules CGblog ou News : [Clos] Search + detail CGblog (ou News) = Erreur 404.
J'avais à l'époque contourné le problème (avec une grosse bouse infâme de bricolage de mes deux), mais je n'étais pas franchement satisfais.
J'ai finalement trouvé d'où venait le bug :
la recherche avec les module News ou CGblog, renvoie tout les articles correspondant à la recherche demandée, même ceux qui ne sont pas en statut "published". Or quand vous appelez News ou CGblog avec un id d'article qui est en statut autre que "published", ces modules vous génèrent une belle 404 ...
C'est surement un "AND status='published'" qui a été oublié dans le requête (j'avoue je n'ai pas creusé plus loin que ça)
Bref, encore des modules codé avec les pieds ... mais bon on commence à avoir l'habitude ...

Je vous propose non pas un patch, qui serra écrasé à chaque mise a jour, mais un bon vieux contournement du bug avec un test de statut.

J'ai crée un UDT : blog_getstatus

Code :
$smarty = cmsms()->GetSmarty();
$db = cmsms()->GetDb();
$articleid = isset($params['articleid']) ? $params['articleid'] : '';
if (!$articleid) return;
$query = "SELECT status FROM ".cms_db_prefix()."module_cgblog WHERE cgblog_id = ? LIMIT 1";
$result = &$db->GetRow($query,array($articleid));

if($result['status']) {
    $smarty->assign('blog_status', $result['status']);
}


il faut aussi modifier votre gabarit de résultat de recherche, pour ajouter le test :
Code :
{if $entry->module == 'CGBlog'}
    {blog_getstatus articleid=$entry->modulerecord}
    {if $blog_status == 'published'}    
        {CGBlog action='detail' articleid=$entry->modulerecord detailtemplate='monsupertemplate'}
    {/if}
{/if}

Ça marche avec CGblog, mais c'est bien sur modifiable pour que ça marche sur News.

Bredt Cool

P.S.: Je regarde d'où vient le bug exactement et je vous dis ça ASAP.
#1
Citation :#~~~~~ DEBUT BLOC A NE PAS SUPPRIMER ~~~~~
#~ Version du CMS: 1.12.x
#~ Url du site :
#~ Hébergeur / Soft :
#~ Informations Système :
#~ Cms Version: 1.12.1
#~ Installed Modules:
#~ CGBlog: 1.13.3
#~~~~~ FIN BLOC A NE PAS SUPPRIMER ~~~~~

Salut tout le monde,
J'avais fait appelle à votre aide il y a quelque temps à propos un bug sur des résultats de recherche avec les modules CGblog ou News : [Clos] Search + detail CGblog (ou News) = Erreur 404.
J'avais à l'époque contourné le problème (avec une grosse bouse infâme de bricolage de mes deux), mais je n'étais pas franchement satisfais.
J'ai finalement trouvé d'où venait le bug :
la recherche avec les module News ou CGblog, renvoie tout les articles correspondant à la recherche demandée, même ceux qui ne sont pas en statut "published". Or quand vous appelez News ou CGblog avec un id d'article qui est en statut autre que "published", ces modules vous génèrent une belle 404 ...
C'est surement un "AND status='published'" qui a été oublié dans le requête (j'avoue je n'ai pas creusé plus loin que ça)
Bref, encore des modules codé avec les pieds ... mais bon on commence à avoir l'habitude ...

Je vous propose non pas un patch, qui serra écrasé à chaque mise a jour, mais un bon vieux contournement du bug avec un test de statut.

J'ai crée un UDT : blog_getstatus

Code :
$smarty = cmsms()->GetSmarty();
$db = cmsms()->GetDb();
$articleid = isset($params['articleid']) ? $params['articleid'] : '';
if (!$articleid) return;
$query = "SELECT status FROM ".cms_db_prefix()."module_cgblog WHERE cgblog_id = ? LIMIT 1";
$result = &$db->GetRow($query,array($articleid));

if($result['status']) {
    $smarty->assign('blog_status', $result['status']);
}


il faut aussi modifier votre gabarit de résultat de recherche, pour ajouter le test :
Code :
{if $entry->module == 'CGBlog'}
    {blog_getstatus articleid=$entry->modulerecord}
    {if $blog_status == 'published'}    
        {CGBlog action='detail' articleid=$entry->modulerecord detailtemplate='monsupertemplate'}
    {/if}
{/if}

Ça marche avec CGblog, mais c'est bien sur modifiable pour que ça marche sur News.

Bredt Cool

P.S.: Je regarde d'où vient le bug exactement et je vous dis ça ASAP.
#2
Le problème semble concerner uniquement CGBlog car dans News, que ce soit lors de l'édition d'un article ou de la réindexation complète, le statut de l'article semble bien pris en compte (en tous cas après lecture du code).

Pour CGBlog, il est possible en effet qu'à la sauvegarde de l'article, sans réindexation complète de l'index de recherche, l'article soit ajouté même si le statut n'est pas publié. La réindexation complète semble elle OK.

Je t'invite à remonter le bug directement sur la forge s'il est confirmé. Merci !
#2
Le problème semble concerner uniquement CGBlog car dans News, que ce soit lors de l'édition d'un article ou de la réindexation complète, le statut de l'article semble bien pris en compte (en tous cas après lecture du code).

Pour CGBlog, il est possible en effet qu'à la sauvegarde de l'article, sans réindexation complète de l'index de recherche, l'article soit ajouté même si le statut n'est pas publié. La réindexation complète semble elle OK.

Je t'invite à remonter le bug directement sur la forge s'il est confirmé. Merci !


Atteindre :


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