Archive total : proposition modification

je-evrardje-evrard Membres
10 janv. modifié dans Modifications
Bonjour,

Le lien sur l'archive total propose d'aller directement à la racine du site (blog).

Or il se trouve que quand une page statique est défini comme page d'accueil ça devrait aller sur la page de blog.

On a aujourd'hui :
[== PHP ==]
if(strpos($format, '#archives_nbart') !== false) {
				$motifs = array(
					'#archives_id'		=> 'arch-total',
					'#archives_name'	=> L_TOTAL.' ',
					'#archives_year'	=> str_repeat('–', 4),
					'#archives_month'	=> L_TOTAL,
					'#archives_url'		=> $this->plxMotor->urlRewrite(),
					'#archives_nbart'	=> $total,
					'#archives_status'	=> ($active) ? 'active' : 'noactive',
					'#archives_selected'=> ($active) ? 'selected' : ''
				);
				echo str_replace(array_keys($motifs), array_values($motifs), $format);
			}

Proposition de modification :
[== Indéfini ==]
# Total des articles
            if($this->plxMotor->aStats[$this->plxMotor->aConf['homestatic']]['active']) {
                $total_url = $this->plxMotor->urlRewrite('?blog');
            } else {
                $total_url = $this->plxMotor->urlRewrite();
            }
			
			
			if(strpos($format, '#archives_nbart') !== false) {
				$motifs = array(
					'#archives_id'		=> 'arch-total',
					'#archives_name'	=> L_TOTAL.' ',
					'#archives_year'	=> str_repeat('–', 4),
					'#archives_month'	=> L_TOTAL,
					'#archives_url'		=> $total_url,
					'#archives_nbart'	=> $total,
					'#archives_status'	=> ($active) ? 'active' : 'noactive',
					'#archives_selected'=> ($active) ? 'selected' : ''
				);
				echo str_replace(array_keys($motifs), array_values($motifs), $format);
			}

Bonne journée,

Cordialement,

jérôme

Réponses

  • Dans ce cas de figure, l'usage de str_replace est à proscrire !
    Voir remarque "attention" ici : http://php.net/manual/fr/function.str-replace.php
    [== php ==]
    php > $a = 'mon username est personne';
    php > $r1 =array('user' => 'utilisateur ', 'username' => 'nom usage');
    php > echo str_replace(array_keys($r1), array_values($r1), $a);
    mon utilisateur name est personne
    php > $r2 =array('username' => 'nom usage', 'user' => 'utilisateur ');
    php > echo str_replace(array_keys($r2), array_values($r2), $a);
    mon nom usage est personne
    
    Il faut utiliser strtr qui remplace en commençant par les chaînes les plus longues. En prime, il est plus simple d'utilsation
    [== php ==]
    php > echo strtr($a, $r1);
    mon nom usage est personne
    
    Certes, PluXml est truffé de str_replace mal employés. Mais bon ...
    On en a déjà parlé sur Github.
  • kameakamea Membres
    10 janv. modifié
    Haaaa génial !!! Merci Jérôme, mes sites fonctionnent mieux à présent le lien est bon. J'imagine effectivement que toutes celles et ceux qui utilisent une page statique par défaut vont être heureux :)

    Par contre, je n'ai aucune utilité du "total des archives", on a déjà les années ça suffit amplement. Y'a t'il un moyen de supprimer le total et de garder mois et années facilement ? je crois que la fonction affiche tout :(

    Merci.
  • bazooka07bazooka07 Membres
    10 janv. modifié
    C'est vrai que le cumul général n'est pas vraiment d'une grande utilité.
    En plus la modif est assez simple à faire. Dans core/lib/class.plx.show.php, vers la ligne 1815, rajouter un paramètre par défaut à la fonction archList() comme suit :
    [== PHP ==]
    public function archList($format='<li id="#archives_id"><a class="#archives_status" href="#archives_url" title="#archives_name">#archives_name</a></li>', $total_general=true)
    
    Et quelques lignes plus loin après "# Total des articles" modifier le test if comme suit :
    [== PHP ==]
    if($total_general and strpos($format, '#archives_nbart') !== false)
    
    Il faut bien sûr conserver le caractère "{" à la fin de chaque ligne.
    Et dans ton thème, tu rajoutes la valeur false quand tu appelles la fonction comme suit :
    [== PHP ==]
    $plxShow->archList('<li id="#archives_id"><a class="#archives_status" href="#archives_url" title="#archives_name">#archives_name</a></li>', false);
    

    Dommage que PluXml n'utilise pas les constantes de class. Cela éviterait de ré-écrire la chaine $format.
  • [== PHP ==]
        public function archList($format='<li id="#archives_id"><a class="#archives_status" href="#archives_url" title="#archives_name">#archives_name</a></li>') {
                # ......
    
                # Total des articles
                if(!empty($total_general) and strpos($format, '#archives_nbart') !== false) {
                    $url = ($this->plxMotor->aStats[$this->plxMotor->aConf['homestatic']]['active']) ? '?blog' : '' ;
                    echo strtr($format, array(
                        '#archives_id'      => 'arch-total',
                        '#archives_name'    => L_TOTAL.' ',
                        '#archives_year'    => str_repeat('–', 4),
                        '#archives_month'   => L_TOTAL,
                        '#archives_url'     => $this->plxMotor->urlRewrite($url),
                        '#archives_nbart'   => $total,
                        '#archives_status'  => ($active) ? 'active' : 'noactive',
                        '#archives_selected'=> ($active) ? 'selected' : ''
                    ));
                }
          }
    

    Elle n'est pas bien la fonction PHP Strtr ?
  • P3terP3ter Responsable de PluXml
    Bonjour,

    J'ai créé une issue pour intégrer cette modification à la prochaine version de PluXml : https://github.com/pluxml/PluXml/issues/312
  • Il y beaucoup d'endroits où on pourrait remplacer str_replace par strtr. Dans un terminal à la racine du site, faire :
    [== bash ==]
    grep -n str_replace core/{admin,lib}/*.php
    
  • Merci @P3ter
Connectez-vous ou Inscrivez-vous pour répondre.