mod related items

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

  • mod related items

    Salut,
    lefabdu51 a proposé un script en override ici pour le module mod_related_items :


    permettant d'afficher l'image d'intro de l'article et le texte d'intro dans ce module.
    Le script est fonctionnel mais si il n'y a pas d'images dans l'article, la série webkit (chrome/safari) affiche l'emplacement vide.

    Le script en question :
    Code PHP:
    <?php
    /**
     * @package     Joomla.Site
     * @subpackage  mod_articles_latest
     *
     * @copyright   Copyright (C) 2005 - 2016 Open Source Matters, Inc. All rights reserved.
     * @license     GNU General Public License version 2 or later; see LICENSE.txt
     */

    defined('_JEXEC') or die;
    ?>
    <ul class="relateditems<?php echo $moduleclass_sfx?>">
    <?php foreach ($list as $item) : 
    // on recuperes l'id de l'élément devant être affiché
    $value $item->id;
    // on crées la requête
    $db JFactory::getDbo();
    $query $db->getQuery(true);
    // la requete sous la forme Joomla
    // remplacer ys5ta par le prefixe des tables dans l'installation
    $query->select('introtext,images');
    $query->from($db->quoteName('#__content'));
    $query->where($db->quoteName('id')." = ".$db->quote($value));
    // on remet la requete à 0 et on charges le resultat de la requete dans un tableau associatif
    //si setQuery est inexistant, alors seul le dernier résultat est pris en compte et est affiché pour chaque boucle
    // La boucle est passée sans réexcuter la requete.
    $db->setQuery($query);
    $data=$db->loadAssoc();
    // Les propriétés des images sont au format json. Donc il faut décoder celles ci pour s'en servir dans php.
    $var json_decode($data['images']);
      
    ?>
        <li itemscope itemtype="https://schema.org/Article">
            <a href="<?php echo $item->route?>" itemprop="url">
                

            
                <span itemprop="name">
                    <?php echo $item->title?>
                </span></a>
                <!-- on affiches 'limage et son texte alternatif -->
                <img src="<?php echo $var->{'image_intro'};?>"  alt="<?php echo $var->{'image_intro_alt'}; ?>" /> 
                <!-- on affiches le texte d'introduction de l'article associé -->
                <?php echo $data['introtext']; ?> 
    <span itemprop="date"><?php if ($showDate) echo JHtml::_('date'$item->createdJText::_('DATE_FORMAT_LC3')) . " - "?>    </span>        
        </li>
    <?php endforeach; ?>
    </ul>
    Un petit coup de main ?
    Dernière édition par ghazal à 19/09/2016, 11h37
    Un message d’erreur sur votre site Joomla ... ayez le reflexe de consulter lla base de connaissance : https://kb.joomla.fr

    Ce forum, vous l'aimez ? il vous a sauvé la vie ? Vous y apprenez chaque jour ? Alors adhérez à l'AFUJ https://www.joomla.fr/association/adherer

  • #2
    Re : mod related items

    Hello

    A l'oeil (je n'ai rien testé) : perso, je fais toujours un test conditionnel avant d'envoyer, ici, un <ul> et <li>

    En clair : dans le code, il y a un
    Code PHP:
    $data=$db->loadAssoc(); 
    Il faudrait, selon moi, faire un

    Code PHP:
    if (count($data)>0) { 
    et mettre le contenu de traitement dans ce if. C'est là qu'il faudrait trouver le echo pour <ul> et les <li> (dans le foreach).

    Ainsi, si le tableau est vide, le code php ne renvoie pas <ul xxxxxxx></ul> comme c'est le cas pour l'instant.
    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


    • #3
      Re : mod related items

      Hello, hello,
      merci de ta réponse rapide.

      Comme je suis très ras des paquerettes, je ne comprends pas pourquoi tu veux virer <ul> et <li>.
      A mon avis, le pb se situe au niveau de la présence de :
      <img alt="" src="/path_vers_image/">
      Pour chrome/safari, si la balise img existe, l'emplacement est conservé et s'affiche avec une fausse image.

      Cliquez sur l'image pour l'afficher en taille normale

Nom : mod_related_items.jpg 
Affichages : 1 
Taille : 40,4 Ko 
ID : 1805802

      En fait, je verrais une boucle au niveau de :
      si l'article est associé à une image d'intro, OK
      si l'article n'a pas d'image d'intro, on vire la balise <img>

      C'est là que je coince.
      Un message d’erreur sur votre site Joomla ... ayez le reflexe de consulter lla base de connaissance : https://kb.joomla.fr

      Ce forum, vous l'aimez ? il vous a sauvé la vie ? Vous y apprenez chaque jour ? Alors adhérez à l'AFUJ https://www.joomla.fr/association/adherer

      Commentaire


      • #4
        Re : mod related items

        Salut très chère

        Voici une proposition de ce que j'ai pû comprendre à la lecture du code / ta remarque.

        Note que je n'ai rien testé; juste adapté avec Notepad. N'hésite pas si quelque chose n'est pas clair.


        Lien temporaire vers le source : http://pastebin.com/DBHPSv7j
        Dernière édition par cavo789 à 19/09/2016, 13h03
        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 : mod related items

          Code PHP:
          <?php 
          /** 
           * @package     Joomla.Site 
           * @subpackage  mod_articles_latest 
           * 
           * @copyright   Copyright (C) 2005 - 2016 Open Source Matters, Inc. All rights reserved. 
           * @license     GNU General Public License version 2 or later; see LICENSE.txt 
           */ 
             
          defined('_JEXEC') or die; 
             
             
          $showDate=TRUE;
             
             
          // Seulement si on a quelque chose à afficher   
             
             
          if (count($list)>0) {
             
                
          $html='<ul class="relateditems$moduleclass_sfx">';
              
                foreach (
          $list as $item) {
                
                   
          // Recupère l'id de l'élément devant être affiché 
                   
          $value $item->id

                   
          // Création de la requête 
                   
          $db JFactory::getDbo(); 
                   
          $query $db->getQuery(true); 
                   
          $query->select('introtext,images'); 
                   
          $query->from($db->quoteName('#__content')); 
                   
          $query->where($db->quoteName('id')." = ".$db->quote($value)); 

                   
          // Charge le resultat de la requête dans un tableau associatif 
                   
          $db->setQuery($query); 

                   
          $data=$db->loadAssoc(); 
                   
                   if (
          count($data)>0) {
                   
                      
          $img='';
                      
                      if(!
          $data['images']=='') {
                      
                         
          // Les propriétés des images sont au format json. Il faut décoder celles ci pour s'en servir dans php. 
                         
          $var json_decode($data['images']); 
                         
                         if (
          json_last_error()==JSON_ERROR_NONE) {
                         
                            
          // Retrouve l'image et son texte alternatif
                            
          $img='<img src="'.$var->{'image_intro'}.'"  alt="'.$var->{'image_intro_alt'}.'"/>';
                            
                         }
                         
                      } 
          // if(!$data['images']=='')
                      
                      // Ajoute la puce
                      
          $html.='<li itemscope itemtype="https://schema.org/Article">'.
                         
          '<a href="'.$item->route.'" itemprop="url"><span itemprop="name">echo $item->title;</span></a>'.
                         
          $img.                            // Image et son texte alternatif
                         
          $data['introtext'].              // Texte d'introduction de l'article associé 
                         
          '<span itemprop="date">'.($showDate?JHtml::_('date'$item->createdJText::_('DATE_FORMAT_LC3')).' - ':'').'</span>'.
                         
          '</li>';
                         
                   } 
          // if (count($data)>0)
                   
                
          // foreach
                
                
          $html.='</ul>';
                
             } 
          // if (count($list)>0)      
             
          ?>
          Joomla User Group (JUG) Lille : https://www.facebook.com/groups/JUGLille/

          Commentaire


          • #6
            Re : mod related items

            Ca marche pô tel que.
            Il n'y a plus que le h3 du module qui s'affiche.

            ul et li virés. Ca, ca marche, lol.

            Je continue à regarder.
            En tous les cas, merci de l'aide.
            Un message d’erreur sur votre site Joomla ... ayez le reflexe de consulter lla base de connaissance : https://kb.joomla.fr

            Ce forum, vous l'aimez ? il vous a sauvé la vie ? Vous y apprenez chaque jour ? Alors adhérez à l'AFUJ https://www.joomla.fr/association/adherer

            Commentaire


            • #7
              Re : mod related items

              Au début du code, il y a "if (count($list)>0) { " ==> est-ce que cette variable $list contient quelque chose ?

              Ni dans mon code ni dans le tien, je ne vois l'initialisation de cette variable; je présume que lorsqu'on appele ton php cette variable est initialisé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


              • #8
                Re : mod related items

                Impossible d'insérer du code dans la discussion, le captcha de google a des hoquets.

                Mais pas de :
                if (count($list)>0)
                dans le code d'origine.
                Un message d’erreur sur votre site Joomla ... ayez le reflexe de consulter lla base de connaissance : https://kb.joomla.fr

                Ce forum, vous l'aimez ? il vous a sauvé la vie ? Vous y apprenez chaque jour ? Alors adhérez à l'AFUJ https://www.joomla.fr/association/adherer

                Commentaire


                • #9
                  Re : mod related items

                  Vire mon count(), cela semble t'égarer ;-)

                  Non, il n'était pas présent dans ton code d'origine. Ton code présume que cette variable est complétée. En ligne 4, tu as

                  Code:
                  <?php foreach ($list as $item))
                  J'ai juste été plus prudent en ajoutant un test conditionnel.
                  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


                  • #10
                    Re : mod related items

                    Comme le PHP et moi, ça fait souvent 2, le recours au JS m'est indispensable.
                    Surtout dans ce cas, car ce qui me cassait les pieds était de devoir régler un pb connu de safari (un "quirk") avec du PHP.

                    Avec la vieille technique de l'image de remplacement, un blank.gif de 1x1px (une technique qui ramène au moins 10 ans en arrière) et un peu de JS, hop, pb réglé :
                    <img onerror="this.src='urldusite/images/blank.gif'" src="<?php echo $var->{'image_intro'}; ?>" alt="<?php echo $var->{'image_intro_alt'}; ?>" />
                    PS : j'ai repris le script original, posté au début de cette discussion.
                    Dernière édition par ghazal à 21/09/2016, 12h00
                    Un message d’erreur sur votre site Joomla ... ayez le reflexe de consulter lla base de connaissance : https://kb.joomla.fr

                    Ce forum, vous l'aimez ? il vous a sauvé la vie ? Vous y apprenez chaque jour ? Alors adhérez à l'AFUJ https://www.joomla.fr/association/adherer

                    Commentaire

                    Annonce

                    Réduire
                    Aucune annonce pour le moment.

                    Partenaire de l'association

                    Réduire

                    Hébergeur Web PlanetHoster
                    Travaille ...
                    X