2010-03-14 5 views
1

Je n'arrive pas à comprendre comment créer des images d'arrière-plan modifiables dans mon thème Drupal 6 personnalisé. Mon client souhaite utiliser une image de fond différente sur chaque section principale de son site Web (avec plusieurs types de contenu: page, blog, galerie d'images) et pour que tout soit dynamique, je souhaite que les images d'arrière-plan soient modifiables. Ce que je voudrais faire est d'ajouter un champ d'image d'arrière-plan à divers types de contenu qui permet à un utilisateur de référencer une image de la bibliothèque de contenu ou télécharger une nouvelle image (semblable à ImageAssist), et l'appliquer à un région dans mon modèle. Des suggestions sur la meilleure approche pour cela?Image d'arrière-plan Drupal en tant que bloc ou noeud

Existe-t-il un moyen de transformer un type de contenu personnalisé en bloc d'image d'arrière-plan dynamique? J'utilise les modules Image, Cache d'image, Vues, ​​CCK, Image assistée, Panneaux, Filefield et Imagefield.

Merci!

Répondre

1

Je travaille moi-même sur un tel site ces jours-ci. Ce que j'ai fait est: 1. créer un champ de contenu pour cette image dans laquelle l'administrateur du site peut télécharger un nouveau fond 2. dans le template.php j'ai ajouté l'emplacement de l'image à la nouvelle $ var ['background'] i Créé dans 3. Dans le pape.tpl.php j'ai ajouté un div à l'intérieur du corps qui contient tout le contenu de la page, 4. dans le div bove ajouté un style et imprimé $ background comme la valeur de l'arrière-plan exemple (replapa <> avec [] pour éviter la suppression automatique du code): [body class = "[? php print $ body_classes;?]"] [div id = "page" style = 'background: url ("[? php imprimer $ background? ] ") no-repeat; '] [/ div] [/ body] espérons que cela aide Avn er

+0

Merci pour votre réponse ! Mais utilisez-vous seulement une image? J'espère en quelque sorte rendre facile de mettre une image différente sur chaque section. Quand vous dites "emplacement de l'image", voulez-vous dire une adresse URL? –

+0

pas du tout, comme je l'ai expliqué dans mon commentaire, l'arrière-plan peut être changé et entré en tant que variable (dans mon exemple $ background). poster votre template.php et je vais essayer de vous aider avec le code – Avner

0

En ce moment, je suis en train de coder en dur une URL, ce qui est inutile jusqu'à ce que je trouve comment la rendre dynamique. Voici une partie de mon fichier template.php:

function phptemplate_preprocess(&$vars, $hook) { 
    $vars['background'] = base_path().'sites/default/files/wood-med.jpg'; 
    //... 
} 

Et voici la section pertinente de mon dossier page.tpl.php:

</head> 

    <body class="<?php print $body_classes ?>" style='background-image: url("<?php print $background ?>");background-repeat: repeat-y;'> 
     <div id="pageWrapper"> 
     // .... 

J'ai créé un type de noeud d'image d'arrière-plan et que vous souhaitez utilisez-le pour fournir un nœud Page, Image ou Galerie avec une liste d'images à choisir. Des idées sur la façon de brancher cela?

2

utilisez la fonction phptemplate_preprocess? Peut-être que je l'ai manqué mais il y a une telle fonction sur le site API de Drupals.
Je pense que vous devriez utiliser phptemplate_preprocess_page, qui devrait être implémenté comme:
'function THEMENAME_preprocess_page (& $ vars)' et placé dans votre template.php qui est dans votre répertoire de thème.
plus probable que la fonction existe déjà et vous devez ajouter les lignes suivantes à la fin de celui-ci:
global $base_url;
if (!empty($vars['node']->type)) {
if (($vars['node']->type == 'CONTENT-TYPE-A') || ($vars['node']->type == 'CONTENT-TYPE-B') {
$vars['background'] = $base_url."/".$vars['node']->field_background[0]['filepath']; }
}

noter que field_background est un champ CCK

concernant votre page.tpl.php, je préfère ne pas entrez l'image dans l'étiquette du corps. Je l'ai mis à l'intérieur dans un div, cela permettra plus de flexibilité (par exemple si vous souhaitez que l'image soit 20px sous le haut du navigateur).exemple:
<div id="main" >
<div id="page" style='background: url("<?php print $background ?>") no-repeat;'>

espérons que cette aide Avner

0

une plus simple et plus propre façon est d'ajouter dans la template.php dans la fonction phptemplate_preprocess_page():

if (isset($node->field_background[0]['filepath'])){ $vars['styles'] .= ' '; $vars['styles'] .= 'div#page{background: url("'.$base_url.'/'.$node->field_background[0]['filepath'].'");}'; $vars['styles'] .= ''; }

Questions connexes