Drupal CMS 内容板块设计与前端适配结合

Drupal Node View Mode

Drupal针对node和entity设置有不同的view mode,不同的view mode可以有不同的展示方式。

Node和entity可以根据需要添加不同的字段,而每个字段可以在manage display选项卡下进行相关的设置。

当在manage display中将字段下拉到hidden中时,前台的模板tpl文件则获取不到相关的字段信息,即被设置为hidden的字段是没有被core process的。

针对多级产品分类与产品展示的相关问题的解决办法

假如网站的层级分类如下

term1
|—-term a
|—-term b
term2
|—-term c
term3
|—-term d
|——–term (1)
|——–term (2)
|——–term (3)
|——–term (4)

由于drupal默认的分类系统采用,如果该分类下无 taged node, 则该分类taxonomy term会被显示为 no content,和实际的业务需求脱节。正常的,一个网站会有多级分类系统,分类下如果有子分类,则在上一级的父分类页面应该显示属于该分类下的子分类。比如term 3页面应该显示其下的子分类 term d, term (1), term (2), term(3), term (4)。最好的情况是term d的页面需要显示被其下子分类 taged node。

要实现这样的功能,就不得不利用到view mode和views 模块。

drupal 默认的分类展示页面是将term下的taged node依次用node.tpl.php在view mode -> teaser 下渲染出来。这种显示方式缺乏灵活性,我们将会使用views -> block来替换装这种处理方式。

具体的处理办法是:

  1. 修改node.tpl.php模板文件,删除 view mode -> teaser 下模板打印的所有内容
  2. 回到node field管理页面,在manage dispaly 选项中将 teaser 模式下的所有字段设置为hidden。
  3. 新建views – nodes list block, 标的为node field, context filter 中添加字段 has taxonomy term with depth, depth可以根据需要设置为2-5,如果分类层级比较多,则可以将depth设置的大一些。
  4. 使用hook_page_build覆写taxonomy term页面的renderable array, 使用views_embed_view将新建的views – nodes list block添加到 $page中。剩下的就是将block交给drupal的主题层渲染了。

这里需要注意的是:

  1. $page[‘content’][‘system_main’][‘term_heading’]有些多余,应该unset
  2. 如果有的分类下没有taged node,则需要在hook_page_build中将$page[‘content’][‘system_main’][‘no_content’])进行unset