Mes nouvelles activités ne me laissent que peu de temps pour mettre à jour ce blog. En attendant une éventuelle reprise de mes divagations éditoriales, vous pouvez toujours parcourir les anciens articles. A+ et bonne lecture!

Substituez le champ de recherche standard dans votre thème Drupal 6

Sujet:

Rubrique:

Niveau : intermédiaire

Ce petit article va vous montrer comment substituer le champs de recherche standard de Drupal par le votre. Il m'a été inspiré par un commentaire de Lektum qui se plaignait de ne pas pouvoir modifier le texte du formulaire de recherche.

En fait c'est plutôt simple. Du moins une fois que l'on a compris le mécanisme de substitution (overrides) de Drupal. Comme n'importe quel élément d'un site Drupal, le balisage du formulaire de recherche est généré soit par un gabarit, soit par une fonction de thème. Pour le savoir, il faut fouiller dans le répertoire du module responsable de la fonctionnalité, le module "search" en l'occurrence. Et miracle vous aller trouver le gabarit search-theme-form.tpl.php.

Facile non ? Et bien non, tout se gâte lorsque vous ouvrez le fichier dans l'espoir de le modifier et vous tomber sur ce code plutôt sibyllin.

<?php print $search_form; ?>

Tout l'HTML est contenu dans un seule variable $search_form... Alors comment faire pour customiser tout cela ?

En fait il suffit de lire le texte de documentation du fichier pour trouver des variables plus fines. Notamment :

  • $search['search_theme_form']: le champs texte pour l'entrée des données et son étiquette
  • $search['submit']: le bouton de validation
  • $search['hidden']: tous les éléments cachés du formulaire, strictement nécessaire pour assurer la validation.

La dernière est importante. Tous les autres champs, ainsi que les étiquettes vous pouvez faire ce que vous voulez. Voici le code que j'utilise pour mes thèmes :

<?php // Search ?>

<?php // ?>
<?php print $search['hidden']; ?>
<?php // Advanced Search ?>

Ici cela affiche un formulaire dépouillé, sans texte et sans bouton. Mais en enlevant les commentaires vous pouvez avoir un texte sur mesure et un bouton.

Bien entendu, n'oubliez pas de copier ce nouveau fichier dans le répertoire de votre thème, tout en gardant le même nom de fichier.

Et voila, je vous l'avait dit, on peut quasiment prendre le contrôle total de l'affichage avec Drupal...

Commentaires

  1. Y a encore plus simple

    Merci de faire écho à mon commentaire et de compléter les ressources francophones sur le sujet, c'est bien utile, car y a bcp de tutos inefficaces sur cette question (je les ai tous lus, en anglais comme en français).

    J'ai moi aussi, au départ, dupliqué le fichier search-theme-form.tpl.php et tenté de le manipuler mais j'avoue que le pauvre designer CSS que je suis n'avait pas compris comment réaliser le fameux override. Le système de supplantation de Drupal n'est pas si simple que la doc le prétend, je trouve.

    Cependant, l'utilisation du module Custom Search Box que j'ai découvert est quand même encore plus simple, plus rapide et plus facile. C'est la solution que je recommande à tous !

    Voir la page de doc que j'ai créée là-dessus sur DrupalFr.org.

    Et encore merci à toi pour cette précieuse précision.

  2. Effectivement ce module est

    Effectivement ce module est une bonne alternative. Par contre ce n'est pas forcément plus rapide.

    Une fois que tu as ton gabarit tu peux le réutiliser dans n'importe quel thème / projet, cela évite d'avoir à installer un module de plus, d'autant plus que l'interface d'administration du module n'est utile que une fois, etc, etc...

    Perso, je réfléchi à deux fois avant d'utiliser un module pour faire quelque chose qui est du domaine du thème.

    Mais dans tous les cas c'est une alternative qui nous laisse le choix. Du Drupal tout craché !

  3. J'ai essayé Custom Search

    J'ai essayé Custom Search Box, ça ne donne pas un contrôle aussi fin que la méthode d'Alexandre et je partage le point de vue qui consiste à dire qu'il vaut mieux éviter d'avoir recours à des modules pour ce qui touche aux thèmes (maintenant il y a des exceptions comme le module Contemplate pour contrôler le theming de $content).

    En tout cas merci pour le tuto !

  4. Je reconnais que le module

    Je reconnais que le module Custom Search Box est assez limité. Mais franchement, dans la plupart -- sinon la totalité -- des projets web, on n'a jamais besoin de plus.

    Disons que ce module est un bon "starter" pour le theming du formulaire de recherche. Quand on débute dans Drupal, ce qui est encore un peu mon cas, c'est bien pratique.

    Après, j'admets qu'il vaut mieux se constituer des stocks de bouts de code qui marchent et les utiliser dans les thèmes sans installer de module inutile.

  5. Au delà de ça, d'un point de

    Au delà de ça, d'un point de vue des performances, il sera toujours plus intéressant de modifier le thème que d'installer un module c'est un problème de traitement des données c'est plus efficient d'utiliser le moteur de template qu'un module qui ajoute une couche supplémentaire.

    Ce n'est pas trop grave pour un petit site ou un contexte d'exploitation perso et non professionnel mais forcémment dès qu'on travaille sur des projets pro et plus complexe, c'est un peu plus sensible.

    Je ne parle même pas de la maintenance car plus on a de module, plus on a de MAJ à gérer et plus c'est lourd (donc coûteux, donc cher...).

  6. search block

    Bonjour, j'ai suivi avec attention votre explication pour le theme de recherche cependant je rencontre un problème aujourd'hui. Mon bouton et le champ s'affichent mais le bouton submit "cliquable ne renvoie pas vers la recherche :

    <?php print $search['hidden']; ?>

    si vous pouviez m'aider ce serai simpa en plus, je pense que cela ne doit pas être très compliqué mais je ne trouve pas.

  7. J'ai rien contre ton

    @Lektum J'ai rien contre ton alternative un peu facile... cependant, avouons qu'il est plus agréable d'inclure la modification directement dans le thème plutôt que de faire encore appel à un module externe au thème.

    De ce fait, nullement nécessaire d'installer 20 différents modules pour afficher notre thème quand vient le temps de le transposer sur un autre site.

  8. EDIT...

    Mon précédent message étant une réponse au commentaire "Ya encore plus simple" de Lektum.

    Faudrait penser activer la fonction de réponse aux commentaires, Alex. ;)

  9. @JohnnyTapette , j'ai jamais

    @JohnnyTapette , j'ai jamais été convaincu par l'ergonomie des commentaires en "indent", je préfère les lire par ordre chronologique. Mais effectivement du coup il faut préciser à qui on s'adresse.

    Désolé pour le dérangement.

    Au fait c'est koi ce pseudo ?

  10. Tiens d'ailleurs je

    Tiens d'ailleurs je m'aperçois seulement maintenant que mon input filter qui affiche les lignes de code est passé à la trappe pendant les mises à jour de l'été. Il va falloir que je corrige cela...

  11. @Alexandre Eisen...: Bah, un

    @Alexandre Eisen...: Bah, un pseudo comme un autre. Supermegadeathgigaméchant étant déjà pris, j'avais plus trop de choix. Moi, j'le trouve très sympa! Hehe.

    Sinon, question un peu conne... j'suis en train de modifier toute ma zone de recherche et j'en suis à rafistoler le bouton de recherche lui-même pour lui faire un effet image coulissante focus/blur.

    Seul problème dit "con", quelle valeur je donne à mon lien href de la zone du bouton de recherche? J'avais penser y mettre un <?php print $search['submit'] ?> mais ça m'affiche le génial petit bouton laid "Recherche" que je fuis tant et qui embarque par dessus mon génial nouveau bouton à effet coulissant. Faut dire que je m'y attendais mais ne connaissant pas la valeur du lien, faut bien faire des essais.

    Des idées?

  12. @moi-même: C'est bon. J'ai

    @moi-même: C'est bon. J'ai trouver la solution à mon problème con. Remplacer par

    Ai-je mentionné que j'étais en cure de désintoxication au café?

  13. Bonjour, Comment puis-je

    Bonjour,
    Comment puis-je faire pour changer la valeur dans le champ texte par défaut ?

    D'avance merci.

  14. Salut

    J'ai réussi a modifier la valeur du champ texte avec cette syntaxe dans mon fichier template.php

    $vars['form']['search_theme_form']['#value'] = t('Valeur dans le champ texte');

    Sinon est t'il possible de prendre le controle du formulaire de recherche avancée, une fois que l'on clique sur le bouton pour lancer la recherche ?

    Merci.

 

Guided search

Abonnez-vous au flux RSS de Inéation

Twitter

Commentaires récents