Image différente pour chaque page / groupe dans le header

Bonjour,

Après avoir cherché et testé pendant plusieurs mois divers CMS, je suis finalement tombée sur PluXml qui semble correspondre à ce que je recherche. MERCI !

Pour commencer, je pense n’utiliser que des pages statiques.

J’aimerais savoir comment pouvoir mettre une image/photo différente dans le header.php selon le groupe défini ou la page seule. Je m’explique :

Groupe 1 > banner1.jpg
Groupe 2 > banner2.jpg
Page statique 1 sans groupe > banner3.jpg
Page statique 2 sans groupe > banner4.jpg
Et ainsi de suite…

Je pense que la manière la plus simple serait de créer plusieurs fichiers header en conséquence et de les associer à un template différent pour chaque page, mais j’imagine qu’il doit également être possible d’utiliser le même header.php en affichant le nom de l’image d’une manière dynamique, afin d’éviter d’avoir beaucoup de templates dans lesquels seul le nom d’un fichier changerait.

Voici le code que j’ai mis dans mon header.php et qui affiche mon image :
[== Indéfini ==]
<div id="banner"> <img src="<?php $plxShow->template(); ?>/images/banner.jpg" width="900" height="250"></div>

Merci d’avance pour votre aide.

Réponses

  • StéphaneStéphane Member, Former PluXml Project Manager
    Dans le fichier header.php, à l'endroit où tu veux afficher la bannière, ajoute:
    <?php if($plxShow->mode()=='static') : ?>
    <div id="banner"><img src="<?php $plxShow->template(); ?>/images/banner-<?php echo $plxShow->staticId() ?>.jpg" width="900" height="250"></div>
    <?php endif; ?>
    

    Ici on n'affiche les bannières que si on visualise une page statique

    La fonction $plxShow->staticId() renvoie l'identifiant de la page statique en cours de visualisation

    Exemple si on est sur la page statique 002, le code donnera
    <div id="banner"><img src="themes/defaut/images/banner-2.jpg" width="900" height="250"></div>
    

    Les bannières sont à mettre dans un dossier images (exemple: themes/defaut/images/)

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • Faudrait l'épingler ça Stéphane dans la section 'Garde robe', vraiment excellent :)
  • Bonjour Stéphane,

    Merci.

    J'ai modifié mon fichier header.php, comme précisé, mais l'image ne s'affiche pas.

    En regardant le code source de plusieurs pages statiques, j'ai :
    [== HTML ==]
    <div id="banner"><img src="themes/defaut/images/banner-.jpg" width="900" height="250"></div>
    

    L'ID de la page statique ne s'ajoute pas au nom de l'image...
  • StéphaneStéphane Member, Former PluXml Project Manager
    oups désolé. j'ai oublié un echo. voici le bon code
    <?php if($plxShow->mode()=='static') : ?>
    <div id="banner"><img src="<?php $plxShow->template(); ?>/images/banner-<?php echo $plxShow->staticId() ?>.jpg" width="900" height="250"></div>
    <?php endif; ?>
    

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • Super, génial, Merci pour ton aide ! :)

    Là, maintenant on a une image/bannière différente pour chaque page statique.

    Et si maintenant on voulait combiner et en plus avoir la même image/bannière pour toutes les pages d'un même groupe ?

    Exemple :
    Groupe 1 > page 001 - page 002 > banner-group-1.jpg
    Groupe 2 > page 003 - page 004 > banner-group-2.jpg
    Page statique 1 sans groupe > banner-5.jpg
    Page statique 2 sans groupe > banner-6.jpg
    Et ainsi de suite…

    Autrement, si c'est trop compliqué, je recopierai les mêmes images que je renommerai différemment.
  • Lau029Lau029 Member
    septembre 2013 modifié
    Bonjour,

    En lisant l'article "Afficher une sidebar différente pour chaque page statique" http://pluxopolis.net/article26/pluxml-afficher-une-sidebar-differente-pour-chaque-page-statique qui est très intéressant, je me demandais s'il était possible de faire quelque chose de similaire pour les images dans le header, c'est-à-dire d'afficher une image par défaut si aucune image correspondant à l'identifiant existe.

    Si l'image banner-1.jpg existe dans le répertoire, on affiche l'image en question banner-1.jpg, par contre, si elle n'existe pas, on affiche une image par défaut, comme banner.jpg.

    Je pense que cela doit être possible, mais je n'y suis pas parvenue... :(

    J'ai aussi essayé de mettre la même image pour toutes les pages d'un groupe, mais sans succès...

    Merci
  • StéphaneStéphane Member, Former PluXml Project Manager
    @Lau029

    Meme principe: les bannières sont à mettre dans un dossier images dans le répertoire du theme (exemple: themes/defaut/images) sous les noms banner-1.jpg, banner-2.jpg, etc... et une bannière avec le nom banner.jpg qui servira pour toutes les pages statiques qui n'ont pas une bannière dédiée.

    Le code suivant est à mettre dans le fichier header.php
    <?php 
    if($plxShow->mode()=='static') {
    	$theme = $plxShow->plxMotor->aConf['racine_themes'].$plxShow->plxMotor->style;
    	$image = $theme.'/images/banner-'.$plxShow->staticId().'.jpg';
    	$image = file_exists(PLX_ROOT.$image) ? $image : $theme.'/images/banner.jpg';
    	echo '<div id="banner"><img src="'.$plxShow->plxMotor->urlRewrite($image).'" width="900" height="250"></div>';
    }
    ?>
    

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • Merci Stéphane.

    J'ai donc modifié mon code, comme indiqué, mais maintenant, c'est uniquement la bannière "banner.jpg" qui s'affiche dans toutes les pages, même si les banner-1.jpg / banner-2.jpg, etc existent...
  • StéphaneStéphane Member, Former PluXml Project Manager
    voila le code qui fonctionne. désolé pour l'erreur
    <?php 
    if($plxShow->mode()=='static') {
    	$theme = $plxShow->plxMotor->aConf['racine_themes'].$plxShow->plxMotor->style;
    	$image = $theme.'/images/banner-'.$plxShow->staticId().'.jpg';
    	$image = file_exists(PLX_ROOT.$image) ? $image : $theme.'/images/banner.jpg';
    	echo '<div id="banner"><img src="'.$plxShow->plxMotor->urlRewrite($image).'" width="900" height="250"></div>';
    }
    ?>
    

    ps: j'ai mis à jour le code également dans mon précédent post

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • Fantastique, super, maintenant ça marche.

    Un grand MERCI !

    Et pour avoir la même bannière/image selon un groupe, est-ce possible ou dois-je créer différents templates « header » pour chaque groupe ?
  • StéphaneStéphane Member, Former PluXml Project Manager
    pour avoir une image différente en fonction des groupes de pages statiques
    <?php 
    if($plxShow->mode()=='static') {
    	$theme = $plxShow->plxMotor->aConf['racine_themes'].$plxShow->plxMotor->style;
    	$image = $theme.'/images/banner-'.$plxShow->plxMotor->aStats[$plxShow->plxMotor->cible]['group'].'.jpg';
    	$image = file_exists(PLX_ROOT.$image) ? $image : $theme.'/images/banner.jpg';
    	echo '<div id="banner"><img src="'.$plxShow->plxMotor->urlRewrite($image).'" width="900" height="250"></div>';
    }
    ?>
    

    Le principe reste le meme sur le fonctionnement et pour nommer les fichiers des bannières

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • Bonjour Stéphane,

    J'ai changé le code pour avoir une image différente en fonction des groupes de pages statiques, mais maintenant, c'est à nouveau uniquement la bannière "banner.jpg" qui s'affiche dans toutes les pages, qu'elles fassent partie d'un groupe ou non.

    Est-ce que je dois nommer les bannières d'un groupe différemment que banner-1.jpg, banner-2.jpg, etc ?

    En fait, j’aimerais que si :
    - la page fait partie d’un groupe –> une image s’affiche (la même pour toutes les pages du groupe),
    - la page ne fait pas partie d’un groupe -> une image différente pour chaque page s’affiche (définie avec le staticId())
    - aucune bannière n’existe dans le répertoire avec son ID -> une bannière par défaut s’affiche (banner.jpg)

    Merci pour ton aide
  • StéphaneStéphane Member, Former PluXml Project Manager
    avec ça, ça devrait le faire
    <?php 
    if($plxShow->mode()=='static') {
    	$theme = $plxShow->plxMotor->aConf['racine_themes'].$plxShow->plxMotor->style;
    	$image = $theme.'/images/banner-'.$plxShow->plxMotor->aStats[$plxShow->plxMotor->cible]['group'].'.jpg';
    	$image = str_replace(' ', '', $image);
    	$image = file_exists(PLX_ROOT.$image) ? $image : '';
    	if($image=='') {
    		$image = $theme.'/images/banner-'.$plxShow->staticId().'.jpg';
    		$image = file_exists(PLX_ROOT.$image) ? $image : $theme.'/images/banner.jpg';
    	}
    	echo '<div id="banner"><img src="'.$plxShow->plxMotor->urlRewrite($image).'" width="900" height="250"></div>';
    }
    ?>
    

    - pour les groupes: banner-nomdugroupe.jpg (exemple: banner-Groupe1.jpg , banner-Groupe2.jpg, etc...)
    - pour les page statiques: bannier-idpagestatique.jpg (exemple: banner-1.jpg, banner-2.jpg, etc...)
    - bannière par défaut: banner.jpg

    /!\ Certains hébergeurs n'aiment pas les espaces dans les noms de fichier. Donc s'il y a des espaces dans le nom du groupe, il faut les supprimer dans le nom du fichier jpg.
    Exemple: pour un nom de groupe Mon groupe 1 le nom de fichier sera banner-Mongroupe1.jpg (respecter la casse également)

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • Désolée, mais cela ne marche pas... :(

    Aucune image ne s'affiche, même pas celle par défaut...

    J'ai donc regardé dans le code de plusieurs pages affichées et j'ai :

    <div id="banner"><img src="http://www.monadresse.com/test/"; width="900" height="250"></div>

    Il s'arrête au répertoire de mon site dans lequel j'ai installé PluXML. Le chemin + le nom de l'image n'aparaissent pas, donc aucune image n'est affichée...
  • StéphaneStéphane Member, Former PluXml Project Manager
    essaye en plaçant
    if($image='') {
    
    par
    if($image=='') {
    
    désolé je n'ai rien sous la main pour tester le code, je te donne ça online en direct live

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • Et OUI, super. Maintenant tout fonctionne parfaitement ! :)

    Un grand merci pour ta précieuse aide ! ;)
Connectez-vous ou Inscrivez-vous pour répondre.