Faire un champ de saisie pour filter une liste de catégorie

Réduire
X
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • Faire un champ de saisie pour filter une liste de catégorie

    Bonjour,

    j'essaie de créer un champ de saisie pour permettre de filtrer les recherches dans une liste de catégories. (Je veux le meme fonctionnement que dans le composant catégorie de Joomla.)

    Mon problème: lorsque je tape sur la touche "entrée" mon formulaire est bien validé mais joomla ne me redirige pas vers la bonne page.
    En effet, Joomla cherche la case "defaut" dans le switch() du task handler (qui permet de savoir ce que veut faire l'utilisateur).
    Et le "defaut:" renvoie vers une autre fonction de mon composant.

    Ma question est donc: Comment redirigez joomla vers la bonne fonction de mon composant??

    Le composant catégorie n'utilise rien de spécial parceque le "defaut" de son task handler redirige toujours vers une liste des catégorie.
    Mais ce n'est pas le cas chez moi, le "defaut" de mon task handler redirige vers uen autre fonction.

    Code PHP:
    switch ($task) {

    //handle tasks for channels
            
    default:   
        case 
    "list_channels":
            
    viewChannelsList$scope$option );
            break;

    //handle tasks for categories
        
    case "list_cat":
            
    viewCatList$scope$option );
            break;


    et voici le bout de code qui concerne mon champ de saisie dans le html.php

    Code PHP:
    <td align="right"> 
        Filter: <input name="search"
            value="<?php echo mosGetParam($_REQUEST"search"""?>"
            class="text_area"
            onchange="document.adminForm.submit();" type="text" />
    </td>
    Ai je été assez clair?
    Dernière édition par vikti à 24/07/2007, 09h19 Raison: Mauvaise maitrise du copier coller...

  • #2
    Ton code s'execute t'il sans problème? Ton switch case me semble faux.

    que fait
    Code:
    defaut:
    ?

    Ton code devrait plutôt ressembler à ça:

    Code PHP:
    switch ($task) {

       
    //handle tasks for channels
       
    case "list_channels":
            
    viewChannelsList$scope$option );
            break;

       
    //handle tasks for categories
       
    case "list_cat":
            
    viewCatList$scope$option );
            break;
       default:
             echo 
    "rien de spéciale!";

    Dernière édition par ysagon à 22/07/2007, 12h44
    Yann Sagon
    Pas de MP pour demande de support!

    Commentaire


    • #3
      non je n'ai aucun soucis.

      Dans un switch on peut regrouper les "case" ensemble pour réduire le code.

      Ici, mon switch exécute le meme code pour "defaut" et pour "list_channels".

      Commentaire


      • #4
        Eh bien j'ai repris ton code tel quel, et il y a une erreur sur la ligne qui contient "defaut:" d'après ma version de php (5.2.1)
        Yann Sagon
        Pas de MP pour demande de support!

        Commentaire


        • #5
          Quand j'ai tronqué le code pour mon post, j'ai fait une faute de frappe. Il faut mettre "default" et non pas "defaut".
          Mais la syntaxe est correcte.

          Mais revenons au sujet de mon topic, y'a t'il un moyen d'avoir un controle sur la redirection de ma page a partir de cette ligne:

          Code:
          <td align="right"> 
              Filter: <input name="search"
                  value="<?php echo mosGetParam($_REQUEST, "search", "") ?>"
                  class="text_area"
                  onchange="document.adminForm.submit();" type="text" />
          </td>

          Commentaire


          • #6
            Envoyé par vikti Voir le message
            Quand j'ai tronqué le code pour mon post, j'ai fait une faute de frappe. Il faut mettre "default" et non pas "defaut".
            Mais la syntaxe est correcte.
            Bon bref.. ça n'aide pas à répondre à ta question. Dans ce cas, je persisite à dire que un switch avec deux "default:" c'est pas bon non plus.
            Yann Sagon
            Pas de MP pour demande de support!

            Commentaire


            • #7
              Envoyé par ysagon Voir le message
              Bon bref.. ça n'aide pas à répondre à ta question. Dans ce cas, je persisite à dire que un switch avec deux "default:" c'est pas bon non plus.
              Haaaaaaaa.... ca y est j'ai compris ou tu veux en venir!! J'ai mal recopier mon code pour le post, je n'avais pas vu le deuxieme "default", autant pour moi. Je ne comprenais pas que tu me parlais des deux "default".

              Bref, HS clos

              Aller les devs, une piste?

              Commentaire


              • #8
                Salut vikti,

                La réponse est très simple, pour que ton formulaire te redirige vers la bonne page, et donc sous-entendu vers la bonne tâche (task), il te suffit d'ajouter ce champ soit comme caché, soit dans l'action...

                Personnellement, je trouve que le champ caché est le plus propre, peut-être par ce qu'il est utilisé par les composants du core. Dans le cas de la liste de com_categories, puisque c'est la valeur par défaut, il n'est pas instancié

                Ce que je te préconise donc, c'est d'ajouter le task dans les options $list, et de le mettre en l'état dans ton formulaire, ça te permettra de le changer si besoin :
                Code PHP:
                //Pour ta fonction de liste:
                viewCatList( $scope, $option, $task );
                ...
                $lists['task'] = $task;
                //Puis appel à ta fonction d'affichage 

                //Et dans cette dernière :
                <input type="hidden" name="task" value="<?php echo $list['task']" />
                L'autre méthode est assez simple aussi, mais moins propre...
                Code:
                <form action="index2.php?option=<?php echo $option; ?>&task=<?php echo $task; ?>" method="post" name="adminForm">
                Bonne continuation
                Christophe
                Joomla newb but Joomla fan

                Commentaire


                • #9
                  Merci,

                  j'ai quelque difficultés a appliquer tes conseils.

                  Tout d'abord, j'ai essayé la méthode "propre". Mais je ne suis pas passé par le tableau $list[] dans la fonction viewCatList()

                  Pour mes besoins de test, j'ai tout mis en dur.

                  Ce qui donne
                  Code PHP:
                  switch ($task) {
                      
                  //handle tasks for channels
                      
                  default:
                      case 
                  "list_channels":
                          
                  viewChannelsList$scope$option );
                          break;
                     
                  //handle tasks for cat
                     
                  case "list_cat":
                          
                  //Search est le champ saisie de recherche
                          
                  viewCatList$scope$option$search );
                          break;
                       .
                       .
                       .
                    }

                  function 
                  viewCatList$scope$option$searchstring NULL ) {

                  ...
                  ...
                  ...
                  //appel a ma fonction d'affichage
                  HTML_vidomino::displayCatList$rows$scope$my->id$pageNav$option );
                  }

                  function 
                  displayCatList( &$rows$scope$myid, &$pageNav$option ) {

                  ...
                  <
                  form action="index2.php" method="post" name="adminForm">
                          <
                  input type="hidden" name="task" value="list_cat" />
                  ...



                  A noter que je récupère $task de la façon suivante:
                  Code PHP:
                  $task mosGetParam$_REQUEST'task''' ); 
                  et ca me redonne toujours la meme chose, une redirection vers list_channels...

                  Commentaire


                  • #10
                    Merci beaucoup Fly 6, ca marche!

                    EDIT:
                    Ah non, ca ne marche pas finalement, peu importe la position du "default" chez moi.
                    Dernière édition par vikti à 24/07/2007, 11h06 Raison: Fausse joie

                    Commentaire


                    • #11
                      La je suis un peu vêxé!! c'est exactement ce que je t'avais dit de faire!
                      Yann Sagon
                      Pas de MP pour demande de support!

                      Commentaire


                      • #12
                        Je crois qu'on s'est mal compris depuis le début Ysagon... désolé.

                        Cependant réjoui toi, ca ne marche pas donc tu es encore dans la course à la soluce...

                        Le fait d'avoir mis mon "default" a la fin n'a absolument rien changer...
                        Je précise que j'ai tronqué mon code pour l'exemple, j'ai une vingtaine de case dans switch qui marche parfaitement.

                        Ca ne vient pas du switch.

                        Ca vient de la transmission de la valeur task qui ne se fait pas, quand je valide mon formulaire de saisie.

                        Je me retrouve maintenant avec le code suivant, et ca ne change rien:

                        Code PHP:
                        <?php
                        switch ($task) {
                            
                        //handle tasks for channels
                             
                        case "list_channels":
                                
                        viewChannelsList$scope$option );
                                break;
                          
                         
                        //handle tasks for cat
                           
                        case "list_cat":
                                
                        //Search est le champ saisie de recherche
                                
                        viewCatList$scope$option$search );
                                break;
                             .
                             .
                             default:
                                
                        viewChannelsList$scope$option );
                                break;
                          }

                        function 
                        viewCatList$scope$option$searchstring NULL ) {

                        ...
                        ...
                        ...
                        //appel a ma fonction d'affichage
                        HTML_vidomino::displayCatList$rows$scope$my->id$pageNav$option$search );
                        }

                        function 
                        displayCatList( &$rows$scope$myid, &$pageNav$option$search ) {
                        ?>
                        ...
                        <form action="index2.php" method="post" name="adminForm">
                                <input type="hidden" name="task" value="list_cat" />
                        Filter:<input type="text" name="search" value="<?php echo $search;?>" class="inputbox" onchange="document.adminForm.submit();" />
                        ...
                        }


                        A noter que je récupère $task de la façon suivante:
                        Code PHP:
                        $task mosGetParam$_REQUEST'task''' ); 
                        et ca me redonne toujours la meme chose, une redirection vers list_channels...
                        Dernière édition par vikti à 24/07/2007, 11h13

                        Commentaire


                        • #13
                          Bon, allons un peu plus loin alors

                          Déjà, à quoi te sert la variable $scope ? Habituellement, ça permet justement de déterminer différentes parties du composant (gestion des catégories, des chaînes, de la fiche, ...).

                          Ensuite, comment est construit ton champ de filtrage ? A-t'il bien un code JavaScript qui demande la validation du formulaire sur changement ?
                          Code:
                          onchange="document.adminForm.submit();
                          Ha oui, en fait je viens de le trouver, c'est search

                          Après, que t'affiche la variable $task dans le test de fly? Normalement tu devrais avoir la valeur forcée de ton champ caché (task)...

                          Et enfin, peux tu nous donner la liste des champs inclus dans ton formulaire? Peut-être as-tu quelque chose qui vient perturber le fonctionnement normal.

                          Pour info, il est toujours souhaitable au niveau du back, d'inclure les champs cachés task et option dans les formulaires... option doit être renseigné avec $option (plus propre), et task peut rester vierge... Car c'est souvent le JS derrière les boutons qui va implémenter cette valeur en fonction de la destination...

                          Au pire, si tu ne trouve pas, donne-nous accès à tes fichiers pour voir
                          Christophe
                          Joomla newb but Joomla fan

                          Commentaire


                          • #14
                            C'est bon! J'ai trouvé

                            J'avais deja un champ caché task (et vide) dans mon formulaire!
                            C'est pour ca que $task était vide!!

                            Merci Ccrosaz! Tu m'as mis sur la bonne piste!
                            Dernière édition par vikti à 24/07/2007, 12h51 Raison: Trouvé

                            Commentaire

                            Annonce

                            Réduire
                            1 sur 2 < >

                            C'est [Réglé] et on n'en parle plus ?

                            A quoi ça sert ?
                            La mention [Réglé] permet aux visiteurs d'identifier rapidement les messages qui ont trouvé une solution.

                            Merci donc d'utiliser cette fonctionnalité afin de faciliter la navigation et la recherche d'informations de tous sur le forum.

                            Si vous deviez oublier de porter cette mention, nous nous permettrons de le faire à votre place... mais seulement une fois
                            Comment ajouter la mention [Réglé] à votre discussion ?
                            1 - Aller sur votre discussion et éditer votre premier message :


                            2 - Cliquer sur la liste déroulante Préfixe.

                            3 - Choisir le préfixe [Réglé].


                            4 - Et voilà… votre discussion est désormais identifiée comme réglée.

                            2 sur 2 < >

                            Assistance au forum - Outil de publication d'infos de votre site

                            Compatibilité: PHP 4.1,PHP4, 5, 6DEV MySQL 3.2 - 5.5 MySQLi from 4.1 ( @ >=PHP 4.4.9)

                            Support Version de Joomla! : | J!3.0 | J!2.5.xx | J!1.7.xx | J!1.6.xx | J1.5.xx | J!1.0.xx |

                            Version française (FR) D'autres versions sont disponibles depuis la version originale de FPA

                            UTILISER À VOS PROPRES RISQUES :
                            L'exactitude et l'exhaustivité de ce script ainsi que la documentation ne sont pas garanties et aucune responsabilité ne sera acceptée pour tout dommage, questions ou confusion provoquée par l'utilisation de ce script.

                            Problèmes connus :
                            FPA n'est actuellement pas compatible avec des sites Joomla qui ont eu leur fichier configuration.php déplacé en dehors du répertoire public_html.

                            Installation :

                            1. Téléchargez l'archive souhaitée : http://afuj.github.io/FPA/

                            Archive zip : https://github.com/AFUJ/FPA/zipball/master

                            2. Décompressez le fichier de package téléchargé sur votre propre ordinateur (à l'aide de WinZip ou d'un outil de décompression natif).

                            3. Lisez le fichier LISEZMOI inclus pour toutes les notes de versions spécifiques.

                            4. LIRE le fichier de documentation inclus pour obtenir des instructions d'utilisation détaillées.

                            5. Téléchargez le script fpa-fr.php à la racine de votre site Joomla!. C'est l'endroit que vous avez installé Joomla et ce n'est pas la racine principale de votre serveur. Voir les exemples ci-dessous.

                            6. Exécutez le script via votre navigateur en tapant: http:// www. votresite .com/ fpa-fr.php
                            et remplacer www. votresite .com par votre nom de domaine


                            Exemples:
                            Joomla! est installé dans votre répertoire web et vous avez installé la version française du fichier FPA:
                            Télécharger le script fpa-fr.php dans: /public_html/
                            Pour executer le script: http://www..com/fpa-fr.php

                            Joomla! est installé dans un sous-répertoire nommé "cms" et vous avez installé la version française du fichier FPA:
                            Télécharger le script fpa-fr.php dans: /public_html/cms/
                            Pour executer le script: http://www..com/cms/fpa-fr.php

                            En raison de la nature très sensible de l'information affichée par le script FPA, il doit être retiré immédiatement du serveur après son utilisation.

                            Pour supprimer le script de votre site, utilisez le lien de script de suppression fourni en haut de la page du script. Si le lien de suppression échoue pour supprimer le script, utilisez votre programme FTP pour le supprimer manuellement ou changer le nom une fois que le script a généré les données du site et le message publié sur le forum. Si le script est toujours présent sur le site, il peut être utilisé pour recueillir suffisamment d'informations pour pirater votre site. Le retrait du script empêche des étrangers de l'utiliser pour jeter un oeil à la façon dont votre site est structuré et de détecter les défauts qui peuvent être utilisé à vos dépends.
                            Voir plus
                            Voir moins
                            Travaille ...
                            X