Welcome, Guest. Please login or register.
Did you miss your activation email?
May 27, 2012, 03:38:06 AM

Login with username, password and session length
Search:     Advanced search
Interested in joining the WebsiteBaker team?
For more Information read here or on our new website.
155555 Posts in 21715 Topics by 7737 Members
Latest Member: gx-world
* Home Help Search Login Register
Pages: [1]   Go Down
Print
Author Topic: Afficher une image différente pour chaque page  (Read 3156 times)
wighie

Offline Offline

Posts: 41


« on: June 03, 2008, 11:49:58 PM »

Bonsoir,
Mon site est composé entre autre d'un bandeau (<div id="header">...</div>) qui affiche une image.
J'aimerais afficher une image donnée pour chaque rubrique de mon site... Mais là j'avoue que je ne vois pas comment faire et surtout quoi chercher sur le forum.

J'aimerais que pour la page "toto" (id=1) et tout ces descendants, afficher l'image img-toto.jpg...
Pour la page "tata" (id=2) et tout ces descendants, afficher l'image img-tata.jpg..

Si quelqu'un aurait une solutions à me proposé, j'avoue que la... je suis preneur
Logged
wighie

Offline Offline

Posts: 41


« Reply #1 on: June 06, 2008, 08:28:03 AM »

Bon, n'ayant pas trouvé de solution clean, je reste sur mon premier code... A mon sens, ce n'est pas une bonne solution mais ça marche ! Dommage que personne est de solution plus adéquat, ça ne me semble pas une fonctionnalité aberrante ?! 

Dans le index.php du dossier template/[Mon template] :

Code:
<?php
/* Permet de gérer l'images selon les rubriques en cours : */
    
if ($page_id==OR $page_id==18 OR $page_id==22 
            
OR $page_id==19) : $image 'style="background-image: url('.TEMPLATE_DIR.'/images/header_1.jpg);"';
    elseif(
$page_id>=AND $page_id<=7): $image 'style="background-image: url('.TEMPLATE_DIR.'/images/header_2.jpg);"';
    elseif(
$page_id==9): $image 'style="background-image: url('.TEMPLATE_DIR.'/images/header_3.jpg);"';
    elseif(
$page_id==10): $image 'style="background-image: url('.TEMPLATE_DIR.'/images/header_4.jpg);"';
[...]    
    else: 
$image 'style="background-image: url('.TEMPLATE_DIR.'/images/header.jpg);"';    
    endif;

?>

Et pour la partie HTML, tout simple :

Code:
<div id="header" <?php echo $image;?>>

L'autre solution consisterais bien entendu à "multiplier" le nombre de template pour intégrer chaque variante d'image qui est ma foie, la solution la plus souple à long terme. Le problème est que l'on peut se retrouver vite avec une 20e de template !

Manuel Da SILVA
« Last Edit: June 06, 2008, 08:30:35 AM by wighie » Logged
nesquick

Offline Offline

Posts: 12


« Reply #2 on: June 27, 2008, 03:02:33 PM »

Salut,

J'ai été confronté au même problème, j'ai résolu ça avec quelques fonctions php que voici :
Code:
//------------------------------------
// récupération du nom et de l'id du root
//------------------------------------
function getRubrique ($page_id) {
    $tab = array();
    $tab["parent_id"] = getRoot($page_id);
    $tab["parent_nom"] = getParentName($tab["parent_id"]);
    return $tab;
}

function getRoot($page_id) {
    $top_rub = 0;
   
    $sql = "select parent from pages where page_id='".$page_id."'";
    $req = mysql_query($sql);
    if(mysql_num_rows($req)>0) {
        $row = mysql_fetch_assoc($req);
        $parent_id = $row["parent"];
        if($parent_id==0) {
            $top_rub = $page_id;
        } else {
            $top_rub = getRoot($parent_id);
        }
    }
    return $top_rub;
}

function getParentName($page_id) {
    $parentName = "";
   
    $sql = "select page_title from pages where page_id='".$page_id."'";
    $req = mysql_query($sql);
    if(mysql_num_rows($req)>0) {
        $row = mysql_fetch_assoc($req);
        $parentName = $row["page_title"];
    }
    return $parentName;
}

Explications :
la fonction getRubrique va chercher la page root (le niveau 1 des pages) avec la fonction getRoot, puis le nom de cette page root avec getParentName.
Quand elle l'a obtenue, elle retourne un tableau. J'utilise ce tableau pour afficher le nom de la rubrique dans laquelle je suis et le bandeau qui correspond :
Code:
$myTab = getRubrique(PAGE_ID); // PAGE_ID est le page_id de la page en cours

// on détermine quel bandeau afficher
$nom_bando = "haut_defaut.jpg";
$nom_top = "defaut";
// regarder si haut_PAGE_ID existe
$bando = "haut_".$myTab["parent_id"].".jpg";
if(file_exists(WB_PATH.'/templates/'.TEMPLATE.'/img/'.$bando)) {
    $nom_top = $myTab["parent_id"];
}
Mes bandeaux s'appellent haut_1.jpg, haut_2.jpg...en fonction de l'identifiant de la page root.

L'avantage, c'est que si tu rajoutes ou enlèves des pages dans tes rubriques, tu n'es pas obligé de modifier ton code, c'est pris en compte automatiquement.

N'hésite pas à demander si qq chose n'est pas clair !
Logged
wighie

Offline Offline

Posts: 41


« Reply #3 on: July 01, 2008, 09:02:03 PM »

Excellent... je te remercie.

J'avoue que ma solution ne me plaisait pas du tout ! Je vais mettre en place votre système dès que possible.
On est bien d'accord que votre code doit se positionner dans le fichier template ?

Encore merci  cheesy
Logged
nesquick

Offline Offline

Posts: 12


« Reply #4 on: July 27, 2008, 12:33:45 PM »

oui, le code se trouve dans le template. Les fonctions sont déportées dans un fichier de fonctions chez moi, mais rien ne t'empêche de les mettre dans le template directement.
Logged
Pages: [1]   Go Up
Print
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.16 | SMF © 2011, Simple Machines Valid XHTML 1.0! Valid CSS!