将内容字段分成不同的区域


11

我的情况如下:我的内容类型为Seminar,具有字段A,B和C。我的区域为Header,Footer,Content和Sidebar Left。我希望在“研讨会”中的某些字段显示在“内容”区域中,但也要在“边栏左侧”区域中显示。

我该怎么做呢?抱歉,如果以前已经回答过。我是一名开发人员,毫不犹豫地研究了钩子和预处理器功能。我已经安装了Views模块,但是从未使用过(如果您不知道:P,这是我的第一个Drupal网站)。

干杯。

编辑:这是为Drupal 7


哪个版本的Drupal?
keva

抱歉,这是Drupal 7的功能。我已将该信息添加到我的原始问题中。
Lester Peabody

一旦解决该问题,我将接受答案。我目前正在弄清楚如何设置我的建议以正确显示内容...
Lester Peabody

Answers:


11

没有简单易用的方法将节点的内容添加到页面上的不同区域。有多种方法可以解决此问题。

非编码方式:视图和块

创建一个视图

  • 类型:块
  • 内容相关过滤器:内容:Nid
    • 默认值:从当前页面抓取
  • 栏位:任何您想要的
  • 过滤:
    • 内容类型:研讨会

(加上您想要的其他附加设置)

然后转到管理员块页面将新创建的视图块移动到要显示的区域。它仅应显示在研讨会节点页面上。

对所有区域重复

使用theme_preprocess_region()的编码方式:

代码看起来像这样

MYTHEME_preprocess_region(&$variables) {
  if (isset($node) && ($node->type == 'seminar' )) {
     //add new variable here.     
  }
}

这仅适用于Drupal 7。现在在您的region.tpl.php中可用。


1
视图/块方法实际上是我更喜欢的一种方法,但是建议使用Display Suite,因为有些人认为它更易于使用。
jhedstrom 2011年

我发现,视图对此非常有用。总的来说,景色很棒。我还使用菜单块模块根据我在站点中的位置来拆分菜单(让我拆分主菜单,使其始终显示,而子菜单则基于我属于主菜单的菜单)。绝对超赞的模块,强烈推荐。
Lester Peabody

我问了将近一个月,有点疯狂,接受了答案,但是现在才开始使用该答案(尽管自那以后我已经使用Views了很多)。您能否澄清一下Drupal 7对Views的使用?看来,Drupal 7的视图3中不存在参数:nid。
Lester Peabody

我想到了。参数的概念已由“高级”下的上下文过滤器代替。
Lester Peabody

D7,内容比对工具:内容:NID。编辑:看到您找到它,然后我才能回答
iStryker

7

显示器套房模块允许你这样做。您需要启用Display Suite Extras模块,以将主题区域公开为节点组件的目标。有关如何执行此操作的信息,可以在Display Suite文档的“ 将内容添加到阻止页面”中 找到。


5

我遇到了同样的问题。解决方案非常简单。您可以基于以下事实:在Drupal 7中,我们不仅可以定义FULL和TEASER(我们从最旧的版本中知道),还可以定义自己的view_mode。因此,定义另一个view_mode以在您的区域中使用:例如LEFTHAND。Drupal在内容区域显示FULL view_mode。因此,您必须对Drupal说才能在“边栏左侧”区域中显示LEFTHAND。

  1. 在template_preprocess_page()中

    if ($vars['node']) {
    $vars['page']['sidebar_left'][] = node_view($vars['node'], 'lefthand');
    }

  2. 在node.tpl.php中为左视图模式添加新的显示

    if ($view_mode == 'lefthand') {
    // render content fields here
    }


1
这个答案是超智能的,除了定义视图模式之外,不需要任何外部模块。Display Suite的简单替代方法是实体视图模式:drupal.org/project/entity_view_mode
paul-m

我真的很喜欢这个。将其包装在if函数中,使其仅出现在某些页面上。我曾经if (array_key_exists('block_14',$vars['page']['main_content'])){}使它仅出现在具有特定块的页面上。
Dominic Woodman

3

如果Display Suite看起来太满足您的需求了(这是一个很棒的模块,但是如果您只需要重新定位几个字段,则可能会显得过高),那么有一个仅用于此目的的模块-> CCK Blocks

我知道它被称为“ CCK”块,但它可与Drupal 7(将CCK的功能引入核心)一起使用。


1

@Patrik Lucan的答案的轻微更改if ($vars['node'])导致我在不是节点的页面上遇到问题,例如,自定义首页(带有阻止页面)或视图页面。

变成:

if (array_key_exists('node', $vars))

这似乎已经解决了问题。


0

同时,有一个用于此的模块。从模块页面:

以块为单位的字段提供了一种简单的方法来显示块中当前节点的一个或多个字段。

该模块的目标是作为诸如Panels和Display Suite之类的模块的轻巧替代品,或者使用Views定义仅检索一个字段的块。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.