A propos de countModules()

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

  • #16
    Re : A propos de countModules()

    Tu peux remplacer la ligne 491 par:
    Code PHP:
    $query $dbo->getQuery(true); 
    Je posterai un patch correct sur la forge. Tu as raison, il y a eu régression du code.
    Dernière édition par jisse03 à 05/07/2012, 17h35
    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


    • #17
      Re : A propos de countModules()

      salut
      tout ça m'intéresse... je lis avec attention la solution qui sera retenue
      Ced
      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


      • #18
        Re : A propos de countModules()

        PS : il serait intéressant de voir de quelle manière on pourrait overrider la fonction countmodule en php pour y ajouter des tests de contenu de module...
        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


        • #19
          Re : A propos de countModules()

          Oui j'avais testé cette ligne de code quand je l'avais vu sur le patch mais ça ne fonctionne pas et me sort cette erreur :
          Code PHP:
          Warningmysql_fetch_row() expects parameter 1 to be resourceboolean given in /libraries/joomla/database/database/mysql.php on line 683
          Warning
          mysql_free_result() expects parameter 1 to be resourceboolean given in /libraries/joomla/database/database/mysql.php on line 726 
          www.weblogin.fr - Création, Référencement et Design de sites Internet.

          Commentaire


          • #20
            Re : A propos de countModules()

            Envoyé par ced1870 Voir le message
            PS : il serait intéressant de voir de quelle manière on pourrait overrider la fonction countmodule en php pour y ajouter des tests de contenu de module...
            Pour le test de contenu regarde mon post #13 ici même. Mais je ne sais pas si c'est assez propre. En tout cas ça fonctionne.

            Comme je on ne peut pas overrider ce type de fonction avec un template, je pensais la placer dans un helper du template comme je dis dans le post plus haut mais je ne sais pas si ça ce fait de faire un helper dans un template.
            www.weblogin.fr - Création, Référencement et Design de sites Internet.

            Commentaire


            • #21
              Re : A propos de countModules()

              Envoyé par Abasedebasse Voir le message
              Oui j'avais testé cette ligne de code quand je l'avais vu sur le patch mais ça ne fonctionne pas et me sort cette erreur :
              Code PHP:
              Warningmysql_fetch_row() expects parameter 1 to be resourceboolean given in /libraries/joomla/database/database/mysql.php on line 683
              Warning
              mysql_free_result() expects parameter 1 to be resourceboolean given in /libraries/joomla/database/database/mysql.php on line 726 
              Ce n'est pas une erreur mais un warning

              Il y a en fait une modif à faire, je patche ça sur une machine d edev et je soumets le patch sur joomlacode
              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


              • #22
                Re : A propos de countModules()

                Envoyé par Abasedebasse Voir le message
                Pour le test de contenu regarde mon post #13 ici même. Mais je ne sais pas si c'est assez propre. En tout cas ça fonctionne.

                Comme je on ne peut pas overrider ce type de fonction avec un template, je pensais la placer dans un helper du template comme je dis dans le post plus haut mais je ne sais pas si ça ce fait de faire un helper dans un template.
                oui j'ai vu ton post 13, je ne sais pas si c'est la meilleure solution mais si ça marche c'est déjà pas mal !
                dans mon idée je pensais à une méthode que l'on pourrait utiliser ailleurs que seulement dans le template, dans un module par exemple pour faire un countmodule-1 s'il n'a pas de contenu.
                Maintenant si c'est pour le mettre dans ton template alors oui (mais il faut remplacer le countmodule standard par ce code)
                Ced
                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


                • #23
                  Re : A propos de countModules()

                  Pour le problème countMenuChildren, voilà le patch qui fonctionne:
                  Mode d'emploi, dans /libraries/joomla/document/html/html.php, en ligne 479, remplacer toute la fonction countMenuChildren par celle là
                  Code PHP:
                      public function countMenuChildren()
                      {
                          static 
                  $children;

                          if (!isset(
                  $children))
                          {
                              
                  $dbo JFactory::getDbo();
                              
                  $app JFactory::getApplication();
                              
                  $menu $app->getMenu();
                              
                  $active $menu->getActive();
                              if (
                  $active)
                              {
                                  
                  $query 'SELECT COUNT (*) FROM #__menu WHERE parent_id= ' $active->id .
                                      
                  ' AND published = 1' ;
                                  
                  $dbo->setQuery$query );
                                  
                  $children $dbo->loadResult();
                              }
                              else
                              {
                                  
                  $children 0;
                              }
                          }

                          return 
                  $children;
                      } 
                  et maintenant, ça renvoie le bon résultat.

                  Et donc, le code suivant dans le template:
                  Code PHP:
                  <?php $mydoc JFacrory::getDocument() ;
                  $children $mydoc->countMenuChildren() ; *

                  if ( 
                  $this->countModules'left' ) && $children  ): ?> 
                      <div id="left"> 
                          <jdoc:include type="modules" name="left"   /> 
                      </div> 
                  <?php endif; ?>
                  devrait passer correctement.

                  [EDIT]:Ce patch sera soumis sur joomlacode pour inclusion, il s'agit d'un vrai bug qui a été découvert
                  Dernière édition par jisse03 à 06/07/2012, 07h58
                  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


                  • #24
                    Re : A propos de countModules()

                    Cool pour le patch si rapide ! et content d'avoir trouvé avec vous un bug réparable ;-)

                    Envoyé par ced1870 Voir le message
                    oui j'ai vu ton post 13, je ne sais pas si c'est la meilleure solution mais si ça marche c'est déjà pas mal !
                    dans mon idée je pensais à une méthode que l'on pourrait utiliser ailleurs que seulement dans le template, dans un module par exemple pour faire un countmodule-1 s'il n'a pas de contenu.
                    Maintenant si c'est pour le mettre dans ton template alors oui (mais il faut remplacer le countmodule standard par ce code)
                    Ced
                    Je pense que ca reste une bonne solution de vérifier avec le Buffer mais en fait il y a pas trop d'autre solution que de la parcourir sinon c'est impossible pour le système de le savoir car le render n'est pas encore lancé. Après dans le chrome pour ne pas afficher un module vide il suffit de faire :
                    Code PHP:
                    if (!empty ($module->content)) {.......} 
                    www.weblogin.fr - Création, Référencement et Design de sites Internet.

                    Commentaire


                    • #25
                      Re : A propos de countModules()

                      Envoyé par jisse03 Voir le message
                      Pour le problème countMenuChildren, voilà le patch qui fonctionne:
                      Mode d'emploi, dans /libraries/joomla/document/html/html.php, en ligne 479, remplacer toute la fonction countMenuChildren par celle là
                      Code PHP:
                          public function countMenuChildren()
                          {
                              static 
                      $children;

                              if (!isset(
                      $children))
                              {
                                  
                      $dbo JFactory::getDbo();
                                  
                      $app JFactory::getApplication();
                                  
                      $menu $app->getMenu();
                                  
                      $active $menu->getActive();
                                  if (
                      $active)
                                  {
                                      
                      $query 'COUNT (*) FROM #__menu WHERE parent_id= ' $active->id) .    <=== ICI
                                          
                      ' AND published = 1' ;
                                      
                      $dbo->setQuery$query );
                                      
                      $children $dbo->loadResult();
                                  }
                                  else
                                  {
                                      
                      $children 0;
                                  }
                              }

                              return 
                      $children;
                          } 
                      et maintenant, ça renvoie le bon résultat.

                      Et donc, le code suivant dans le template:
                      Code PHP:
                      <?php $mydoc JFacrory::getDocument() ;
                      $children $mydoc->countMenuChildren() ; *

                      if ( 
                      $this->countModules'left' ) && $children  ): ?> 
                          <div id="left"> 
                              <jdoc:include type="modules" name="left"   /> 
                          </div> 
                      <?php endif; ?>
                      devrait passer correctement.

                      [EDIT]:Ce patch sera soumis sur joomlacode pour inclusion, il s'agit d'un vrai bug qui a été découvert
                      Par contre fait attention a ton code tu as une parenthèse fermante sans l'ouvrante à la ligne ou j'ai mis la flèche comme ça (voir au dessus) : <=== ICI

                      Et aussi ne pas oublier le SELECT devant le COUNT(*) sinon ca ne retournera rien ;-)
                      Dernière édition par Mushr00m à 05/07/2012, 23h31
                      www.weblogin.fr - Création, Référencement et Design de sites Internet.

                      Commentaire


                      • #26
                        Re : A propos de countModules()

                        Plutôt que de long discours voici ton code corrigé et testé :
                        Code PHP:
                        public function countMenuChildren() {
                            static 
                        $children;
                            if (!isset(
                        $children)) {
                                
                        $dbo JFactory::getDbo();
                                
                        $app JFactory::getApplication();
                                
                        $menu $app->getMenu();
                                
                        $active $menu->getActive();
                                if (
                        $active) {
                                    
                        $query 'SELECT COUNT(*) FROM #__menu WHERE parent_id = '.$active->id.' AND published = 1';
                                    
                        $dbo->setQuery($query);
                                    
                        $children $dbo->loadResult();
                                }
                                else {
                                    
                        $children 0;
                                }
                            }

                            return 
                        $children;


                        Et le même en gardant l'aspect des commandes SQL de Joomla :
                        Code PHP:
                            public function countMenuChildren() {
                                static 
                        $children;
                                if (!isset(
                        $children)) {
                                    
                        $dbo JFactory::getDbo();
                                    
                        $app JFactory::getApplication();
                                    
                        $menu $app->getMenu();
                                    
                        $active $menu->getActive();
                                    if (
                        $active) {
                                        
                        $query $dbo->getQuery(true); 
                                        
                        $query->select('COUNT(*)');
                                        
                        $query->from('#__menu');
                                        
                        $query->where('parent_id = ' $active->id);
                                        
                        $query->where('published = 1');
                                        
                        $dbo->setQuery($query);
                                        
                        $children $dbo->loadResult();
                                    }
                                    else {
                                        
                        $children 0;
                                    }
                                }

                                return 
                        $children;
                            } 
                        NB pour l'utilisation de countMenuChildren : Attention cependant après des tests si vous avez un menu de niveau 1 qui est un alias d'un menu de niveau 2, alors logiquement cette commande renvoie 0 enfant, car il regarde sur le menu pointé par l'alias...
                        www.weblogin.fr - Création, Référencement et Design de sites Internet.

                        Commentaire


                        • #27
                          Re : A propos de countModules()

                          Envoyé par Abasedebasse Voir le message
                          Par contre fait attention a ton code tu as une parenthèse fermante sans l'ouvrante à la ligne ou j'ai mis la flèche comme ça (voir au dessus) : <=== ICI
                          Désolé, erreur en recopie
                          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


                          • #28
                            Re : A propos de countModules()

                            Envoyé par Abasedebasse Voir le message
                            Et le même en gardant l'aspect des commandes SQL de Joomla :
                            Code PHP:
                                public function countMenuChildren() {
                                    static 
                            $children;
                                    if (!isset(
                            $children)) {
                                        
                            $dbo JFactory::getDbo();
                                        
                            $app JFactory::getApplication();
                                        
                            $menu $app->getMenu();
                                        
                            $active $menu->getActive();
                                        if (
                            $active) {
                                            
                            $query $dbo->getQuery(true); 
                                            
                            $query->select('COUNT(*)');
                                            
                            $query->from('#__menu');
                                            
                            $query->where('parent_id = ' $active->id);
                                            
                            $query->where('published = 1');
                                            
                            $dbo->setQuery($query);
                                            
                            $children $dbo->loadResult();
                                        }
                                        else {
                                            
                            $children 0;
                                        }
                                    }

                                    return 
                            $children;
                                } 
                            Là, $query = $dbo->getQuery(true) retourne un warning mysql, tout au moins avec MySQL 5.5. D'ou le retour à une approche plus classique pour la requête.
                            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


                            • #29
                              Re : A propos de countModules()

                              Oui elle te retourne un warning avec le niveau de rapport d'erreur à "développement" et j'ai du rajouter aussi "$dbo->setQuery($query);" pour que elle fonctionne bien.
                              www.weblogin.fr - Création, Référencement et Design de sites Internet.

                              Commentaire

                              Annonce

                              Réduire
                              Aucune annonce pour le moment.

                              Partenaire de l'association

                              Réduire

                              Hébergeur Web PlanetHoster
                              Travaille ...
                              X