web-dev-qa-db-ja.com

カスタムコンポーネントでJoomlaのスマート検索結果にアクセス/使用できますか?

できればAJAXを使用して、カスタムコンポーネントからスマート検索の「エンジン」を呼び出すことはできますか?

私たちのコンポーネントには、コンポーネント自体の中から検索する必要のあるコンテンツがたくさんあります。com_Finderのデフォルトページから開始する必要なく、com_Finderの「スマート」を活用したいと思います。

CURLとAJAXを試しましたが、取得できたのは、com_Finderが通常レンダリングするページ全体だけです。

3
GDP

この解決策はコアインストールをいじくり回すので、私はまだより良い答えに興味がありますが、以下のファイルを追加して、以下の例で必要なものを取得します。

  • 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

components\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