LISE : Rechercher mot clé dans le titre

Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
#1
Citation :#~~~~~ DEBUT BLOC A NE PAS SUPPRIMER ~~~~~
#~ Version du CMS: 2.1.6
#~ Url du site :
#~ Hébergeur / Soft :
#~ Informations Système :
#~~~~~ FIN BLOC A NE PAS SUPPRIMER ~~~~~


Bonjour à tous,

J'ai une petite question concernant le module LISE, est'il possible d'effectuer une recherche exclusivement dans le titre de l'item plutôt que dans l'ensemble des champs ajouté dans mon module ?

J'utlise la balise suivante :

Code :
{LISEFormation action="search" template_search="form_recherche_asf" template_summary="searchresults" }

Je pense que deux solutions peuvent s'offrir :

Soit effectuer la recherche exclusivement dans le champ title
Soit n'afficher que les résultats dont le champ {$item->title} contient le mot clé taper.

Dans ma template searchresult j'ai le code suivant :

Code :
[== Indéfini ==]
{if !empty($actionparams.search)}
    <h2>{$mod->ModLang('searchresultsfor')} &quot;{$actionparams.search}&quot;</h2>
{/if}

<ul>
{foreach from=$items item=item}
    <li class="item searchresult">
        <a href="{$item->url}">{$item->title}</a>
    </li>
{/foreach}
</ul>

Je pense que le {$actionparams.search} est le mot clé tapé, donc comment dire en smarty si {$item->title} contient la chaine de caractère {$actionparams.search} alors j'affiche le résultat.



Merci pour vos conseils.
#1
Citation :#~~~~~ DEBUT BLOC A NE PAS SUPPRIMER ~~~~~
#~ Version du CMS: 2.1.6
#~ Url du site :
#~ Hébergeur / Soft :
#~ Informations Système :
#~~~~~ FIN BLOC A NE PAS SUPPRIMER ~~~~~


Bonjour à tous,

J'ai une petite question concernant le module LISE, est'il possible d'effectuer une recherche exclusivement dans le titre de l'item plutôt que dans l'ensemble des champs ajouté dans mon module ?

J'utlise la balise suivante :

Code :
{LISEFormation action="search" template_search="form_recherche_asf" template_summary="searchresults" }

Je pense que deux solutions peuvent s'offrir :

Soit effectuer la recherche exclusivement dans le champ title
Soit n'afficher que les résultats dont le champ {$item->title} contient le mot clé taper.

Dans ma template searchresult j'ai le code suivant :

Code :
[== Indéfini ==]
{if !empty($actionparams.search)}
    <h2>{$mod->ModLang('searchresultsfor')} &quot;{$actionparams.search}&quot;</h2>
{/if}

<ul>
{foreach from=$items item=item}
    <li class="item searchresult">
        <a href="{$item->url}">{$item->title}</a>
    </li>
{/foreach}
</ul>

Je pense que le {$actionparams.search} est le mot clé tapé, donc comment dire en smarty si {$item->title} contient la chaine de caractère {$actionparams.search} alors j'affiche le résultat.



Merci pour vos conseils.
#2
Sans aucun test et pas certain que ça fonctionne avec smarty 3:
Code :
{if strpos("$item->title", "$actionparams.search") != false}
affichage
{/if}
#2
Sans aucun test et pas certain que ça fonctionne avec smarty 3:
Code :
{if strpos("$item->title", "$actionparams.search") != false}
affichage
{/if}
#3
Bonjour Jean le Chauve, merci pour ta réponse je viens d'essayer mais cela ne fonctionne pas Sad
#3
Bonjour Jean le Chauve, merci pour ta réponse je viens d'essayer mais cela ne fonctionne pas Sad
#4
Est-ce que tu as eu une erreur de sécurité ou pas ?
Et ceci :
{if $item->title|strpos("$actionparams.search") != false}

Sinon, https://board.s9y.org/viewtopic.php?f=11&t=20294
#4
Est-ce que tu as eu une erreur de sécurité ou pas ?
Et ceci :
{if $item->title|strpos("$actionparams.search") != false}

Sinon, https://board.s9y.org/viewtopic.php?f=11&t=20294
#5
Alors j'ai essayé (avec accolade, sans accolade, avec ou sans apostrophe mais rien ne change j'ai effectivement une erreur.

on line 30 "{if $item->title|strpos("$actionparams.search") != false}" - Unexpected "(", expected one of: "}"


Concernant le seconde solution, la function demande pas si la viriable commence par le terme indiqué (moi je dois chercher dans tout le titre)

Autre possiblité :

Est ce que la paramètre Filter ou Search_* ne peut pas être utilisé directement dans l'appel du module, j'ai tenté deux ou trois chose mais pas de résultat.



Je pense qu'il n'y a pas de solutions.
#5
Alors j'ai essayé (avec accolade, sans accolade, avec ou sans apostrophe mais rien ne change j'ai effectivement une erreur.

on line 30 "{if $item->title|strpos("$actionparams.search") != false}" - Unexpected "(", expected one of: "}"


Concernant le seconde solution, la function demande pas si la viriable commence par le terme indiqué (moi je dois chercher dans tout le titre)

Autre possiblité :

Est ce que la paramètre Filter ou Search_* ne peut pas être utilisé directement dans l'appel du module, j'ai tenté deux ou trois chose mais pas de résultat.



Je pense qu'il n'y a pas de solutions.
#6
Hello,

tu as tenté un

Code :
{LISEMonModule search_title='texte'}

? A priori c'est prévu dans le module (voir l'aide)

a+
#6
Hello,

tu as tenté un

Code :
{LISEMonModule search_title='texte'}

? A priori c'est prévu dans le module (voir l'aide)

a+
#7
Je parlais d'une erreur de sécurité, car Smarty 3 n'accepte plus tous les modificateurs PHP comme c'était le cas dans les précédentes versions.
L'erreur que tu as indiquée montre une erreur de syntaxe, essaye ceci :
Code :
{if $item->title|strpos:"$actionparams.search" !== false}
strpos() cherche la première occurrence d'un terme dans l'ensemble de la string, donc trouvera le terme dans tout le titre, même s'il se trouve à la fin de la string.
#7
Je parlais d'une erreur de sécurité, car Smarty 3 n'accepte plus tous les modificateurs PHP comme c'était le cas dans les précédentes versions.
L'erreur que tu as indiquée montre une erreur de syntaxe, essaye ceci :
Code :
{if $item->title|strpos:"$actionparams.search" !== false}
strpos() cherche la première occurrence d'un terme dans l'ensemble de la string, donc trouvera le terme dans tout le titre, même s'il se trouve à la fin de la string.
#8
jean-le-chauve j'ai essayé avec la syntaxe, je n'ai pas d'erreur mais rien ne s'affiche, alors que ca devrait être le cas ? Faut t'il que j'active le mode Debug pour voir si il y a une erreur ?

Code :
[== Indéfini ==]
{if $item->title|strpos:"$actionparams.search" !==false} {$item->url} {/if}


Airelibre j'ai appelé mon module de la façon suivante :

Code :
[== Indéfini ==]
{LISEFormation action="search" template_search="form_recherche_asf" template_summary="searchresults" template_detail="detail_formation_continue" summarypage="resultat-de-votre-recherche" detailpage="fiche-formation" }

Le problème s'est que cela me permet d'afficher le formulaire de recherche mais je n'ai pas encore le mot clé choisi donc quoi mettre à la place de 'texte' dans ton search_title='texte'. Moi j'aurais voulu qu'on puisse indiquer sur quel champ chercher, je pensais que la balise filter="" fonctionnait mais j'ai beau mettre title ou alias à l'intérieur cela ne fonctionne pas.
#8
jean-le-chauve j'ai essayé avec la syntaxe, je n'ai pas d'erreur mais rien ne s'affiche, alors que ca devrait être le cas ? Faut t'il que j'active le mode Debug pour voir si il y a une erreur ?

Code :
[== Indéfini ==]
{if $item->title|strpos:"$actionparams.search" !==false} {$item->url} {/if}


Airelibre j'ai appelé mon module de la façon suivante :

Code :
[== Indéfini ==]
{LISEFormation action="search" template_search="form_recherche_asf" template_summary="searchresults" template_detail="detail_formation_continue" summarypage="resultat-de-votre-recherche" detailpage="fiche-formation" }

Le problème s'est que cela me permet d'afficher le formulaire de recherche mais je n'ai pas encore le mot clé choisi donc quoi mettre à la place de 'texte' dans ton search_title='texte'. Moi j'aurais voulu qu'on puisse indiquer sur quel champ chercher, je pensais que la balise filter="" fonctionnait mais j'ai beau mettre title ou alias à l'intérieur cela ne fonctionne pas.
#9
Le code que je t'ai donné ne fonctionne sans doute pas.
Airelibre connaissant le module, il a donné la bonne réponse à ton problème :
Citation :est'il possible d'effectuer une recherche exclusivement dans le titre de l'item plutôt que dans l'ensemble des champs ajouté dans mon module ?
Puis tu lui réponds :
Citation :Moi j'aurais voulu qu'on puisse indiquer sur quel champ chercher
Faudrait savoir Wink

Ensuite, tu dis ne pas connaître à l'avance le terme à rechercher dans le titre, on peut en déduire que ce sera l'internaute qui le choisira. Il te suffirait alors d'en faire une variable et de le mettre dans {LISEMonModule search_title=$variable}.
Mais comment veux-tu qu'il trouve le mot-clé exact si tu ne lui donnes pas à choisir dans une liste prédéfinie ?
Ce serait sympa que tu réfléchisses un peu plus à ton algorithme. Que veux-tu exactement et quelle sera la procédure à suivre pour l'internaute ?
#9
Le code que je t'ai donné ne fonctionne sans doute pas.
Airelibre connaissant le module, il a donné la bonne réponse à ton problème :
Citation :est'il possible d'effectuer une recherche exclusivement dans le titre de l'item plutôt que dans l'ensemble des champs ajouté dans mon module ?
Puis tu lui réponds :
Citation :Moi j'aurais voulu qu'on puisse indiquer sur quel champ chercher
Faudrait savoir Wink

Ensuite, tu dis ne pas connaître à l'avance le terme à rechercher dans le titre, on peut en déduire que ce sera l'internaute qui le choisira. Il te suffirait alors d'en faire une variable et de le mettre dans {LISEMonModule search_title=$variable}.
Mais comment veux-tu qu'il trouve le mot-clé exact si tu ne lui donnes pas à choisir dans une liste prédéfinie ?
Ce serait sympa que tu réfléchisses un peu plus à ton algorithme. Que veux-tu exactement et quelle sera la procédure à suivre pour l'internaute ?
#10
Alas - si tu utilises l'action de recherche, tu peux très bien revoir le gabarit de recherche pour n'afficher que le champ "titre" je pense.

Est-ce une solution viable ?
#10
Alas - si tu utilises l'action de recherche, tu peux très bien revoir le gabarit de recherche pour n'afficher que le champ "titre" je pense.

Est-ce une solution viable ?
#11
Alors je vais donner une explication plus claire. Le lien du site pour lequel j'ai le problème : ICI

Sur la partie droite il y un champ de recherche créé à partir de mon instance LISE, dans ce champ je demande aux internautes de taper un mots clé (exemple Word). Ce champ de recherche est implémanté de la façon suivante :

Code :
[== Indéfini ==]
{LISEFormation action="search" template_search="form_recherche_asf" template_summary="searchresults" template_detail="detail_formation_continue" summarypage="resultat-de-votre-recherche" detailpage="fiche-formation" }


Du coup si j'ai bien compris la méthode de Mathieu, voici ce qu'il devrait y avoir dans mon gabarit "searchresults"

Code :
[== Indéfini ==]
{if !empty($actionparams.search)}
    <h2>{$mod->ModLang('searchresultsfor')} &quot;{$actionparams.search}&quot;</h2>
{/if}

{LISEFormation search_title="{$actionparams.search}" template_summary="Form_sommaire_page_formation"}

Hors j'ai essayé tout cela mais rien ne fonctionne :

search_title="{$actionparams.search}"
search_title="$actionparams.search"
search_alias="{$actionparams.search}"
search_alias="$actionparams.search"


Je ne perds pas espoir Smile
#11
Alors je vais donner une explication plus claire. Le lien du site pour lequel j'ai le problème : ICI

Sur la partie droite il y un champ de recherche créé à partir de mon instance LISE, dans ce champ je demande aux internautes de taper un mots clé (exemple Word). Ce champ de recherche est implémanté de la façon suivante :

Code :
[== Indéfini ==]
{LISEFormation action="search" template_search="form_recherche_asf" template_summary="searchresults" template_detail="detail_formation_continue" summarypage="resultat-de-votre-recherche" detailpage="fiche-formation" }


Du coup si j'ai bien compris la méthode de Mathieu, voici ce qu'il devrait y avoir dans mon gabarit "searchresults"

Code :
[== Indéfini ==]
{if !empty($actionparams.search)}
    <h2>{$mod->ModLang('searchresultsfor')} &quot;{$actionparams.search}&quot;</h2>
{/if}

{LISEFormation search_title="{$actionparams.search}" template_summary="Form_sommaire_page_formation"}

Hors j'ai essayé tout cela mais rien ne fonctionne :

search_title="{$actionparams.search}"
search_title="$actionparams.search"
search_alias="{$actionparams.search}"
search_alias="$actionparams.search"


Je ne perds pas espoir Smile
#12
Non ce que je proposais c'était de simplifier ton gabarit de recherche "form_recherche_asf" pour n'y placer que l'input qui correspond au titre.

Ainsi plus besoin de bidouiller le gabarit de résultats, et c'est plus logique Wink
#12
Non ce que je proposais c'était de simplifier ton gabarit de recherche "form_recherche_asf" pour n'y placer que l'input qui correspond au titre.

Ainsi plus besoin de bidouiller le gabarit de résultats, et c'est plus logique Wink
#13
Voici mon gabarit de fomulaire ? J'avoue que je suis un peu perdu la ....


Mathieu quand tu dis "placer que l'input qui correspond au titre" c'est à dire ?

CI-dessous la gabarit de recherche.

Code :
[== Indéfini ==]
<div id="{$modulealias}_search">
    {$formstart}
    <div id="formulaire_recherche" class="grid-center">
       <div class="col-9">
        <input type="text" id="{$modulealias}searchinput" placeholder="TAPEZ UN MOT CLE" class="input_recherche" name="{$actionid}search" size="20" maxlength="50" value="" />
       </div>
       <div class="col-3">
        <input  class="btn_submit" name="submit" value="OK" type="submit" />
       </div>
     </div>
    {$formend}
</div>
#13
Voici mon gabarit de fomulaire ? J'avoue que je suis un peu perdu la ....


Mathieu quand tu dis "placer que l'input qui correspond au titre" c'est à dire ?

CI-dessous la gabarit de recherche.

Code :
[== Indéfini ==]
<div id="{$modulealias}_search">
    {$formstart}
    <div id="formulaire_recherche" class="grid-center">
       <div class="col-9">
        <input type="text" id="{$modulealias}searchinput" placeholder="TAPEZ UN MOT CLE" class="input_recherche" name="{$actionid}search" size="20" maxlength="50" value="" />
       </div>
       <div class="col-3">
        <input  class="btn_submit" name="submit" value="OK" type="submit" />
       </div>
     </div>
    {$formend}
</div>
#14
Dans ce cas tu dois utiliser le name="{$actionid}search_title" normalement, pour ne chercher que sur le titre
#14
Dans ce cas tu dois utiliser le name="{$actionid}search_title" normalement, pour ne chercher que sur le titre
#15
Airelibre cela ne fonctionne pas non plus :/ j'ai essayé avec name="{$actionid}search_title et name="{$actionid}search_alias
#15
Airelibre cela ne fonctionne pas non plus :/ j'ai essayé avec name="{$actionid}search_title et name="{$actionid}search_alias
#16
Peut-être que l'action "search" filtre ce nom de champ ... ca mériterait une lecture du code source pour voir.

Tu peux aussi faire un formulaire tout simple qui en appelant une autre page lance {LISEFormations search_title=$smarty.post.champrecherche} ou quelque chose comme ca, ca peut être une solution alternative
#16
Peut-être que l'action "search" filtre ce nom de champ ... ca mériterait une lecture du code source pour voir.

Tu peux aussi faire un formulaire tout simple qui en appelant une autre page lance {LISEFormations search_title=$smarty.post.champrecherche} ou quelque chose comme ca, ca peut être une solution alternative
#17
Je vais me mêler de ce qui ne me regarde pas, mais je suis assez vieux pour assumer Wink
Je trouve que ta recherche par mot-clé ne sera pas efficace. Une erreur d'orthographe (extrêmement fréquente de nos jours Wink), un synonyme et c'est foutu, la recherche ne renverra rien surtout que tu n'as pas des tonnes de formations.
Pourquoi ne pas utiliser ta page "les formations" pour toutes les afficher dans des tabs au survol de la souris (JQuery) ?

En passant, tu utilises les majuscules accentuées, ou pas, suivant les cas. Ce serait mieux de respecter la charte graphique à ce sujet. Et diplômante, pas dîplomante Wink.
#17
Je vais me mêler de ce qui ne me regarde pas, mais je suis assez vieux pour assumer Wink
Je trouve que ta recherche par mot-clé ne sera pas efficace. Une erreur d'orthographe (extrêmement fréquente de nos jours Wink), un synonyme et c'est foutu, la recherche ne renverra rien surtout que tu n'as pas des tonnes de formations.
Pourquoi ne pas utiliser ta page "les formations" pour toutes les afficher dans des tabs au survol de la souris (JQuery) ?

En passant, tu utilises les majuscules accentuées, ou pas, suivant les cas. Ce serait mieux de respecter la charte graphique à ce sujet. Et diplômante, pas dîplomante Wink.


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)