我的情况如下:我的内容类型为Seminar,具有字段A,B和C。我的区域为Header,Footer,Content和Sidebar Left。我希望在“研讨会”中的某些字段显示在“内容”区域中,但也要在“边栏左侧”区域中显示。
我该怎么做呢?抱歉,如果以前已经回答过。我是一名开发人员,毫不犹豫地研究了钩子和预处理器功能。我已经安装了Views模块,但是从未使用过(如果您不知道:P,这是我的第一个Drupal网站)。
干杯。
编辑:这是为Drupal 7。
我的情况如下:我的内容类型为Seminar,具有字段A,B和C。我的区域为Header,Footer,Content和Sidebar Left。我希望在“研讨会”中的某些字段显示在“内容”区域中,但也要在“边栏左侧”区域中显示。
我该怎么做呢?抱歉,如果以前已经回答过。我是一名开发人员,毫不犹豫地研究了钩子和预处理器功能。我已经安装了Views模块,但是从未使用过(如果您不知道:P,这是我的第一个Drupal网站)。
干杯。
编辑:这是为Drupal 7。
Answers:
没有简单易用的方法将节点的内容添加到页面上的不同区域。有多种方法可以解决此问题。
非编码方式:视图和块
创建一个视图
(加上您想要的其他附加设置)
然后转到管理员块页面将新创建的视图块移动到要显示的区域。它仅应显示在研讨会节点页面上。
对所有区域重复
使用theme_preprocess_region()的编码方式:
代码看起来像这样
MYTHEME_preprocess_region(&$variables) {
if (isset($node) && ($node->type == 'seminar' )) {
//add new variable here.
}
}
这仅适用于Drupal 7。现在在您的region.tpl.php中可用。
我遇到了同样的问题。解决方案非常简单。您可以基于以下事实:在Drupal 7中,我们不仅可以定义FULL和TEASER(我们从最旧的版本中知道),还可以定义自己的view_mode。因此,定义另一个view_mode以在您的区域中使用:例如LEFTHAND。Drupal在内容区域显示FULL view_mode。因此,您必须对Drupal说才能在“边栏左侧”区域中显示LEFTHAND。
在template_preprocess_page()中
if ($vars['node']) {
$vars['page']['sidebar_left'][] = node_view($vars['node'], 'lefthand');
}
在node.tpl.php中为左视图模式添加新的显示
if ($view_mode == 'lefthand') {
// render content fields here
}
if (array_key_exists('block_14',$vars['page']['main_content'])){}
使它仅出现在具有特定块的页面上。
如果Display Suite看起来太满足您的需求了(这是一个很棒的模块,但是如果您只需要重新定位几个字段,则可能会显得过高),那么有一个仅用于此目的的模块-> CCK Blocks。
我知道它被称为“ CCK”块,但它可与Drupal 7(将CCK的功能引入核心)一起使用。
@Patrik Lucan的答案的轻微更改if ($vars['node'])
导致我在不是节点的页面上遇到问题,例如,自定义首页(带有阻止页面)或视图页面。
变成:
if (array_key_exists('node', $vars))
这似乎已经解决了问题。