Forum CMS Made Simple FR
Indexer les données de son module dans Search - Version imprimable

+- Forum CMS Made Simple FR (https://forum.cmsmadesimple.fr)
+-- Forum : Général (https://forum.cmsmadesimple.fr/forum-3.html)
+--- Forum : Modules, Tags (https://forum.cmsmadesimple.fr/forum-14.html)
+--- Sujet : Indexer les données de son module dans Search (/thread-1623.html)



Indexer les données de son module dans Search - bess - 29/11/2011

Citation :#~~~~~ DEBUT BLOC A NE PAS SUPPRIMER ~~~~~
#~ Version du CMS: #1.10.2
#~ Url du site :
#~ Hébergeur / Soft :
#~ Informations Système :
#~~~~~ FIN BLOC A NE PAS SUPPRIMER ~~~~~



Salut tout le monde

Question en espérant que quelqu'un a déjà rencontré et résolu cette problématique (j'y crois de moins en moins)

Comment faire pour que le module Search indexe le contenu lambda de votre module ?


La plupart des réponses se trouve dans ce topic

La ou je bloque c'est pour résoudre ce cas de figure où un utilisateur vide le cache de Search pour tout réindexer. C'est plutôt pas mal foutu puisque Search analyse les modules qui se sont attachés à lui pour lancer la fonction de réindexage au passage, assurant ainsi la cohésion des indexes..

Seulement ça ne marche pas. J'en ai parlé longuement sur les forums anglais sans réponses jusque maintenant donc je voulais voir si kkun avais contourné le soucis.

Je reprend mon explication du forum anglais. Lors d'un réindex par Search, il execute ce code


Code :
[== PHP ==]
$modules = ModuleOperations::get_instance()->GetLoadedModules();
foreach( $modules as $key => $object )
{
if (method_exists($object, 'SearchReindex'))
{
$object->SearchReindex($module);
}

}


ce qui a pour effet de tester tous les modules, voir s'ils possèdent une fonction SearchReindex qui leur est propre, et si oui : ils executent cette fonction

Seulement cette portion de code

Code :
ModuleOperations::get_instance()->GetLoadedModules();


ne retournera que les modules chargés en mémoire grâce au LazyMode instauré avec la V1.10.x... et donc pas nos modules

Le code forçant le chargement de tous les modules (et être certain de ne pas en louper) serait plutôt de ce style

Code :
echo "<br/>*start : ";
  $modules = ModuleOperations::get_instance()->GetInstalledModules();
  foreach( $modules as $name)
    {
     $object = ModuleOperations::get_instance()->get_module_instance($name);
      if (method_exists($object, 'SearchReindex'))
     {
        $object->SearchReindex($module);
      }
      
    }


Voilà. Alors ça m'étonnerait que je sois le premier confronté à ce soucis, du coup j'ai un gros doute sur le fait que ce soit un bug mais plutôt que je suis sur la mauvaise piste...

Des idées ?