web-dev-qa-db-fra.com

Comment un composant personnalisé déclenche-t-il l'indexation SmartSearch?

Après plusieurs mois, il a fallu que je revienne à un composant qui était bien en marche et que je pensais indexer automatiquement les données que je sauvegardais comme il a été enregistré. En me familiarisant avec le code en cours, j'ai constaté que l'indexation automatique ne se produisait plus. Pour ma vie, je ne peux trouver nulle part où la méthode d'indexation est activée, ni rien en ligne qui explique comment y parvenir.

L'exécution de l'indexeur de la CLI exécute l'indexation. Je sais donc que le code fonctionne. Je ne sais pas ce qui manque dans mon composant (ou qui n'a peut-être jamais été implémenté) qui le déclenche automatiquement. J'ai étudié Création d'un plugin de recherche intelligente , et bien qu'il décrive les méthodes et les événements à utiliser, il n'explique ni ne donne, ni un exemple de son implémentation dans le modèle.

Parcourir le code de base de Joomla n'a pas été très utile en raison de la manière dont tous ces événements et méthodes sont stockés/nommés/hérités, puis construits de manière dynamique pour s'exécuter.

Lorsque j'utilise le modèle ->save(), devrais-je charger/déclencher quelque chose ou y a-t-il quelque chose dans le modèle que j'ai oublié ou manque?

4
GDP

Pour prendre en charge SmartSearch, vous devez écrire un plugin Finder pour votre composant. Vous voudrez peut-être utiliser plugins/Finder/content/content.php Comme exemple. Le squelette minimal est

class PlgFinderYourcomponent extends FinderIndexerAdapter
{
    /**
     * Method to index an item.
     *
     * @param   FinderIndexerResult $item The item to index as a FinderIndexerResult object.
     *
     * @return  boolean  True on success.
     *
     * @since   2.5
     * @throws  Exception on database error.
     */
    protected function index(FinderIndexerResult $item)
    {
        // ...
    }

    /**
     * Method to setup the adapter before indexing.
     *
     * @return  boolean  True on success, false on failure.
     *
     * @since   2.5
     * @throws  Exception on database error.
     */
    protected function setup()
    {
        // ...
    }
}

Vous voudrez peut-être aussi implémenter les méthodes onFinder...().

1
nibra