[résolu] #art_chapo ajouter un lien lire la suite

cpalocpalo Member
août 2023 modifié dans Entraide

Pas de souci avec

<?php $plxShow->artChapo("Continuer la lecture..."); ?>

Mais je voudrai faire apparaitre ce même lien lorsque j'utilise

$plxShow->lastArtList (
    '<li class="#art_status">
        <a href="#art_url" title="#art_title">#art_title</a>
        <img src="#img_url" title="#img_title"/>
        <div>#art_chapo</div>
    </li>', 
1 , $id_cat);

Réponses

  • août 2023 modifié

    Bonjour,
    il te faut alors l'ajouter au format:

    $plxShow->lastArtList (
        '<li class="#art_status">
            <a href="#art_url" title="#art_title">#art_title</a>
            <img src="#img_url" title="#img_title"/>
            <div>#art_chapo
            <p class="more"><a href="#art_url">'.L_ARTCHAPO.'</a></p></div>
        </li>', 
    1 , $id_cat);
    

    Remplacer la constante '.L_ARTCHAPO.' par le texte que tu veut si le format lire la suite de titre de mon article ne te convient pas
    cdt


    Cordialement,
    gcyrillus , simple membre du forum et utilisateur de pluxml

    Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
    Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci

  • cpalocpalo Member

    Merci
    Effectivement j'avais fait ça il y a très longtemps.. cette constante est à modifier dans core.php. Et donc à chaque mise à jour cette modif est supprimée. D'où mon oubli.
    A-priori rajouter cette constante dans le dossier fr dans le dossier lang du theme n'est pas prise en compte.

  • Aprés test,
    en l'affichant via echo $plxShow->getLang('L_ARTCHAPO'); ou $plxShow->lang('L_ARTCHAPO'); cela fonctionne pour moi. La modif effectué depuis le fichier de langues du thème fonctionne.

    l'ajout d'une nouvelle constante dans le thème fonctionne aussi.
    Une typo peut-être?


    Cordialement,
    gcyrillus , simple membre du forum et utilisateur de pluxml

    Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
    Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci

  • cpalocpalo Member

    Super! C'est ok.
    Petite question : j'ai choisi $plxShow->lang('L_ARTCHAPO');
    Qu'est-ce qui ferait qu'il faudrait mieux utiliser echo $plxShow->getLang('L_ARTCHAPO'); mis à part l'utilisation de echo dans le code?

  • août 2023 modifié

    $plxShow->getLang() renvoi la valeur de la variable
    $plxShow->lang() renvoi en echo la valeur de la variable (celle à utilisé dans ton cas)

    Pour un simple affichage directe, lang conviendras, si tu dois seulement récupérer la variable pour la traiter ou la tester dans un script, alors c'est getLang qu'il faut utiliser .
    Le test etait un test sur les deux approches, ne sachant pas celle que tu utilisais ni dans quel contexte ;)

    detail des deux fonctions

        /**
         * Méthode qui affiche une clé de traduction appelée à partir du thème
         *
         * @param key    clé de traduction à afficher
         * @return    string
         * @scope    global
         * @author    Stephane F
         **/
        public function lang($key = '')
        {
            if (isset($this->lang[$key]))
                echo $this->lang[$key];
            else
                echo $key;
        }
    
        /**
         * Méthode qui renvoie une clé de traduction appelée à partir du thème
         *
         * @param key    clé de traduction à afficher
         * @return    string
         * @scope    global
         * @author    Stephane F
         **/
        public function getLang($key = '')
        {
            if (isset($this->lang[$key]))
                return $this->lang[$key];
            else
                return $key;
        }
    

    cdt


    Cordialement,
    gcyrillus , simple membre du forum et utilisateur de pluxml

    Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
    Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci

  • cpalocpalo Member
    août 2023 modifié

    Merci pour cette explication.
    Petit bug que je viens de voir #art_chapo ne referme pas la balise p

    <div>
         <p>
          Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labo    
    </div>
    

    Est-ce cette ligne est correcte car si le bon contenu deL_ARTCHAPO est bien affiché, il ne l'est pas au bon endroit (intitulé du lien more) mais avant la classe fzeatured-content

    <div class="featured-content">
         #art_chapo
        <span class="more"><a href="#art_url">'.$plxShow->lang('L_ARTCHAPO').'</a></span>
    </div>
    
  • août 2023 modifié

    Dans la fonction lastArtList () la chaine #art_chapo extrait par défaut les 100 premiers caractères comme un simple texte.
    pour modifié cette valeur et avoir tout le contenu du chapo tu peut modifier cette valeur en accollant à art_chapoune autre valeur entre parenthése plus importante. Par exemple : #art_chapo(3200) ce qui est plus que suffisant pour le premier article de l'install.

    regex qui regarde si il y a une valeur à appliquer, sinon c'est 100

                $pattern = '~#art_content\((\d+)\)~';
                if(preg_match($pattern, $format, $matches)) {
                    $lengthContent = $matches[1];
                    $format = preg_replace($pattern, '#art_content', $format);
                } else {
                    $lengthContent = '100';
                }
    

    et plus loin cette valeur est appliquée au formatage:

    ...
    '#art_content'      => plxUtils::truncate($art['content'], $lengthContent, $ending, true, true),
    ...
    

    cdt

    Ceci dit, la fonction truncate() dans plx.utils.php preserve en principe le html en refermant les paragraphes. (identique à priori dans la 5.8.9 et 5.8.10)

    Utilises tu un plugin qui modifie ou complète la fonction lastArtList() ?


    Cordialement,
    gcyrillus , simple membre du forum et utilisateur de pluxml

    Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
    Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci

  • cpalocpalo Member

    Bonjour,
    Je n'utilise aucun plugin qui modifie la fonction.
    Avec #art_chapo(5000) la balise fermante p est bien présente.
    Si je remplace

    <span class="more"><a href="#art_url">'.$plxShow->lang('L_ARTCHAPO').'</a></span>
    

    par

    <span class="more"><a href="#art_url">'.'Lire la suite'.'</a></span>
    

    alors l'affichage est correct.
    Cordialement

  • Effectivement, il semble y avoir un bug et la balise fermante semble perdue .

    Premiere option sans toucher aux scripts de PluXml (sans contrôle) : ajouter la balise manquante dans l'appel de fonction en dernier paramêtre.(pour l'extraction de la traduction, c'est plutôt getLang() :) )

    <?php
    $plxShow->lastArtList (
        '<div class="featured-content">
         #art_chapo
        <span class="more"><a href="#art_url">'.$plxShow->getLang('L_ARTCHAPO').'</a></span>
    </div>', 
    1 ,  $id_cat, '</p>');
    ?>
    

    Du coup la balise fermante sera systématiquement ajoutée!

    autre option provisoire , qui à priori corrigerait le bug ( @bazooka est ce un bug?)
    Modifié la fonction truncate dans le fichier class.plx.utils.php en remplaçant la ligne 1292
    return $truncate;
    par
    return $truncate.$line_matchings[1];

    Je ne suis pas certains d'où vient le défaut: bug ou une erreur d'appel ?
    cdt


    Cordialement,
    gcyrillus , simple membre du forum et utilisateur de pluxml

    Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
    Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci

  • cpalocpalo Member

    Super.
    Je vais ouvir un autre fil, mais je bute sur la modification d'un template de menus de catégories que j'avais et que je veux adapter en affichant le dernier article (le code utilisé dans ce fil)

    <div class="recent-posts-content">
        <ul class="categories-list_grid-container">
            <?php $menu = array('001', '002', '004'); // lister ici les catégories à afficher. ?>
                <?php foreach($menu as $id_cat): ?>
                    <?php
                         $plxShow->catList('',
                                    '<li id="menu_#cat_id" class="#cat_status">
                                        <a href="#cat_url">#cat_name</a>
                                        <ul>
                                            Article le plus récent                                      
                                        </ul>
                                        <span>
                                            <a href="#cat_url" title="Voir tous les articles de la catégorie #cat_name">Voir tous les articles</a>
                                        </span>
                                    </li>',
                        $id_cat);
                    ?>
                <?php endforeach; ?>            
            </ul>
    </div>
    

    Article le plus récent serait remplacé par le code de ce fil. J'ai essayé differents codes, mais je dois mélanger dans les balises php et htm pour inserer le $plxShow->lastArtList (

  • août 2023 modifié

    @cpalo
    Tu ne peut pas imbriquer ces deux fonctions.
    Ce que tu peut faire c'est récupérer ce que te renvoi la fonction lastArtList(); dans une variable et injecter celle-ci dans la fonction catList();

    Exemple possible:

     <div class="recent-posts-content">
        <ul class="categories-list_grid-container">
            <?php $menu = array('001', '002', '004'); // lister ici les catégories à afficher. ?>
                <?php foreach($menu as $id_cat): ?>
                <?php
                       # on stocke l'affichage et on lance la fonction lastArtList()
                        ob_start(); 
                         $plxShow->lastArtList (
                            '<li><div class="featured-content">
                             #art_chapo
                            <span class="more"><a href="#art_url">'.L_ARTCHAPO.'</a></span>
                        </div></li>', 
                        1 , $id_cat);
                # on recupere l'affichage stocké dans une variable
                         $listArts = ob_get_clean();// ce que tu veut inserer
    
                          # reste à insérer la variable ou l'on veut qu'elle réapparaisse.
                         $plxShow->catList('',
                                    '<li id="menu_#cat_id" class="#cat_status">
                                        <a href="#cat_url">#cat_name</a>
                                        <ul>
                                            '. $listArts.'                                      
                                        </ul>
                                        <span>
                                            <a href="#cat_url" title="Voir tous les articles de la catégorie #cat_name">Voir tous les articles</a>
                                        </span>
                                    </li>',
                        $id_cat);
                    ?>
                <?php endforeach; ?>            
            </ul>
    </div>
    

    cdt


    Cordialement,
    gcyrillus , simple membre du forum et utilisateur de pluxml

    Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
    Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci

  • cpalocpalo Member
    août 2023 modifié

    Cela fonctionne...; il me reste à mettre à jour le css pour que cela soit présentable avant de le mettre en ligne et le partager.
    Ouf!!
    Le dernier détail serait de remplacer le span "Voir tous les articles" par un script qui ne l'affiche que si il y a plus d'articles dans la catégorie que d'articles affichés.
    Le script fonctionne mais comment l'inserer? comme dans ton code avec ob_get_clean() ?
    J'avais utilisé tous ces scripts pour afficher des menus personnalisés dans la sidebar.

    <?php
    $nb_item = 1; // nombre d'articles maxi affichés dans le menu
    $nb_ArtCat = $plxShow->plxMotor->nbArticles('(?:[0-9]|home|,)*(?:'.$id_cat.')(?:[0-9]|home|,)*', '[0-9]{3}', '', 'before'); 
    if ($nb_item < $nb_ArtCat) { // si le nombre d'articles de la catégorie est supérieur à $nb_item, on affiche un lien "Voir tous les articles"
    $plxShow->catList ('','<span id="menu_#cat_id"><a href="#cat_url" title="Voir tous les articles de la cat&eacute;gorie #cat_name">Voir tous les articles</a></span>',$id_cat);
    } else {}
    ?>
    
  • septembre 2023 modifié

    Je ne saisi pas trop ton extrait de code.
    cependant, dans la boucle sur les catégories, tu peut extraire le nombre d'article. Il suffirait de tester cette valeur pour modifier une autre variable.
    Voici une idée de base (pour un thème par défaut) edit maj du script

        <!-- script affichant liens et résumés des articles de chaque catégorie dans le menu -->
        <h3>
            <?php $plxShow->lang('CATEGORIES'); ?>
        </h3> 
        <ul class="cat-list unstyled-list">
            <?php 
                #configuration filtres
                $catFilter = array();                   // lister ici les catégories à afficher par leur identifiant . exemple  array('003', '002', '004');
                $nbArts ='1';                           // indiquez ici le nombre d'article max à afficher
                $length ='100';                         // indiquez ici le nombre de lettre à afficher
                $more=$plxShow->getLang('L_ARTCHAPO');  // recupere la traduction du théme
    
                #initialisation script 
                if(count($catFilter)>0) {
                    foreach($catFilter as $cat => $v){
                        $mycats[]=$cat;
                    }       
                }
                else { // ou parcourez toutes les catégories
                    $mycats = $plxShow->plxMotor->aCats;
                }
    
                foreach($mycats as $id_cat => $ar) {
                    # raz variable 
                    $all='';
                    $listArts ='';
    
                    # à t-on plus d'article dans la catégorie que $nbArts ? is Oui on réaffiche un lien vers la categories
                    if($ar['articles'] > $nbArts) $all ='<p><a href="#cat_url" title="Voir tous les articles de la catégorie #cat_name">Voir tous les articles</a></p>';
    
                    #as t-on des articles a affiché dans cette catégoire?
                    if($ar["articles"] !='0') {
                        # on stocke l'affichage et on lance la fonction lastArtList()
                        ob_start(); 
                        $listArts = $plxShow->lastArtList (PHP_EOL.'        <li>#art_chapo('.$length.')<p class="more"><a href="#art_url">'.$more.'</a></p></li>'.PHP_EOL, intval($nbArts) , intval($id_cat));
    
                        # on recupere l'affichage stocké dans une variable  
                        $listArts = ob_get_clean();// ce que tu veut inserer
                    }
                    if($listArts!='') $listArts = '
                            <ul class="lastart-list">
                            '.$listArts.'
                            </ul>';
                    # reste à insérer la variable ou l'on veut qu'elle réapparaisse dans l'arborescence des catégories.
                    $plxShow->catList('','<li id="menu_#cat_id"><a href="#cat_url">#cat_name</a>'. $listArts. $all.'</li>'.PHP_EOL,intval($id_cat));
                }
            ?>            
            </ul>
    

    les chaine Voir tous les articles de la catégorie et Voir tous les articles peuvent aussi être extraite du fichier langue du thème si tu les configures.
    (edit re-maj du script avec raz des variable dans la boucle)

    Cdt


    Cordialement,
    gcyrillus , simple membre du forum et utilisateur de pluxml

    Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
    Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci

Connectez-vous ou Inscrivez-vous pour répondre.