web-dev-qa-db-ja.com

Joomlaの検索結果の記事のテキストの長さ:奇妙な場所でテキストが切り捨てられる

「/ search」を指すメニュー項目でJoomla検索モジュールを使用しています。検索が実行されると、結果にはリンクされたタイトル、スニペット、カテゴリ、作成日が一覧表示されます。

スニペットはほとんどが良いですが、時々非常に奇妙で、「...」で始まります。結果の配列を確認したところ、記事の全文が返されないため、独自の文字列の切り捨て関数を適用する方法はありません。次に出力例を示します。

<dl class="search-results">
    <dt class="result-title">
        1. <a href="/foo-bar">Foo Bar Title</a>
    </dt>
    <dd class="result-text">
        ...&nbsp;, lorem ipsum text ipsum lorem: Lorem Ipsum orem ipsum dolor sit amet, consectetur adipiscing elit....
    </dd>
    <dd class="result-created">
        Created on 26 June 2017 </dd>
</dl>

スニペットの出力のほとんどは、予想どおりです。 「検索-コンテンツ」プラグインを確認したところ、記事の詳細全体が返されています。

これは私にとってバグのようであり、これが予想される動作である場合にフルテキストを取得するためにカスタムプラグインを作成する必要がない方法はありますか?

1
sifu

これは、文字列がどこで分割されているか、および検索結果の記事テキストの長さが誰かによって調整される可能性があるという点で、有効な質問です。解決策は、最後はかなり単純です。

どうやって動くか:

  • 記事のテキストに関する検索の全体的な概念は、残りの文字列内で強調表示されている、検索語の周りの文字列のクリーンな部分を返すことです。このように設計されています。

  • これにはデフォルトの制限が設定されています。つまり、200文字です。

  • これが「...」で始まるテキストが表示されることがあります。これは、これが検索結果で返される記事のテキストの開始ではないことを意味するためです。


記事のテキストがどのように分割されるか:

  • あなたは正しいです。記事のテキストは、クエリからコンテンツ検索プラグインによって呼び出されるデータベースに完全に送られます。 _com_search_検索ビュー、_view.html.php_ファイルまで、このように到達します。

  • ただし、画面に出力するために_default_results.php_テンプレートに進む直前に、特別な処理が行われます。

    〜_view.html.php_の#273行目

    _$result->text    = JHtml::_('content.prepare', $result->text, '', 'com_search.search');
    _


  • この行が行うこと:

    これは_com_search_のSearchHelperクラス(_administrator/components/com_search/helpers/search.php_)を呼び出し、テキストはprepareSearchContent()で始まる、それを操作するいくつかの関数を通過します。

    ただし、別のSearchHelperのメソッド-_smartSubstr()への呼び出しがあるように、物事はより面白くなります-これは文字列を分割するものです-これは、テキストはJLanguageメソッドを使用する必要があります。メソッドはgetSearchDisplayedCharactersNumberと呼ばれ、その APIドキュメント に従って、検索結果に表示される文字数を返す必要があります-INTEGER-表示される文字数(値が設定されていない場合は200)特定の言語の場合)。


SearchDisplayedCharactersNumberを設定できる場所:

必要なことは、この数値を調整する言語ごとに_languages/overrides_の_xx-XX.localise.php_にオーバーライドを作成することだけです。 xx-XX.localise.phpは、関連する_xx-XX_言語フォルダー内にあります。

そこにgetSearchDisplayedCharactersNumber()メソッドがあります。

_public static function getSearchDisplayedCharactersNumber()
{
    return 200;
}
_

必要に応じて調整してください。


ドキュメンテーション

次のリソースが役立つ場合があります。

https://docs.joomla.org/J2.5:Making_a_Language_Pack_for_Joomla#the_fr-FR.localise.php

1
FFrewin