2009-08-25 8 views
1

Je sais que cela peut probablement être fait avec CCK et une vue, et peut-être un type de contenu de logo. Mais je me demandais si quelqu'un connaît la meilleure façon de faire ce qui suit (peut-être il y a un module qui le fait déjà):Comment implémenter des logos saisonniers dans Drupal?

Je veux des affichages SAISONNIERS de mon logo. C'est à dire. Si je crée une version CHRISTMAS de mon logo, avec par exemple un chapeau de Noël dans le logo, cela doit être montré à Noël, ou 7 jours avant Noël. Ces 7 jours doivent être modifiables sur une base PER LOGO. C'est à dire. Je pourrais vouloir montrer le logo de Noël pour tout le mois de décembre, mais le holloween seulement pour un jour.

Il doit automatiquement choisir entre les différents logos et AUSSI, répondre aux LANGUES. J'ai trois langues et donc trois logos différents sur mon site.

Répondre

1

C'était une solution simple mais efficace, en utilisant CCK et vues:

Créer un type de contenu 'photos d'en-tête'. Ajoutez des champs pour les images, l'URL et la liste de sélection "Afficher quand". Images J'ai utilisé le téléchargement d'image avec le module de recadrage, contraint à 400px de large par 100px de haut pour tenir dans le bloc d'en-tête.

'show lorsque' liste de sélection I peuplée d'été, l'hiver, l'automne, Halloween, Noël, Jour de l'ancien combattant, etc.

url est facultative.

En vue, filtrer par type = header_pic et show_when = tout ce que vous voulez afficher maintenant, limite = 1.

Besoin addon module PHP CustomField pour les vues, et d'ajouter:

<?php 
$temp = node_load($data->nid); 
if ($data->node_data_field_header_pic_url_field_header_pic_url_url) { 
    echo '<a href="' . $data->node_data_field_header_pic_url_field_header_pic_url_url 
. '" title="' . $data->node_data_field_header_pic_url_field_header_pic_url_title 
.'"><img src="/' . $temp->field_header_image[0]['filepath'] . '" /></a>'; 
} 
else { 
    echo '<img src="/' . $temp->field_header_image[0]['filepath'] . '" />'; 
} 
?> 

Lorsque la les champs que j'ai notés correspondent à vos champs réels.

Cela ne fait qu'emballer l'image avec ce champ URL uniquement si le champ URL est rempli.

Définissez ensuite la vue dans un affichage de bloc et définissez ce bloc dans la zone d'en-tête. Selon le thème, vous devrez peut-être un peu pirater le fichier page.tpl.php pour déplacer cette région de bloc d'en-tête dans la zone d'en-tête réelle (mais une fois que vous y êtes, il est facile de voir ce que vous devez faire).

Vous pouvez même faire une page d'affichage de cette même vue pour afficher toutes vos grandes images d'en-tête à la fois sur une page (/ headerpics), avec un lien d'édition par chaque pour faciliter la gestion.

Cela fonctionnera si vous voulez juste des images saisonnières. C'est un formulaire simple pour les utilisateurs non techniques pour télécharger et recadrer des images. Le seul besoin d'administration est la saison occasionnelle (montrer quand) changements dans le filtre de vue.

+0

C'est en fait ce que j'ai fini par faire. – coderama

1

S'il s'agissait d'un ensemble de règles très simples, je le ferais à partir du gabarit (si c'est décembre, incluez ce logo, sinon incluez cet autre logo, etc ...). Si vous voulez que ceci soit entièrement personnalisable, alors je ferais un petit module, et peut-être un type de contenu traduisible CCK logo, avec une image et des plages de dates, donc il sélectionnerait les images de manière appropriée selon vos règles. Ensuite, le module exporterait un bloc à mettre dans l'une des régions, disons l'en-tête. Ce serait également conscient de la langue.

Je pense qu'une vue peut être pas suffisant pour faire la chose complète, il doit être un peu compliqué ...

+0

Ah. C'est ce que je pensais. Je vais créer un type de contenu, puis il suffit de mettre le code et la logique directement sur la page. Peut-être l'extraire dans un fichier séparé. Merci Palantir! – coderama

3

Il y a un inconvénient d'avoir un type de contenu pour les logos, en ce que vous aurez besoin faire deux charges de noeud pour chaque page.

Une solution alternative consisterait à implémenter un module qui a créé un bloc de logo. Vous pourriez alors modifier votre thème pour avoir une région où le logo est et mettre ce bloc dans la région. Vous pourriez avoir la logique que vous voulez dans le bloc. Y compris une interface d'administration si vous le souhaitez. Cela pourrait être mis en cache par utilisateur (et effacé une fois par jour) de sorte que le surcoût serait simplement une charge d'un bloc à partir du cache plutôt que d'un chargement de nœud. Cela permet également de séparer la présentation et la logique, et j'imagine qu'un module d'image saisonnier serait très populaire.

1

Il suffit d'utiliser un peu de php ... premières

Si votre site utilise la structure d'URL normale pour les langues que vous faites quelque chose comme ceci: choses

<?php 
$path = drupal_get_path_alias($_GET['q']); 
$path = explode('/', $path); 
if ($path[0] == 'english') { 
    $logolangclass = 'english'; 
}; 
?> 

Puis une date régulière(), vous pouvez faire quelque chose comme ceci:

<?php 
$today = date("md"); 
if ($today == "1215") { 
    $logoseasonclass = "christmas"; 
} 
?> 

Ensuite, utilisez ces deux variables pour construire une classe css pour vous logo comme ceci:

<div id="MyLogo" class="<?php echo $logolangclass $logoseasonclass ?>"></div> 

qui, lorsqu'il est rendu produira quelque chose comme ceci:

<div id="MyLogo" class="english christmas"></div> 
+0

Cela fonctionnerait, mais la partie difficile vient avec la logique, que je voulais gérer un module. C'est à dire. pour que les utilisateurs sans connaissances en programmation ajoutent des logos, et que si les logos se chevauchent, celui avec priorité est choisi. par exemple. s'il y a un logo de Noël pour tout le mois de décembre et un pour le 10 décembre, celui du 10 décembre est affiché le 10 décembre et celui de Noël tous les autres jours. – coderama

Questions connexes