web-dev-qa-db-fra.com

Puis-je accéder / utiliser les résultats de la recherche intelligente de Joomla dans mon composant personnalisé?

Est-il possible d'appeler le "moteur" de recherche intelligente à partir d'un composant personnalisé, éventuellement avec AJAX?

Notre composant contient une quantité exhaustive de contenu qui doit être recherché dans le composant lui-même, et j'aimerais exploiter les "capacités" de com_Finder sans devoir commencer par la page par défaut de com_Finder.

J'ai essayé CURL et AJAX, mais tout ce que j'ai pu récupérer est la page complète que com_Finder rendrait normalement.

3
GDP

Je suis toujours intéressé par une meilleure réponse car cette solution modifie l'installation de base, mais j'ai ajouté le fichier ci-dessous pour obtenir ce dont j'avais besoin, avec les exemples suivants:

  • index.php?option=com_Finder&view=search&format=json&q=%22my+searched+phrase%22
  • index.php?option=com_Finder&view=search&format=json&q=my+keywords+to+find
  • index.php?option=com_Finder&view=search&format=json&q=my+keywords+to+find&limit=10

composants\com_Finder\views\search\view.json.php

<?php
defined('_JEXEC') or die;
/**
* Search json view class for the Finder package.
*/
class FinderViewSearch extends JViewLegacy
{
    public function display($tpl = null)
    {
        // Get the application
        $app = JFactory::getApplication();
        JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html');

        // Get view data.
        $state = $this->get('State');
        $query = $this->get('Query');
        $results = $this->get('Results');

        // Push out the query data.
        if (empty($results))
            $results = array();
        $data['results']        = $results;
        $data['explained_html'] = JHtml::_('query.explained', $query);
        $data['explained']      = strip_tags($data['explained_html']);
        $data['params']         = $state->get('params');
        $data['query']          = $this->get('Query');

        header('Content-Type: application/json');
        $response = new JResponseJson($data, 'Search returned '.count($results).' results' ,false);
        echo $response;
        $app->close();
    }
}
2
GDP