Comment récuperer l'id de la category sans passer par la fonction $model->setState

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

  • [Problème] Comment récuperer l'id de la category sans passer par la fonction $model->setState

    Bonjour à tous,

    Je viens d'installer Joomla 1.7.2 et le module lofarticlesslideshow qui reprend à peu de choses près le même code que le module articles_news fourni avec Joomla, du moins en ce qui concerne le fichier xml et le fichier helper.

    Dans le fichier "helper.php", on fait appel à la fonction $model->setState pour rédiger la requête. Or je ne souahite pas utiliser cette fonction mais écrire la requête dans le code "à l'ancienne", car j'ai besoin de sélectionner des tables particulières.

    Mon problème est que je ne sais pas comment récupérer l'id de la catégorie.

    La fonction joomla appelle la catégorie comme ça:
    $model->setState('filter.category_id', $params->get('catid', array()));

    Mais comment la récupérer sous forme de variable pour l'insérer dans ma requête ?

    Exemple ci-dessous (j'ai condensé au minimum la requête), comment définir $id_de_la_catégorie ?

    Code PHP:
    $query     'SELECT i.*,FROM content AS i  WHERE c.id ='.$id_de_la_catégorie.'; 
    Merci d'avance pour votre aide
    Dernière édition par vlester à 28/10/2011, 15h07

  • #2
    Re : Comment récuperer l'id de la category sans passer par la fonction $model->setSta

    Bonjour,

    $cat = $params->get('catid', array())
    par exemple.
    setState permet de positionner l'état du model avec la valeur d ela catégorie.
    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


    • #3
      Re: Comment récuperer l'id de la category sans passer par la fonction $model->setStat

      Merci pour votre réponse mais ça ne fonctionne pas à cause de l'array qui n'est pas reconnu, j'obtiens une erreur 500 :

      500 - JDatabaseMySQL::query: 1054 - Unknown column 'Array' in 'where clause' ...

      Une suggestion peut-être ?

      Commentaire


      • #4
        Re : Comment récuperer l'id de la category sans passer par la fonction $model->setSta

        Tu postes son SQL s'il te plaît ? Selon moi, tu as dû faire une erreur de syntaxe comme une apostrophe mal placée.
        Christophe (cavo789)
        Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be
        Logiciel gratuit de scan antivirus : https://github.com/cavo789/aesecure_quickscan (plus de 45.000 virus détectés, 700.000 fichiers sur liste blanche)​

        Commentaire


        • #5
          Re: Re : Comment récuperer l'id de la category sans passer par la fonction $model->se

          Envoyé par cavo789 Voir le message
          Tu postes son SQL s'il te plaît ? Selon moi, tu as dû faire une erreur de syntaxe comme une apostrophe mal placée.
          Bonjour,

          Voici ma requête (attention les yeux !)
          Je pense que le problème vient de la variable $categoryid car si je la remplace par un chiffre, mon module s'affiche sans problème. Je précise que je n'ai sélectionné qu'une seule catégorie donc pas besoin d'implode a priori.

          Code PHP:
          $categoryid $params->get('catid', array());
          $whereidcat ' AND a.catid ='$categoryid ;

          $query     'SELECT a.fulltext, a.id, a.title, a.alias, a.title_alias, a.introtext, a.state, a.catid, a.created, a.created_by, a.created_by_alias, a.modified, a.modified_by, a.publish_up, a.publish_down, a.attribs, a.metadata, a.metakey, a.metadesc, a.access, a.hits, a.featured, LENGTH(a.fulltext) AS readmore, c.title AS category_title, c.path AS category_route, c.access AS category_access, c.alias AS category_alias, parent.title as parent_title, parent.id as parent_id, parent.path as parent_route, parent.alias as parent_alias,ROUND( v.rating_sum / v.rating_count ) AS rating, v.rating_count as rating_count,c.published, CASE WHEN badcats.id is null THEN c.published ELSE 0 END AS parents_published'
          .'  FROM sud_content AS a'
          .'  LEFT JOIN sud_content_frontpage AS fp ON fp.content_id = a.id'
          .'  LEFT JOIN sud_categories AS c  ON c.id = a.catid'
          .'  LEFT JOIN sud_users AS ua  ON ua.id = a.created_by'
          .'  LEFT JOIN sud_users AS uam ON uam.id = a.modified_by'
          .'  LEFT JOIN sud_contact_details AS contact on contact.user_id = a.created_by'
          .'  LEFT JOIN sud_categories as parent ON parent.id = c.parent_id'
          .'  LEFT JOIN sud_content_rating AS v ON a.id = v.content_id'
          .'  LEFT'
          .'  OUTER JOIN (SELECT cat.id as id FROM sud_categories AS cat JOIN sud_categories AS parent ON cat.lft BETWEEN parent.lft AND parent.rgt WHERE parent.extension = '.$db->Quote('com_content').' AND parent.published != 1 GROUP BY cat.id ) AS badcats'
          .'  ON badcats.id = c.id'
          .'  WHERE a.access IN (1,1)'
          .'  AND CASE WHEN badcats.id is null THEN a.state ELSE 0 END = 1'
          .   $whereidcat
          .'  AND (a.publish_up = '.$db->Quote($nullDate).' OR a.publish_up <= '.$db->Quote($now).')'
          .'  AND (a.publish_down = '.$db->Quote($nullDate).' OR a.publish_down >= '.$db->Quote($now).')'
          .'  AND a.language in ('.$db->quote(JFactory::getLanguage()->getTag()).','.$db->quote('*').')'
          .'  AND (contact.language in ('.$db->quote(JFactory::getLanguage()->getTag()).','.$db->quote('*').') OR contact.language IS NULL)' 
          .'  GROUP BY a.id'
          .'  ORDER BY a.ordering asc'
          .'  LIMIT 0, 4';

          $db->setQuery($query);
          $items $db->loadObjectList(); 

          Merci pour votre aide

          Commentaire


          • #6
            Re : Comment récuperer l'id de la category sans passer par la fonction $model-&gt;setSta

            salut
            je pense que tu dois passer ton array en integer :
            Code:
            $catid = $params->get('catid', array());
            $catid = (int)$catid[0];
            je n'ai pas testé mais il suffit de faire un var_dump($catid); pour savoir ce que ça te renvoit comme valeur
            Vive Joomla! http://www.joomlack.fr Tutoriels et extensions pour Joomla!. Livre création de template Joomla de plus de 200 pages.
            http://www.template-creator.com Outil de création de templates
            Module Maximenu CK - Megamenu, multicolonnes, chargement de module, description de lien, deroulement animé - Compatible Virtuemart, Hikashop

            Commentaire


            • #7
              Re: Re : Comment récuperer l'id de la category sans passer par la fonction $model-&gt;se

              Merci pour ta réponse.
              Hélas, ça ne fonctionne toujours pas avec ce que tu proposes, ça renvoie 0 comme valeur.

              Notice: Undefined offset: 0

              Commentaire


              • #8
                Re : Comment récuperer l'id de la category sans passer par la fonction $model-&gt;setSta

                tu es sur que ta variable 'catid' renvoit une valeur avec la fonction params ? il ne semble pas
                Vive Joomla! http://www.joomlack.fr Tutoriels et extensions pour Joomla!. Livre création de template Joomla de plus de 200 pages.
                http://www.template-creator.com Outil de création de templates
                Module Maximenu CK - Megamenu, multicolonnes, chargement de module, description de lien, deroulement animé - Compatible Virtuemart, Hikashop

                Commentaire


                • #9
                  Re: Re : Comment récuperer l'id de la category sans passer par la fonction $model-&gt;se

                  oui ça semble en effet être le problème, la fonction params ne renvoie rien si l'on utilise pas la fonction setState. D'où ma question de départ, comment récupérer la variable sans passer par la fonction setState ?

                  Commentaire


                  • #10
                    Re : Comment récuperer l'id de la category sans passer par la fonction $model-&gt;setSta

                    Envoyé par vlester Voir le message
                    La fonction joomla appelle la catégorie comme ça:
                    $model->setState('filter.category_id', $params->get('catid', array()));

                    Mais comment la récupérer sous forme de variable pour l'insérer dans ma requête ?
                    Comme ça :
                    Code PHP:
                    $categoryId $model->getState('filter.category_id'); 


                    En général en OOP lorsque tu as un setter pour modifier la valeur d'une propriété, il y a souvent (mais systématiquement) un getter pour la récupérer...
                    Dernière édition par Fly06_Fr à 30/10/2011, 08h28
                    Fly06_Fr (http://www.fly06.fr/)
                    -------------------------------------------
                    Classe MooTools pour Recherche Asynchrone (Ajax) : http://forum.joomla.fr/showthread.ph...one-%28Ajax%29

                    Commentaire


                    • #11
                      Re: Re : Comment récuperer l'id de la category sans passer par la fonction $model-&gt;se

                      Toujours pas :-( , j'ai maintenant cette erreur là :
                      Fatal error: Using $this when not in object context

                      Commentaire


                      • #12
                        Re : Re: Re : Comment récuperer l'id de la category sans passer par la fonction $mode

                        Envoyé par vlester Voir le message
                        Fatal error: Using $this when not in object context
                        Remplace $this par $model
                        Fly06_Fr (http://www.fly06.fr/)
                        -------------------------------------------
                        Classe MooTools pour Recherche Asynchrone (Ajax) : http://forum.joomla.fr/showthread.ph...one-%28Ajax%29

                        Commentaire


                        • #13
                          Re: Re : Re: Re : Comment récuperer l'id de la category sans passer par la fonction $

                          Merci Fly06_Fr, je n'ai plus d'erreur et ça me retourne enfin une valeur mais pas la bonne... ça me renvoie la valeur 1 systématiquement quelque sot la catégorie sélectionnée.

                          Commentaire


                          • #14
                            Re : Re: Re : Re: Re : Comment récuperer l'id de la category sans passer par la fonct

                            Je viens de tester le module, ça marche parfaitement.

                            Code PHP:
                            // Code d'origine (helper.php)
                               
                            $source trim($params->get'source''category' ) );
                                if( 
                            $source == 'category' ){
                                  
                            // Category filter
                                  
                            $model->setState('filter.category_id'$params->get('category', array()));
                                }else{
                                  
                            $ids preg_split('/,/',$params->get'article_ids','')); 
                                  
                            $tmp = array();
                                  foreach( 
                            $ids as $id ){
                                    
                            $tmp[] = (int) trim($id);
                                  }
                                  
                            $model->setState('filter.article_id'$tmp);  
                                }

                            // Ajout Fly06
                            var_dump($model->getState('filter.category_id'));
                            die(); 
                            Affiche un array contenant les ids des catégories sélectionnées dans l'admin du module :

                            array
                            0 => string '19' (length=2)
                            1 => string '20' (length=2)
                            2 => string '21' (length=2)
                            3 => string '22' (length=2)
                            4 => string '64' (length=2)
                            5 => string '65' (length=2)
                            Vérifie ta config...
                            Fly06_Fr (http://www.fly06.fr/)
                            -------------------------------------------
                            Classe MooTools pour Recherche Asynchrone (Ajax) : http://forum.joomla.fr/showthread.ph...one-%28Ajax%29

                            Commentaire

                            Annonce

                            Réduire
                            Aucune annonce pour le moment.

                            Partenaire de l'association

                            Réduire

                            Hébergeur Web PlanetHoster
                            Travaille ...
                            X