【问题标题】:Adding custom images to a Calendar view将自定义图像添加到日历视图
【发布时间】:2010-07-25 21:26:40
【问题描述】:

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

问题在于,views-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>    

所以当 views-view-field--calendar--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

请注意,日历视图试图将带有 img 标记的输出插入到该 'id' 属性中,现在一切都搞砸了...

如何防止 Calender 将输出插入“id”属性?或者有没有其他方法可以在日历视图中插入图像?

下面是views-view-field--calendar--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; 

?>

【问题讨论】:

    标签: drupal drupal-6 drupal-views


    【解决方案1】:

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

    您可以在 theme/theme.inc 中的 template_preprocess_calendar_node() 中看到它正在尝试做什么。解决方案是创建您自己的预处理函数mytheme_preprocess_calendar_node(&amp;$vars),并将$vars['fields']['id'] 设置为更合理的值,例如'calendar-' . $vars['node']-&gt;nid

    【讨论】:

    • 一个模块也可以实现hook_preprocess_calendar_node()。使用实现此类功能的自定义模块会更好,因为您可以使用任何您想要的主题,而无需为每个主题添加template_preprocess_calendar_node()
    • 我一定会尝试编写自己的预处理函数。我可以在同一个模板文件中添加这个功能吗? @kiamlaluno,感谢提示,编写自定义模块看起来更好
    • @Ajinkya Kulkarni,您可以将其添加到您主题中的 template.php 中。请记住刷新您的主题缓存。
    【解决方案2】:

    暂时,因为我只想为一个节点显示单个图像,所以我改变了

    $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

    更好的永久解决方案是使用 Markkiamlaluno 建议的预处理功能

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-30
      • 2014-06-10
      • 1970-01-01
      • 2012-05-12
      相关资源
      最近更新 更多