Changeset 82681 in spip-zone


Ignore:
Timestamp:
May 22, 2014, 4:58:28 PM (5 years ago)
Author:
rastapopoulos@…
Message:

Tout comme pour indexer_sources(), on déporte la récupération d'un indexeur valide dans une fonction indexer_indexer() utilisable plusieurs fois.

On s'insère dans le pipeline "post_edition", et dès qu'il y a une modif sur un objet, on cherche si on a une ou plusieurs de nos sources enregistrées qui correspondent à l'objet en cours d'édition.

Si c'est le cas, on appelle l'indexeur et on lui donne à remplacer (ou ajouter) le document issu de la source en question (ou des sources).

Sans rien toucher, le mécanisme teste avec l'alias donné à la source ("articles", "fiches", etc) MAIS si on veut un truc plus bizarre, ou surtout si on a plusieurs sources différentes travaillant sur le même type d'objet, alors la classe de source peut implémenter une méthode getObjet() qui doit retourner "patate" (par exemple).

Testé aussi sur un objet non-spip, pour l'instant ça marche.

Là on réindexe le doc directement dans le pipeline, et ça ne me parait pas lent. Si on trouve que ça gêne, on pourra déporter l'indexation dans un job. Mais pour l'instant ça m'a l'air d'aller.

Location:
_plugins_/indexer/trunk
Files:
1 added
4 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/indexer/trunk/inc/indexer.php

    r82656 r82681  
    1818$loader->addPsr4('Spip\\Indexer\\Sources\\',  _DIR_PLUGIN_INDEXER . 'Sources');
    1919
     20$loader->register();
    2021
    21 $loader->register();
     22/**
     23 * Renvoyer un indexeur configuré avec un (et peut-être un jour plusieurs) lieu de stockage des choses à indexer
     24 *
     25 * Par défaut renvoie l'indexeur avec le stockage Sphinx intégré en interne et les paramètres des define()
     26 *
     27 * @pipeline_appel indexer_indexer
     28 * @return Retourne un objet Indexer, ayant été configuré avec la méthode registerStorage()
     29 */
     30function indexer_indexer(){
     31        static $indexer = null;
     32       
     33        if (is_null($indexer)){
     34                // On crée un indexeur
     35                $indexer = new Indexer\Indexer();
     36       
     37                // On tente de le configurer avec Sphinx et les define()
     38                try {
     39                        $indexer->registerStorage(
     40                            new Indexer\Storage\Sphinx(
     41                                new Sphinx\SphinxQL\SphinxQL(SPHINX_SERVER_HOST, SPHINX_SERVER_PORT), SPHINX_DEFAULT_INDEX)
     42                        );
     43                } catch( \Exception $e ) {
     44                        if (!$message = $e->getMessage())
     45                            $message = _L('Erreur inconnue');
     46                        die("<p class='erreur'>$message</p>");
     47                }
     48               
     49                // On le fait passer dans un pipeline
     50                $indexer = pipeline('indexer_indexer', $indexer);
     51        }
     52       
     53        return $indexer;
     54}
    2255
    2356/**
     
    2659 * Un pipeline "indexer_sources" est appelée avec la liste par défaut, permettant de retirer ou d'ajouter des sources.
    2760 *
    28  * @pipeline_appel insexer_sources
     61 * @pipeline_appel indexer_sources
    2962 * @return Sources Retourne un objet Sources listant les sources enregistrées avec la méthode register()
    3063 */
     
    3366       
    3467        if (is_null($sources)){
     68                // On crée la liste des sources
    3569                $sources = new Indexer\Sources\Sources();
     70                // Par défaut on enregistre les articles du SPIP
    3671                $sources->register('articles', new Spip\Indexer\Sources\Articles());
     72                // On passe les sources dans un pipeline
    3773                $sources = pipeline('indexer_sources', $sources);
    3874        }
  • _plugins_/indexer/trunk/paquet.xml

    r82370 r82681  
    88        documentation=""
    99>
    10 
    1110        <nom>Indexer</nom>
    1211
     
    1615
    1716        <licence>GNU/GPL</licence>
    18 
     17       
     18        <pipeline nom="post_edition" inclure="indexer_pipelines.php" />
    1919</paquet>
  • _plugins_/indexer/trunk/plugin.xml

    r82372 r82681  
    1717        <necessite id="SPIP" version="[2.1.0;3.1.99]" />
    1818        <categorie>navigation</categorie>
     19       
     20        <pipeline>
     21        <nom>post_edition</nom>
     22        <inclure>indexer_pipelines.php</inclure>
     23    </pipeline>
    1924</plugin>
    2025
  • _plugins_/indexer/trunk/prive/squelettes/contenu/indexer.html

    r82656 r82681  
    55if (_request('run') || _request('continue')) {
    66    include_spip('inc/indexer');
    7     $indexer = new Indexer\Indexer();
    8 
    9     try {
    10         $indexer->registerStorage(
    11             new Indexer\Storage\Sphinx(
    12                 new Sphinx\SphinxQL\SphinxQL(SPHINX_SERVER_HOST, SPHINX_SERVER_PORT), SPHINX_DEFAULT_INDEX)
    13         );
    14     } catch( \Exception $e ) {
    15         if (!$message = $e->getMessage())
    16             $message = _L('Erreur inconnue');
    17         die("<p class='erreur'>$message</p>");
    18     }
     7   
     8    // Appeler la fonction qui donne l'indexeur configuré pour ce SPIP
     9    $indexer = indexer_indexer();
    1910       
    2011        // Appeler la fonction qui liste les sources et qui comporte un pipeline pour étendre
Note: See TracChangeset for help on using the changeset viewer.