2010-07-25 4 views
0

J'essaie d'ajouter des images personnalisées dans l'affichage du calendrier de Drupal en cochant «nid» d'un nœud (ou d'un terme de taxonomie à l'avenir). J'écris ce code personnalisé dans views-view-field-calendar-nid.tpl. Le problème est que, ce qui est jamais sorti par views-view-field-calendar-nid.tpl est également inséré dans l'attribut 'id' de div tag. Veuillez voir la deuxième étiquette div.Ajout d'images personnalisées à une vue du calendrier

254 était la sortie et il est également inséré dans l'attribut 'id'.

<div class="view-item view-item-calendar"> 
    <div class="calendar monthview" id="calendar: 
254:changed:0:0"> 
       <div id="nid" class="view-field view-data-nid"> 


254  </div> 
     </div>  

Ainsi, lorsque des vues avec vue sur le terrain - Calendrier - Sorties nid.tpl img tag, il pouvez également obtenir inséré dans l'attribut 'id', qui brise la seconde balise div.

S'il vous plaît, voir ci-dessous la sortie

<div class="view-item view-item-calendar"> 
    <div class="calendar monthview" id="calendar: 
<img src="http://www.programmingnature.com/stackoverflow_32.png"> </img>255:changed:0:1"> 
       <div id="nid" class="view-field view-data-nid"> 


<img src="http://www.programmingnature.com/stackoverflow_32.png"> </img>255  </div> 
     </div>  
</div> 

Screenshot:

alt text http://img201.imageshack.us/img201/3140/calendarproblem.png

S'il vous plaît noter que vue Calandre a essayé d'insérer la sortie avec img étiquette à l'intérieur de cet attribut 'id' et tout est maintenant foiré ...

Comment empêcher Calender d'insérer une sortie dans l'attribut 'id'? Ou existe-t-il une autre manière d'insérer des images dans la vue Calendrier?

Voici le code de vues vue sur le terrain - Calendrier - nid.tpl

<?php 

$results = $variables['view']->result; 
$nid=$output; 

$newOutput=""; 

foreach ($results as $key => $value) { 
//Find the matching nid 

if ($nid==255) { 

$newOutput.= '<img src="http://www.programmingnature.com/stackoverflow_32.png"> </img>'; 
} 

$newOutput.=$nid; 


    } 

print $newOutput; 

?> 

Répondre

1

Calendrier de très stupide. Ce qui se passe, c'est que l'affichage du calendrier crée un ID en fonction de tous les champs disponibles dans la vue et les enchaîne pour créer un ID unique. Génial en théorie, mais cela suppose beaucoup (comme vous ne faites pas ce que vous essayez de faire ici).

Vous pouvez voir ce qu'il tente de faire dans template_preprocess_calendar_node() dans theme/theme.inc. La solution consiste à créer votre propre fonction de prétraitement, mytheme_preprocess_calendar_node(&$vars), et de définir $vars['fields']['id'] sur quelque chose de plus sain, comme peut-être 'calendar-' . $vars['node']->nid.

+0

Un module peut également mettre en oeuvre 'hook_preprocess_calendar_node()'. Utiliser un module personnalisé implémentant une telle fonction est préférable, car vous pouvez utiliser n'importe quel thème sans ajouter 'template_preprocess_calendar_node()' à chacun d'entre eux. – kiamlaluno

+0

Je vais certainement essayer d'écrire ma propre fonction de pré-traitement. Puis-je ajouter cette fonction dans le même fichier modèle? @kiamlaluno, merci pour l'astuce, l'écriture d'un module personnalisé semble meilleure option –

+0

@Ajinkya Kulkarni, vous pouvez l'ajouter directement à template.php dans votre thème. N'oubliez pas de vider votre cache de thème. –

0

Pour le moment, puisque je voulais juste afficher une seule image pour un nœud, j'ai changé

$newOutput.= '<img src="http://www.programmingnature.com/stackoverflow_32.png"> </img>'; 

à

$newOutput.= "<img src=http://www.programmingnature.com/stackoverflow_32.png> </img>"; 

Remarque, je viens enlevé des citations de la chaîne.

Ainsi, la sortie suivante est générée par le calendrier,

<div class="calendar monthview" id="calendar:<img src=http://www.programmingnature.com/stackoverflow_32.png> </img>255:changed:0:1"> 

    <div id="nid" class="view-field view-data-nid"> 

    <img src=http://www.programmingnature.com/stackoverflow_32.png> </img>255 

    </div> 
</div> 

Eh bien, img tag est encore inséré dans ID attribut, mais div tag est pas cassé, et je reçois la sortie correcte .

alt text http://img687.imageshack.us/img687/4607/calendarproblemsolved.png

Une meilleure solution permanente consiste à utiliser la fonction de pré-traitement tel que suggéré par Mark et kiamlaluno

Questions connexes