El Conjugador

Verbe à conjuguer :


El Conjugador

Joomla Tips :: Etendre la recherche aux modules de type html personnalisé !

Imprimer
Envoyer
Écrit par Fly06, Jeudi, 29 Avril 2010 Mis à jour ( Dimanche, 09 Mai 2010 20:39 )

Ce plugin n'est plus en téléchargement.

Il est remplacé par l'extension Fly06 Modules Search Plugin.


Suite à ce post sur le forum Joomla Francophone, j'ai développé un plugin de recherche dans les contenus des modules de type 'Html personnalisé' (mod_custom).

Rappelons pour commencer que le composant de recherche com_search fonctionne via des plugins de type "search". Chaque plugin est associé à un composant particulier et plus précisément à un ou plusieurs champs spécifiques d'une table de la base de données associée à ce composant. Par exemple, la recherche dans les articles correspond au composant com_content et aux champs (principaux) 'introtext' et  'fulltext' de la table jos_content.

Le point clé à bien comprendre dans la recherche Joomla! est que seuls les contenus correspondants aux composants c'est-à-dire ceux situés dans la partie principale de la page (tag <jdoc:include type="component" /> de votre fichier de template index.php) font l'objet d'une recherche !

Ce point est parfois source d'incompréhension pour les utilisateurs plus habitués à utiliser les moteurs de recherches comme Google ou Yahoo Search qui explorent la totalité des pages web qu'ils indexent (donc tout le corps de la page à savoir le html compris entre les balises <body> et </body>).

Le plugin Fly06 Mod Custom Search étend la recherche aux contenus des modules de type 'Html personnalisés' et permet de lever (en partie) cette "limitation".

Ce plugin est en tout point conforme aux plugins de type 'search' standards en terme de structure à l'exception notable de la façon dont il construit les liens vers les pages du site. Contrairement aux contenus associés à des composants pour lesquels une page unique du site peut être construite, un même module peut être affiché dans plusieurs pages en fonction des items de menu pour lequel il doit être affiché (définis dans la configuration des modules).

La solution consiste donc à effectuer une requête croisée sur les trois tables suivantes :

  • jos_modules : Contenus dans lesquels effectuer la recherche (champs 'content')
  • jos_menus : Pages dans lesquelles ce contenu est affiché (champs 'id')
  • jos_module_menus : Mapping modules <=> menus

Pour chaque enregistrement retournés par la requête, l'url de la page (href) est simplement :

index.php?Itemid=<id_du_menu>

L'application du JRoute_() dans le template des résultats permet finalement de récupérer l'url brute ou sef correspondante.

Le plugin intègre deux paramètres spécifiques :

  • Search Modules Positions : permet de restreindre la recherche à certaines positions de module (ex : user1, top, left)
  • Groupby Module Id : permet de limiter le nombre de résultats à un par module (plus petit itemid pour lequel le module est affiché)

Enfin, il s'agit d'une première version du plugin, les travaux ont déjà commencé pour étendre la recherche à tous les modules.

Edit (03/05/10) : Les modules présents dans toutes les pages ne sont pas inclus dans la recherche pour des raisons techniques ('Tous' est associé à l'Itemid 0 dans la table jos_modules_menus, Itemid qui n'existe pas en tant que tel dans la table jos_menus). Il existe un workaround simple à ce problème qui consiste à modifier le paramètre 'Menu' du module de 'Tous' à 'Sélectionner le(les) élément(s) de menu'. Notez aussi que rechercher un contenu présent sur toutes les pages du site n'a pas grand interêt...

Version 1.1 (03/05/10) : Restructuration du code afin d'optimiser la phase de recherche dans les contenus hors html (appel de la méthode checkNoHtml() de la classe SearchHelper) et correction d'un bug sur la clause 'group by' de la reqûete sql.

Fly06 Poll Module

(3729 votes)

Quel est votre principal critère de décision dans vos choix d'extensions ?

61.3%
38.7%
Loading...