Snippet PHP pour afficher un bloc en fonction de l'URL
Bonjour ! Je vais partager avec un vous un snippet PHP qui permet d'afficher des blocs en fonction de l'URL de la page où l'on se situe. Cela peut s'avérer très utile lors de certaines situations et en complémentarité de l'usage des alias (avec Pathauto notamment).
Pour la définition de ce qu'est un snippet PHP et savoir où placer ce snippet, je vous renvoie à ce tutoriel.
Première méthode : avec les arguments des URL
Si vous avez des urls du type : "nomdedomaine.com/arg(0)/arg(1)/arg(2)" alors vous pouvez utilisez un snippet PHP très simple.
Par exemple, imaginons que je veux qu'un bloc apparaisse sur toutes les pages dont l'url est "nomdedomaine.com/poire/xx/xx" alors on peut utiliser le snippet suivant :
<?php
/* Montrer un bloc en fonction de l'url */
/* Définition de l'argument que l'on veut retrouver */
$argument_voulue = 'poire' ;
/* On teste si l'argument est dans l'url et on retourne TRUE si c'est le cas*/
if (arg(1) == $argument_voulue) {
return TRUE;
}
/* si le test ne retourne rien alors on retourne FALSE */
return FALSE;
?>Ce snippet est très simple à comprendre et très facile à modifier. En combinant ce snippet avec la puissance de Pathauto en terme d'alias d'URL, vous pourrez créer des affichages de blocs en fonction des sections de votre site Drupal de façon très simple.
Deuxième méthode : avec les chaînes de caractères de l'URL
Cette deuxième méthode peut s'avérer utile lorsque l'on ne peut pas utiliser les arguments d'URL.
Par exemple, imaginons une page de résultat de views après avoir utilisé des filtres exposés et où on a un type de contenu choisi par l'utilisateur. On aura une url du type : "nomdedomaine.com/vue/nomdelavue?type=poire"
Dans cette URL, "poire" n'est pas un argument, alors dans ce cas la solution est d'analyser toute l'URL. Le snippet à utiliser pourra donc être :
<?php
/* Montrer en fonction de l'url avec le mot qu'on veut */
$chaine_voulue = 'poire' ;
$chemin_drupal = $_SERVER['REQUEST_URI'];
/* Test de l'url complete pour vérifier qu'on a le mot voulu dans l'URL */
if (stristr($chemin_drupal, $chaine_voulue)) {
return TRUE;
}
/* si le test ne retourne rien, retourner false */
return FALSE;
?>
Notez que cette méthode marche dans tous les cas, donc pourrait aussi servir pour l'exemple précédent. :-)
Voilà, j'espère que cette petite astuce vous sera utile. ;-)