我正在编写一个 Drupal 7 模块来显示内容中模块的子节点。
节点有一个字段parent_nodes
(节点引用),其中一个或多个节点被选择作为父节点。
首先,我创建了一个 View projects
,其中包含 block View 显示 subprojects
,并使用 显示
上下文过滤器。project
类型的节点field_parent_project
这是我的模块:
<?php
function projects_preprocess_node(&$variables) {
if ($variables['type'] == 'project') {
if (isset($variables['view_mode']) && $variables['view_mode'] == 'full') {
_projects_add_subprojects($variables);
}
}
}
function _projects_add_subprojects(&$variables) {
$nid = $variables['nid'];
$view = views_get_view('projects');
$preview = $view->preview('subprojects', array($nid));
$subprojects = array(
'#title' => t('Subprojects'),
'#label_display' => 'above',
'#weight' => 10,
//'#theme' => 'field',
'#markup' => $preview,
);
if (!isset($variables['content']['subprojects'])) {
$variables['content']['subprojects'] = array();
}
$variables['content']['subprojects'][] = $subprojects;
dpm($variables['content']);
}
这正在工作,将 View 显示输出添加到节点的内容中。
只有一些功能不起作用:
- 标题(标签)
- 当与其他内容一起渲染时,权重不会改变显示位置(它始终是第一个,位于正文上方)。
如果我取消注释 '#theme' => 'field'
行,标题将显示为标签,但不会呈现任何内容。这是因为使用了字段主题,我猜它需要 #items
并且不使用 #markup
元素。
我不能使用子节点作为引用,只能使用父节点。
解决方案必须独立于主题,因此不能回答“更改主题模板”或类似内容
如何在节点中显示子节点?我正在寻找一种方法来解释它是一个字段
最佳答案
如果您还不知道,Viewfield module允许您将 View 指定为内容类型中的字段。这可能会为您节省一些编码,但您可能不希望整个模块执行此类特定任务,因此...
如果您想继续使用已编写的自定义代码,则需要将添加的内容重新构造为正确的 render array Drupal 期望的结构。尝试这样的事情:
$subprojects_view_output = array(
'#type' => 'markup',
'#markup' => $preview,
);
$subprojects = array(
'#theme' => 'field',
'#weight' => 10,
'#title' => t('Subprojects'),
'#items' => $subprojects_view_output,
);
通过上述内容,字段的标题/标签以及字段的内容( View 本身)应该显示。该代码未经测试,因此在语法方面可能不是 100% 正确,但希望能为您提供解决方案的路径。
编辑:我测试了上面的内容,它不起作用因为为了使用现有的 theme_field函数似乎 Drupal 期望渲染字段所需的更多信息,如 #field_name
、#field_type
、#entity_type
等,正如您应该的那样请参阅警告消息。
本质上,您伪造了一个字段,如果您想继续使用内置的theme_field,则需要向Drupal提供它期望的所有信息。函数,包括 preprocess 中预期的所有变量功能。
或者,您可以继续使用原始代码并添加 #prefix
以使标题/标签呈现如下:
$subprojects = array(
'#weight' => 10,
'#prefix' => '<div id="subprojects-view">asdf:</div>',
//'#theme' => 'field',
'#markup' => $preview,
);
然后使用 CSS 相应地设置标题/标签的样式。正如您所描述的,我对权重没有任何问题。
关于php - Drupal:使用 View 输出作为节点内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13415956/