2010-07-25 132 views
0

我想通过检查节点(或未来的分类术语)的'nid'将自定义图像添加到Drupal的日历视图中。我正在编写这个自定义代码在views-view-field-calendar-nid.tpl中。将自定义图像添加到日历视图

问题是,view-view-field-calendar-nid.tpl输出的内容也被插入div标签的'id'属性中。请参阅第div标记。

254是输出,它也被插入'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>  

所以,当观点视场 - 日历 - nid.tpl输出IMG标签,它也插入到了“id”属性,它打破了第二DIV标签。

请参阅下面的输出

<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> 

截图:

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

请注意,日历视图试图插入 'id' 属性里面有IMG标签输出现在的一切都搞砸了......

如何防止Calender将输出插入到'id'属性中?或者有没有其他的方式在Calender视图中插入图像?

以下是视图,视图场的代码 - 日历 - 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; 

?> 

回答

1

日历的非常愚蠢的。发生的事情是,日历视图根据视图中的所有可用字段创建一个ID,并将它们串在一起以创建唯一的ID。理论上很好,但它假设很多(比如你没有做你想做的事情)。

你可以在theme/theme.inc中看到它在template_preprocess_calendar_node()中试图做什么。解决方案是创建自己的预处理函数mytheme_preprocess_calendar_node(&$vars),并将$vars['fields']['id']设置为更加理智的方式,例如可能是'calendar-' . $vars['node']->nid

+0

所建议的模块还可以实现'hook_preprocess_calendar_node()'。使用实现这种功能的自定义模块会更好,因为您可以使用任何主题而无需为每个主体添加'template_preprocess_calendar_node()'。 – kiamlaluno 2010-07-25 23:49:14

+0

我一定会尝试编写我自己的预处理函数。我可以在同一个模板文件中添加此功能吗? @kiamlaluno,感谢提示,编写自定义模块看起来更好选项 – 2010-07-26 18:14:57

+0

@Ajinkya Kulkarni,您可以将它添加到您的主题template.php中。只要记住刷新你的主题缓存。 – 2010-07-26 18:59:27

0

暂时的,因为我只是想显示一个节点一个单一的形象,我改变

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

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

注意,我只是删除从字符串引号。

因此,由日历产生下面的输出,

<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> 

好,IMG标签仍然插入ID属性,但DIV标签不破,我也得到了正确的输出。

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

更好永久解决方案是使用预处理功能由马克kiamlaluno

相关问题