我在Drupal 7中创建了一个“about”的内容类型。我有一个名为“field_usf_projects”的字段集合,它设置为unlimited,包含2个字段“usf_title”和“usf_description”。现在我想运行一个for循环来检索field_usf_projects,然后在ul-li结构中显示2个字段(“usf_title”和“usf_description”)。
我已经浏览了很多链接但找不到合适的解决方案。请帮帮我。
提前致谢。
答案 0 :(得分:3)
这是我的解决方案,在hook_node_view上,您可以使用实体包装器来获取字段
function mymodule_node_view($node, $view_mode, $langcode) {
// Check if the node is type 'about'.
if ($node->type != 'about') {
return;
}
// Get the contents of the node using entity wrapper.
$node_wrapper = entity_metadata_wrapper('node', $node);
// Get the contents of the field collection.
$values = $node_wrapper->field_usf_projects;
// Loop field_usf_projects.
foreach ($values as $item) {
// Print the values of the fields.
var_dump($item->usf_title->value());
var_dump($item->usf_description->value());
}
}
您可以为
添加标记,而不是转储。
更好的做法是使用hook_preprocess_node将标记直接添加到$ variables中,然后通过模板打印它们。
https://api.drupal.org/api/drupal/modules!node!node.module/function/template_preprocess_node/7
答案 1 :(得分:0)
我可以告诉你我是如何处理的,事件有点脏,我冒着被钉十字架的危险,但它对我有用。如果您在节点模板内,则具有$ node对象。使用print_r
或类似方式打印,然后按照输出结构来获取数据。它可能类似于:
$node->field_usf_title['und']...
如果你没有那个$ node对象找到节点id并用
加载节点$node = node_load($nid);
第一
答案 2 :(得分:0)
我终于厌倦了Field系列。我无法获得任何数据。我使用过Multifield,它比Field系列好得多。请在https://www.drupal.org/project/multifield
查看让我知道什么是更好的多字段或字段集合。
谢谢!