Je raffole des petites fonctions ou des scripts PHP tout simples qui en ont sous la botte. Par exemple, à l’aide de deux tableaux Array
PHP nous choisirons 1) les balises div
à afficher dans notre page web et 2) dans quel ordre. Le but sera de modifier la structure de notre document sans toucher au code HTML. Pour ce faire, il suffira de remplir les string
qui vont bien dans l’Array
.
Les strings dans l’Array (oui, oui, je sais… ^__^v)
Tout commence par la déclaration des deux Array
. Ces tableaux pourront se trouver dans un fichier distinct à inclure avec include_one()
:
$displayDiv
— contient les éléments (div
) à afficher,$orderDiv
— permet d’ordonner les éléments en question.
<?php
$displayDiv = array(
'sidebar',
'content'
);
$orderDiv = array(
'0'=>'sidebar',
'1'=>'content'
);
?>
Une boucle for et quelques if
.
- Une boucle
for
englobe l’ensemble du document pour incrémenter la variable$i
en fonction du nombre d’éléments contenu dans le tableau$orderDiv
, - Nous vérifions pour chaque élément
div
concerné : sa présence et son numéro d’ordre dans le tableau$orderDiv
et sa présence dans le tableau$displayDiv
.
<?php for($i=0;$i<=count($orderDiv);$i++) { ?>
<?php
if($orderDiv[$i]=='sidebar' && in_array("sidebar",$displayDiv)) {
?>
<div id="sidebar">
<p>Contenu de la sidebar</p>
</div>
<?php } ?>
<?php
if($orderDiv[$i]=='content' && in_array("content",$displayDiv)) {
?>
<div id="content">
<p>Contenu du contenu</p>
</div>
<?php } ?>
<?php } ?>
Pour afficher un élément, mettez-le dans le tableau $displayDiv
. Pour modifier l’ordre d’affichage des éléments (pour placer #sidebar après #content, par exemple), changez l’ordre des éléments dans le tableau $orderDiv
.
Voici la proposition de Josselin qui permet d’optimiser le code présenté plus haut :
$orderDiv = array(
'0' => 'sidebar',
'1' => 'content'
);
ksort( $orderDiv ); // Trie le tableau suivant les clefs,
// la boucle suivante les affichera alors dans l'ordre
foreach ( $orderDiv as $nameDiv ) {
include( $nameDiv . '.php' );
}
Cette méthode implique donc d’avoir une page HTML pour chaque div
portant le même nom que cette div
pour mieux séparer le code PHP de la structure HTML, soit sidebar.php
et content.php
dans notre cas.
Stay tuned and mind the gap!
Parse error: syntax error, unexpected ‘=’, expecting ‘)’ in index.php on line 8
Attention aux array associatifs :
au lieu de « ‘0’=’sidebar’, » on écrit « ‘0’=>’sidebar’, »
On va mettre ça sur le dos de l’éditeur WordPress hein ;D
@Darklg:
Nan, c’est pas la faute à WordPress… J’ai juste pas fait gaffe en transformant les chevrons ouvrants et fermants. C’est réparé ! Merci pour ta vigilance 😉
( Autre registre : ton blog n’est pas à l’heure d’hiver ? )
Moui, l’idée est intéressante. Comment c’est fait dans WordPress pour changer l’ordre des différents éléments dans les colonnes latérales ?
Le count dans la condition du for c’est pas trop, il réévalue la taille du tableau à chaque boucle.
Quelque chose comme for ($i = 0, $j = count($orderDiv); $i <= $j, $i++) c’est déjà mieux (à vérifier que ça fonctionne, ça fait une éternité que j’ai pas fait de PHP).
Et je trouverai un foreach plus joli à lire, mais ça ne change rien ;-).
Quelques remarques et corrections de code :
Si tu gardes le « for », tu boucles une fois de trop. Il faut donc enlever le « = » avant le count :
for ($i = 0; $i < count($orderDiv); $i++) {
Comme dit par Neovov, mettre la fonction count() directement en comparaison est moins optimisé pour la raison évoquée (voir sa correction).
Ton array $displayDiv est inutile et du coup t’oblige à dupliquer du contenu. Tu peux le supprimer et utiliser $orderDiv dans ton in_array().
Utiliser une instruction « for » pour parcourir un tableau est désuet, il faudrait préférer utiliser le foreach. Le code final pourrait donc ressembler à ça :
$orderDiv = array(
'0' => 'sidebar',
'1' => 'content',
);
// Trie le tableau suivant les clefs,
// la boucle suivante les affichera alors dans l'ordre
ksort( $orderDiv );
foreach ( $orderDiv as $nameDiv )
{
include( $nameDiv . '.html' );
}
On aurait donc une page HTML pour chaque "div", et au nom de ce "div". Plusieurs avantages à cela :
On évite de dupliquer inutilement les noms des "div" (dans deux tableaux, dans des comparaisons, dans des in_array(), etc) ;
On sépare un minimum le code PHP du code HTML => Maintenance plus aisée.
@Josselin: Merci Joss’ pour toutes ces précisions et ces exemples. Bien vu, le coup du ksort : très subtile 😉
Heureusement que tout les lecteurs ne sont pas comme @Neovov: qui critique et garde ses exemples pour lui tout seul 😀 (pas taper, pas taper).