J'utilise le module Joomla Search avec un élément de menu pointé vers '/ search'. Lorsqu'une recherche est effectuée, les résultats répertorient un titre lié, un extrait de code, une catégorie et la date de création.
Le snippet est généralement bon mais parfois, ils sont très étranges et commencent par "...". J'ai vérifié le tableau de résultats et il ne renvoie pas le texte intégral de l'article, il n'y a donc aucun moyen d'appliquer ma propre fonction tronquée de chaîne. Voici un exemple de sortie:
<dl class="search-results">
<dt class="result-title">
1. <a href="/foo-bar">Foo Bar Title</a>
</dt>
<dd class="result-text">
... , 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>
La plupart des extraits sont à peu près conformes à mes attentes. J'ai vérifié le plugin 'Rechercher - Contenu' et il renvoie les détails complets de l'article.
S'agit-il d'un comportement attendu, car cela me semble être un bogue et existe-t-il un moyen de ne pas avoir à écrire des plugins personnalisés pour obtenir le texte intégral s'il s'agit d'un comportement attendu?
C'est une question valable en ce qui concerne la question de savoir où la chaîne est fractionnée et comment quelqu'un pourrait ajuster la longueur du texte de l'article dans les résultats de la recherche. La solution est assez simple à la fin.
Le concept général de la recherche concernant le texte de l'article consiste à renvoyer une partie nettoyée de la chaîne, autour du terme de recherche, qui est mise en surbrillance dans le reste de la chaîne. Voici comment cela est conçu.
Une limite par défaut est définie pour cela, soit 200 caractères.
C'est pourquoi, parfois, vous voyez le texte commençant par '...', car cela signifie qu'il ne s'agit pas du début du texte de l'article renvoyé dans les résultats de la recherche.
Vous avez raison. Le texte de l'article arrive complet de la requête à la base de données appelée par le plugin de recherche de contenu. Cela va jusqu'à la vue de recherche com_search
, Fichier view.html.php
.
Cependant, juste avant de se diriger vers le modèle default_results.php
Pour impression à l'écran, il subit un traitement spécial.
~ ligne # 273 sur view.html.php
$result->text = JHtml::_('content.prepare', $result->text, '', 'com_search.search');
La classe SearchHelper
de com_search
Du administrator/components/com_search/helpers/search.php
Et le texte parcourt un certain nombre de fonctions qui le manipulent, à commencer par la prepareSearchContent()
.
Les choses deviennent cependant plus intéressantes, car dans la façon dont on appelle une autre méthode de SearchHelper
- _smartSubstr()
, - c’est celle qui divise la chaîne - qui calcule la longueur finale du text devrait utiliser une méthode JLanguage
. La méthode s'appelle: getSearchDisplayedCharactersNumber
et d'après sa documentation API elle devrait renvoyer le nombre de caractères affichés dans les résultats de la recherche - INTEGER - Le nombre de caractères affichés (200 si aucune valeur n'a été définie pour une langue spécifique).
Tout ce que vous avez à faire est de créer une substitution dans languages/overrides
Du xx-XX.localise.php
Pour chacune des langues pour lesquelles vous souhaitez ajuster ce nombre. Le fichier xx-XX.localise.php se trouve dans le dossier relatif de la langue xx-XX
.
Vous y trouverez la méthode getSearchDisplayedCharactersNumber()
.
public static function getSearchDisplayedCharactersNumber()
{
return 200;
}
Adaptez-le à vos besoins.
La ressource suivante pourrait être utile:
https://docs.joomla.org/J2.5:Making_a_Language_Pack_for_Joomla#the_fr-FR.localise.php