validation de code

danielsandanielsan Member
septembre 2012 modifié dans Entraide
Bonjour,


pour la réalisation d'un template d'accueil ( à travers une page static paramétrée comme accueil ),
je souhaite lister les articles regroupés par catégorie.
Je me suis inspiré du plugin plxMyAllArchives, peut-on me dire si ce que j'ai fait est valable ..?


code de la page static en question:
<?php include(dirname(__FILE__).'/header.php'); ?>

<div id="description" class="grid_12">
	<div class=" border_1 bg_1 text_justify paddingV_1 paddingH_1 marginB_1">
		<?php $plxShow->staticContent(); ?>
	</div>
</div>

<div class="grid_12">
	<div class=" border_1 bg_1 text_justify paddingV_1 paddingH_1 marginB_1">
		<?php echo plxUtils::strCheck($plxShow->plxMotor->aStats[$plxShow->plxMotor->cible ]['meta_description']); ?>
	</div>
</div>

<?php
$plxGlob_arts = clone $plxShow->plxMotor->plxGlob_arts;

	if($aFiles = $plxShow->plxMotor->plxGlob_arts->query('/^[0-9]{4}.[home|'.$plxShow->plxMotor->activeCats.',]*.[0-9]{3}.[0-9]{12}.[a-z0-9-]+.xml$/','art','rsort', 0, false, 'before')) {
		$allArt=array();
		$tabCat=array();
		foreach($aFiles as $k=>$v) { # On parcourt tous les fichiers
			$allArt[$k] = $plxShow->plxMotor->parseArticle(PLX_ROOT.$plxMotor->aConf['racine_articles'].$v);
			$catIds = explode(',',$allArt[$k]['categorie']);
			foreach($catIds as $i=>$j){
				if(!array_key_exists($j,$tabCat)){
					$tabCat[$j]=array();
				}else{}
				$tabCat[$j][0] = $plxShow->plxMotor->aCats[$j];
				array_push($tabCat[$j],$allArt[$k]);
			}
		}
	}

foreach($tabCat as $k=>$numCat){
	echo "<div class=\"grid_12\">\n";
	echo "<h2 class=\"marginT_2\"><a href=\"".$plxShow->plxMotor->urlRewrite('?categorie'.intval($k).'/'.$numCat[0]['url'])."\" title=\"Voir tous les articles de ".$numCat[0]['name']."\" class=\"block\">".$numCat[0]['name']."</a></h2>\n";
	echo "<div class=\"border_1 bg_1 text_justify paddingV_1 paddingH_1 marginB_1\">".$numCat[0]['description']."</div>\n";
	echo "<div class=\"row\">\n";
	$nbArt = count($numCat)-1;
	for($i=1; $i<=$nbArt; $i++){
		if($i<=5){
			echo "<div class=\"item grid_4 border_1 rowV_2 relative\">\n";
			echo "<h3><a href=\"".$plxShow->plxMotor->urlRewrite('?article'.intval($numCat[$i]['numero']).'/'.$numCat[$i]['url'])."\" title=\"En savoir plus sur ".$numCat[$i]['title']."\">".$numCat[$i]['title']."</a></h3>\n";
			echo "<div class=\"art-chapo paddingH_1 paddingV_1 text_justify\">".$numCat[$i]['meta_description']."</div>\n";
			echo "<a href=\"".$plxShow->plxMotor->urlRewrite('?article'.intval($numCat[$i]['numero']).'/'.$numCat[$i]['url'])."\" title=\"En savoir plus sur ".$numCat[$i]['title']."\" class=\"abs_b paddingH_1 paddingV_1 bg_1 block width_100 text_right\">En savoir plus</a>\n";
			echo "</div>\n";
		}
	}
	if($nbArt>5){
		echo "<a href=\"".$plxShow->plxMotor->urlRewrite('?categorie'.intval($k).'/'.$numCat[0]['url'])."\" title=\"Voir les autres articles de ".$numCat[0]['name']."\" class=\"grid_4 text_center paddingV_0 border_1 bg_1\">Voir les autres articles de ".$numCat[0]['name']."</a>\n";
	}
	echo "</div>\n";

	echo "</div>\n";
}
?>

<?php include(dirname(__FILE__).'/footer.php'); ?>


Et le résultat se trouve ici ( si ça peut donner des idées ... :p )


Cordialement,
_____
D.San

Réponses

  • StéphaneStéphane Member, Former PluXml Project Manager
    Salut

    - la variable $tabCat est initialisée au mauvais endroit. Si tu ne passes pas le test if($aFiles...) tu te retrouves avec un foreach($tabCat...) douteux. Donc faire l'init $tabCat=array() avant if($aFiles....)
    - préfère sizeof plutôt que count car il est plus performant
    - dès que tu fais un affichage écran ne pas oublier d'utiliser plxUtils:strCheck, cela protège des failles XSS (example où tu affiches $numCat[$i])
    - assure toi que l'encodage de ton fichier est bien en utf-8 sans bom, sinon tu risques d'avoir des caractères bizarres affichés dès que tu auras des accents (ça peut etre bon chez toi, mais différent chez un visiteur en fonction de son navigateur et de sa langue)


    Voilà mes remarques. Je n'ai pas testé ce que fait le code

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • danielsandanielsan Member
    septembre 2012 modifié
    merci Stéphane pour tous ces rappels


    j'ai inclus le foreach dans la condition puisque celui-ci est responsable de l'affichage s'il y a des articles.


    pour plxUtils:strCheck, faut-il aussi le faire pour l'url les liens ?


    oula l'UTF8 sans BOM, par encore ce réflexe ! :D pas bien :cool:


    le code rectifié:
    <?php include(dirname(__FILE__).'/header.php'); ?>
    
    <div id="description" class="grid_12">
    	<div class=" border_1 bg_1 text_justify paddingV_1 paddingH_1 marginB_1">
    		<?php $plxShow->staticContent(); ?>
    	</div>
    </div>
    
    <div class="grid_12">
    	<div class=" border_1 bg_1 text_justify paddingV_1 paddingH_1 marginB_1">
    		<?php echo plxUtils::strCheck($plxShow->plxMotor->aStats[$plxShow->plxMotor->cible ]['meta_description']); ?>
    	</div>
    </div>
    
    <?php
    $plxGlob_arts = clone $plxShow->plxMotor->plxGlob_arts;
    
    	if($aFiles = $plxShow->plxMotor->plxGlob_arts->query('/^[0-9]{4}.[home|'.$plxShow->plxMotor->activeCats.',]*.[0-9]{3}.[0-9]{12}.[a-z0-9-]+.xml$/','art','rsort', 0, false, 'before')) {
    		$allArt=array();
    		$tabCat=array();
    		foreach($aFiles as $k=>$v) { # On parcourt tous les fichiers
    			$allArt[$k] = $plxShow->plxMotor->parseArticle(PLX_ROOT.$plxMotor->aConf['racine_articles'].$v); // création d'un tableau des tous les articles
    			$catIds = explode(',',$allArt[$k]['categorie']); // création d'un tableau des catégories de chaque article
    			foreach($catIds as $i=>$j){ // création d'un tableau général des catégories ( évite les doublons )
    				if(!array_key_exists($j,$tabCat)){
    					$tabCat[$j]=array();
    				}else{}
    				$tabCat[$j][0] = $plxShow->plxMotor->aCats[$j]; // insertion des infos de la catégorie dans la première ligne du tableau des catégories
    				array_push($tabCat[$j],$allArt[$k]); // insertion des articles liés à cette catégorie
    			}
    		}
    
    		foreach($tabCat as $k=>$numCat){ // boucle responsable de l'affichage
    			echo "<div class=\"grid_12\">\n"; // on affiche d'abord les infos de la catégorie ( titre + description )
    			echo "<h2 class=\"marginT_2\"><a href=\"".$plxShow->plxMotor->urlRewrite('?categorie'.intval($k).'/'.$numCat[0]['url'])."\" title=\"Voir tous les articles de ".plxUtils::strCheck($numCat[0]['name'])."\" class=\"block\">".plxUtils::strCheck($numCat[0]['name'])."</a></h2>\n";
    			echo "<div class=\"border_1 bg_1 text_justify paddingV_1 paddingH_1 marginB_1\">".$numCat[0]['description']."</div>\n";
    			echo "<div class=\"row\">\n";
    			$nbArt = sizeof($numCat)-1;
    			for($i=1; $i<=$nbArt; $i++){ // affichage des articles liés à cette catégorie ( titre + meta-description )
    				if($i<=5){
    					echo "<div class=\"item grid_4 border_1 rowV_2 relative\">\n";
    					echo "<h3><a href=\"".$plxShow->plxMotor->urlRewrite('?article'.intval($numCat[$i]['numero']).'/'.$numCat[$i]['url'])."\" title=\"En savoir plus sur ".plxUtils::strCheck($numCat[$i]['title'])."\">".plxUtils::strCheck($numCat[$i]['title'])."</a></h3>\n";
    					echo "<div class=\"art-chapo paddingH_1 paddingV_1 text_justify\">".plxUtils::strCheck($numCat[$i]['meta_description'])."</div>\n";
    					echo "<a href=\"".$plxShow->plxMotor->urlRewrite('?article'.intval($numCat[$i]['numero']).'/'.$numCat[$i]['url'])."\" title=\"En savoir plus sur ".plxUtils::strCheck($numCat[$i]['title'])."\" class=\"abs_b paddingH_1 paddingV_1 bg_1 block width_100 text_right\">En savoir plus</a>\n";
    					echo "</div>\n";
    				}else{}
    			}
    			if($nbArt>5){ // s'il y a plus de 5 articles dans la catégorie, on affiche un lien pour voir l'ensemble des articles
    				echo "<a href=\"".$plxShow->plxMotor->urlRewrite('?categorie'.intval($k).'/'.$numCat[0]['url'])."\" title=\"Voir les autres articles de ".plxUtils::strCheck($numCat[0]['name'])."\" class=\"grid_4 text_center paddingV_0 border_1 bg_1\">Voir les autres articles de ".plxUtils::strCheck($numCat[0]['name'])."</a>\n";
    			}else{}
    			echo "</div>\n";
    
    			echo "</div>\n";
    		}
    	}else{}
    ?>
    
    <?php include(dirname(__FILE__).'/footer.php'); ?>
    
    


    ce que fait le code se trouve dans le lien sus-indiqué


    merci
  • quand j'ouvre un template par défaut, l'encodage devrait être en UTF8 sans BOM aussi ..?
  • StéphaneStéphane Member, Former PluXml Project Manager
    pour éviter tout problème d'encodage des fichiers oui c'est mieux de tout mettre en UTF8 sans BOM

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • Tu peux (ou dois pouvoir) paramétrer ton éditeur pour enregistrer par défaut tout nouveau fichier en UT8 sans BOM.
    Quel est celui que tu utilises ?
  • notepad++
  • Tu peux donc le paramétrer. C'est prévu.
  • effectivement, je ne m'étais jamais posé la question !
    une bonne chose de faite, des galères en moins :p
    Merci ;)
Connectez-vous ou Inscrivez-vous pour répondre.