Plugin recherche

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

  • [Problème] Plugin recherche

    Bonjour,

    J'ai suivi la partie création de plugin de recherche le tuto, mais j'ai toujours le même problème, et ce depuis plusieurs jours, tout d'abord j'avais une erreur avec le $mainframe, j'ai fini par ajouté $mainframe= JFactory::getApplication(); avant les registerEvent, mais un autre problème apparaît : Cliquez sur l'image pour l'afficher en taille normale

Nom : Ewri4S0WfS.jpg 
Affichages : 1 
Taille : 8,4 Ko 
ID : 1816573
    Mais je ne trouve aucune explication, ni aide sur ce problème...

  • #2
    Re : Plugin recherche

    Personne ?

    Commentaire


    • #3
      Re : Plugin recherche

      Bonjour,
      Il doit y avoir un problème de nommage dans le plugin.
      Sans en avoir le code, difficile de deviner où.
      Pas de demande de support par MP.
      S'il n'y a pas de solution, c'est qu'il n'y a pas de problème (Devise Shadok)

      Commentaire


      • #4
        Re : Plugin recherche

        Après quelques modifications, j'ai ce code :

        Code PHP:
        <?php
            
        //basé sur [url]http://docs.joomla.org/Creating_a_search_plugin[/url]
            
        defined'_JEXEC' ) or die( 'Restricted access' );
             
        $mainframe=& JFactory::getApplication();
            
        $mainframe->registerEvent'onSearch''plgSearchForm360' );
            
        $mainframe->registerEvent'onSearchAreas''plgSearchForm360Areas' );
         
            
        //JPlugin::loadLanguage( 'plg_search_form' );
         
            
        function &plgSearchForm360Areas()
            {
                static 
        $areas = array(
                    
        'form360' => 'Form'
                
        );
                return 
        $areas;
            }
         
            function 
        plgSearchForm360$text$phrase=''$ordering=''$areas=null )
            {
                
        $db =& JFactory::getDBO();
                
        $user=& JFactory::getUser(); 
         
                if (
        is_array$areas )) {
                    if (!
        array_intersect$areasarray_keysplgSearchForm360Areas() ) )) {
                        return array();
                    }
                }
         
                
        $plugin =& JPluginHelper::getPlugin('search''form360');
                 
        $pluginParams = new JParameter$plugin->params );
                 
        $limit $pluginParams->def'nameofparameter'defaultsetting );
                 
        $text trim$text );
             
                if (
        $text == '') {
                    return array();
                }
         
                
        $wheres = array();
                switch (
        $phrase) {
                     case 
        'exact':
                        
        $text $db->Quote'%'.$db->getEscaped$texttrue ).'%'false );
                        
        $wheres2= array();
                        
        $wheres2[]= 'LOWER(a.titreVisite) LIKE '.$text;
                        
        $where'(' implode') OR ('$wheres2 ) . ')';
                        break;
         
                         case 
        'all':
                        case 
        'any':
         
                         default:
                            
        $words  explode' '$text );
                            
        $wheres = array();
                            foreach (
        $words as $word)
                            {
                                    
        $word $db->Quote'%'.$db->getEscaped$wordtrue ).'%'false );
                                    
        $wheres2= array();
                                    
        $wheres2[]= 'LOWER(a.titreVisite) LIKE '.$word;
                                    
        $wheres[] = implode' OR '$wheres2 );
                            }
                            
        $where '(' implode( ($phrase == 'all' ') AND (' ') OR ('), $wheres ) . ')';
                            break;
                }
         
                switch ( 
        $ordering ) {
                     case 
        'alpha':
                        
        $order 'a.titreVisite ASC';
                        break;
         
                     case 
        'oldest':
         
                    case 
        'popular':
         
                    case 
        'newest':
         
                    default:
                        
        $order 'a.titreVisite ASC';
                }
         
                
        $searchNameofplugin JText::_'Form360' );
         
                
        $query 'SELECT a.titreVisite AS title,'
                
        ' CONCAT_WS( " / ", '$db->Quote($searchForm360) .', b.title )AS section,'
                
        //. ' "1" AS browsernav'
                
        ' FROM #__form360Visites AS a'
                
        //. ' INNER JOIN #__categories AS b ON b.id = a.catid'
                /*. ' WHERE ( '. $where .' )'
                . ' AND a.published = 1'
                . ' AND b.access <= '. (int) $user->get( 'aid' )*/
                
        ' ORDER BY '$order
                
        ;
         
                
        $db->setQuery$query0$limit );
                
        $rows $db->loadObjectList();
         
                foreach(
        $rows as $key => $row) {
                    
        $rows[$key]->href 'index.php?option=com_newsfeeds&view=newsfeed&catid='.$row->catslug.'&id='.$row->slug;
                }
         
            return 
        $rows;
        }
        avec un accès à la bonne table et le bon nom, mais la recherche ne se fait pas dans le composant

        Commentaire


        • #5
          Re : Plugin recherche

          Toujours le même problème, le code à été amélioré, mais j'ai toujours une erreur sur $mainframe :
          Code PHP:
          $mainframe=& JFactory::getApplication();
              
          $mainframe->registerEvent'onSearch''plgSearchForm360' );
              
          $mainframe->registerEvent'onSearchAreas''plgSearchForm360Areas' ); 
          La recherche coince sur le
          Code PHP:
          $mainframe=& JFactory::getApplication() 
          Mais sans cette ligne, tout le scripte plante :/

          Ensuite pour je ne sais quelle raison, il ne trouve aucun résultat, alors que les paramètres ont bien été définis et la requête sql est bonne : j'ai volontairement mis en commentaire certaines parties car elles n'existent pas dans ma table.

          Et les noms sont les bons pour le coup.

          Le scripte complet :
          Code PHP:
          <?php
              
          //basé sur http://docs.joomla.org/Creating_a_search_plugin
              
          defined'_JEXEC' ) or die( 'Restricted access' );
               
          $mainframe=& JFactory::getApplication();
              
          $mainframe->registerEvent'onSearch''plgSearchForm360' );
              
          $mainframe->registerEvent'onSearchAreas''plgSearchForm360Areas' );
           
              
          //JPlugin::loadLanguage( 'plg_search_form360.ini' );
           
              
          function &plgSearchForm360Areas()
              {
                  static 
          $areas = array(
                      
          'form360' => 'Form'
                  
          );
                  return 
          $areas;
              }
           
              function 
          plgSearchForm360$text$phrase=''$ordering=''$areas=null )
              {
                  
          $db =& JFactory::getDBO();
                  
          $user=& JFactory::getUser(); 
           
                  if (
          is_array$areas )) {
                      if (!
          array_intersect$areasarray_keysplgSearchForm360Areas() ) )) {
                          return array();
                      }
                  }
           
                  
          $plugin =& JPluginHelper::getPlugin('search''form360');
                   
          $pluginParams = new JParameter$plugin->params );
                   
          $limit $pluginParams->def'basic',50);
                  
          $limit $pluginParams->def'search_content',1);
                   
          $text trim$text );
               
                  if (
          $text == '') {
                      return array();
                  }
           
                  
          $wheres = array();
                  switch (
          $phrase) {
                       case 
          'exact':
                          
          $text $db->Quote'%'.$db->getEscaped$texttrue ).'%'false );
                          
          $wheres2= array();
                          
          $wheres2[]= 'LOWER(a.titreVisite) LIKE '.$text;
                          
          $where'(' implode') OR ('$wheres2 ) . ')';
                          break;
           
                           case 
          'all':
                          case 
          'any':
           
                           default:
                              
          $words  explode' '$text );
                              
          $wheres = array();
                              foreach (
          $words as $word)
                              {
                                      
          $word $db->Quote'%'.$db->getEscaped$wordtrue ).'%'false );
                                      
          $wheres2= array();
                                      
          $wheres2[]= 'LOWER(a.titreVisite) LIKE '.$word;
                                      
          $wheres[] = implode' OR '$wheres2 );
                              }
                              
          $where '(' implode( ($phrase == 'all' ') AND (' ') OR ('), $wheres ) . ')';
                              break;
                  }
           
                  switch ( 
          $ordering ) {
                       case 
          'alpha':
                          
          $order 'a.titreVisite ASC';
                          break;
           
                       case 
          'oldest':
           
                      case 
          'popular':
           
                      case 
          'newest':
           
                      default:
                          
          $order 'a.titreVisite ASC';
                  }
           
                  
          $searchNameofplugin JText::_'Form360' );
           
                  
          $query 'SELECT a.titreVisite AS title,'
                  
          ' CONCAT_WS( " / ", '$db->Quote($searchForm360) .', b.title )AS section,'
                  
          //. ' "1" AS browsernav'
                  
          ' FROM #__form360Visites AS a'
                  
          //. ' INNER JOIN #__categories AS b ON b.id = a.catid'
                  /*. ' WHERE ( '. $where .' )'
                  . ' AND a.published = 1'
                  . ' AND b.access <= '. (int) $user->get( 'aid' )*/
                  
          ' ORDER BY '$order
                  
          ;
           
                  
          $db->setQuery$query0$limit );
                  
          $rows $db->loadObjectList();
           
                  foreach(
          $rows as $key => $row) {
                      
          $rows[$key]->href 'index.php?option=com_newsfeeds&view=newsfeed';//&catid='.$row->catslug.'&id='.$row->slug;
                  
          }
           
              return 
          $rows;
          }

          Commentaire


          • #6
            Re : Plugin recherche

            il me semble que tu as mis la clause where en commentaire et il manque un espace avant AS section

            $query = 'SELECT a.titreVisite AS title,'
            . ' CONCAT_WS( " / ", '. $db->Quote($searchForm360) .', b.title )AS section,'
            //. ' "1" AS browsernav'
            . ' FROM #__form360Visites AS a'
            //. ' INNER JOIN #__categories AS b ON b.id = a.catid'
            /*. ' WHERE ( '. $where .' )'
            . ' AND a.published = 1'
            . ' AND b.access <= '. (int) $user->get( 'aid' )*/
            . ' ORDER BY '. $order
            ;
            Christophe
            http://www.webcrea.fr

            Commentaire


            • #7
              Re : Plugin recherche

              Depuis PHP 5, le sobjets sont toujours retournés par référence. Et avec PHP 5.4
              Code PHP:
              $mainframe=& JFactory::getApplication() 
              retourne une erreur. La bonne syntaxe est
              Code PHP:
              $mainframe JFactory::getApplication() 
              Pas de demande de support par MP.
              S'il n'y a pas de solution, c'est qu'il n'y a pas de problème (Devise Shadok)

              Commentaire


              • #8
                Re : Plugin recherche

                Donc pour l'erreur, tout est bon, mais maintenant il me dit qu'il ne trouve aucun résultat alors que la recherche est bonne (le titre que je cherche existe bien dans la table)
                J'ai aussi modifié la requête :
                Code PHP:
                $query 'SELECT a.titreVisite AS title,'
                        
                ' CONCAT_WS( " / ", '$db->Quote($searchForm360) .', b.titreVisite )AS section,'
                        
                ' FROM #__form360Visites AS a'
                        
                ' WHERE ( '$where .' )'
                        
                ' AND b.access <= '. (int) $user->get'aid' )
                        . 
                ' ORDER BY '$order
                        

                Commentaire


                • #9
                  Re : Plugin recherche

                  reste toujours un espace à mettre après la parenthèse
                  ) AS section

                  plutôt que )AS section

                  et il y a un truc que je ne comprends pas tu nommes une variable title de a.titreVisite et tu fais une recherche sur b.titleVisite et tu fais le test sur b.access alors b n'est pas déclaré

                  tape ta requête dans phpmyadmin pour voir si tu as une réponse
                  Dernière édition par webcrea à 04/12/2012, 16h02
                  Christophe
                  http://www.webcrea.fr

                  Commentaire


                  • #10
                    Re : Plugin recherche

                    J'ai l'impression que la recherche n'exécute jamais ma fonction de recherche, pour la tester, j'ai mis
                    Code PHP:
                    function plgSearchForm360$text$phrase=''$ordering=''$areas=null )
                        {
                    $rows=array(
                                
                    "foo" => "bar",
                                
                    "bar" => "foo",
                                );
                            foreach(
                    $rows as $key => $row) {
                                
                    $rows[$key]->href 'index.php?option=com_newsfeeds&view=newsfeed';//&catid='.$row->catslug.'&id='.$row->slug;
                            
                    }
                     
                        return 
                    $rows;

                    Or elle ne me retourne aucun élément de mon tableau.

                    Quelqu'un a déjà réaliser ce genre de plugin pour un composant ?

                    Commentaire


                    • #11
                      Re : Plugin recherche

                      Bonjour,

                      Déjà, que fait un appel à com_newsfeed dans un composant qui semble être autre ?

                      Passes ton Joomla! en mode debug et également l'affichage des erreurs sur Développeur, ça devrait être très instructif.
                      La requête SQL ,également est space... comme signalé par webcrea. Le mode Debug pourrait te donner une requête SQL très étrange
                      Pas de demande de support par MP.
                      S'il n'y a pas de solution, c'est qu'il n'y a pas de problème (Devise Shadok)

                      Commentaire


                      • #12
                        Re : Plugin recherche

                        J'ai bien corriger la requête comme dit dans le message précédent, mais la recherche n'exécute même pas la fonction.

                        Le problème c'est que j'ai créé un composant qui possède sa propre table, donc pour chercher dedans j'ai créer le plugin de recherche comme indiqué dans la doc, mais le script n'est pas traité, et je ne vois absolument pas pourquoi ?

                        Mais au moins, est-il possible de faire une recherche dans un composant développé par moi même?
                        Dernière édition par You0 à 05/12/2012, 08h36

                        Commentaire


                        • #13
                          Re : Plugin recherche

                          Plus personne ?

                          Commentaire


                          • #14
                            Re : Plugin recherche

                            Envoyé par You0 Voir le message
                            Le problème c'est que j'ai créé un composant qui possède sa propre table, donc pour chercher dedans j'ai créer le plugin de recherche comme indiqué dans la doc, mais le script n'est pas traité, et je ne vois absolument pas pourquoi ?

                            Mais au moins, est-il possible de faire une recherche dans un composant développé par moi même?
                            Il est toujours possible de faire un plugin pour tout composant.
                            Mais sans avoir la structure de tes tables dans ce composant, et de pouvoir tracer avec un debug tool, les devinettes ne peuvent fonctionner.
                            Pas de demande de support par MP.
                            S'il n'y a pas de solution, c'est qu'il n'y a pas de problème (Devise Shadok)

                            Commentaire


                            • #15
                              Re : Plugin recherche

                              Dans mon composant il n'y a qu'une seule table, donc la la requête se fait sur celle-ci, par contre, en testant si la recherche rentre bien dans le plugin, je me rends compte que le code est traité, mais lorsqu'il doit rentrer dans les fonctions, rien ne se passe, j'ai testé toutes les fonctions avec des affichages, mais aucuns ne fonctionnes...

                              Vous ne savez si un autre modèle pour la version 2.5 existe car j'ai l'impression que celui de la doc est buggé

                              Commentaire

                              Annonce

                              Réduire
                              Aucune annonce pour le moment.

                              Partenaire de l'association

                              Réduire

                              Hébergeur Web PlanetHoster
                              Travaille ...
                              X