你在这里

给drupal自带的论坛版块添加一个图标

主标签

用drupal制作一个小型论坛过程中,想可以通过后台给每个论坛版块添加一个小图标,但是在路径“首页 » 管理 » 结构 » 论坛”这个设置界面里面找不到地方添加图标,也没有地方可以添加新字段,在热心群友“大连小齐”指点下,知道了可以通过“首页 » 管理 » 结构 » 分类 » 论坛”下,添加新字段,设置如下图

1.jpg

红色框里面的就是自己添加的新字段

由于我是想在forum-list.tpl.php里面获取到这个新增加的值,所以我hook了preprocess_forum_list,我的样式名为onetheme,hook函数如下:

function onetheme_preprocess_forum_list(&$variables){
  foreach ($variables['forums'] as $id => $forum) {
    if(!isset($variables['forums'][$id]->icon)){
      $taxonomy_term=taxonomy_term_load($variables['forums'][$id]->tid);
      $imageuri=$taxonomy_term->field_forum_image['und'][0]['uri'];
      $variables['forums'][$id]->icon=file_create_url($imageuri);
    }
  }
}

这里要说明的是为什么要再次用taxonomy_term_load函数加载多一次每个论坛版块的内容,因为默认加载的论坛版块里面是没有新增加的字段的。

最后在forum-list.tpl.php就可以循环中通过$forum->icon获取到每个论坛版块的图标了。

 

标签: 
Drupal 版本: 

猜你喜欢

文中的“file_create_url”可以不用,而是直接输出“$taxonomy_term->field_forum_image['und'][0]['uri']”,代码如下:

/**
 * Implements template_preprocess_forum_list().
 * Add an custom icon for each forum term.
 */
function mybartik_preprocess_forum_list(&$variables){
  foreach ($variables['forums'] as $id => $forum) {
    if(!isset($variables['forums'][$id]->icon)){
      $taxonomy_term = taxonomy_term_load($variables['forums'][$id]->tid);
      $variables['forums'][$id]->icon = $taxonomy_term->field_forum_image['und'][0]['uri'];
    }
  }
}

此外,可以再详细一点说明一下如何将新增的icon输出到模板里:

  1. 复制Drupal核心的forum模块下的模板:forum-list.tpl.php到你当前的主题目录下。
  2. 编辑复制后的forum-list.tpl.php,主要是修改54-56行代码:
    <div class="icon forum-status-<?php print $forum->icon_class; ?>" title="<?php print $forum->icon_title; ?>">
                <span class="element-invisible"><?php print $forum->icon_title; ?></span>
    </div>

    修改为:
     

    <div class="icon forum-status-<?php print $forum->icon_class; ?>" title="<?php print $forum->icon_title; ?>">
                <?php print theme("image",array("path"=>$forum->icon));?></span>
    </div>

    这里建议使用theme("image",$variables = array())来输出更规范一些。

  3. 注意何时清Drupal Cache,当新增一个Hook或者tpl的时候,记得清缓存,当函数和tpl已经创建了,只是修改的话,一般是不需要清缓存的。

Drupal China http://drupalchina.cn

谢谢东方老大的指正,后面的这个theme("image",$variables = array())是我没想到的,还有这个代码弄得真漂亮!