在drupal 7的内容类型TPL文件中显示字段集合循环

时间:2015-04-23 12:10:00

标签: drupal collections drupal-7 field

我在Drupal 7中创建了一个“about”的内容类型。我有一个名为“field_usf_projects”的字段集合,它设置为unlimited,包含2个字段“usf_title”和“usf_description”。现在我想运行一个for循环来检索field_usf_projects,然后在ul-li结构中显示2个字段(“usf_title”和“usf_description”)。

我已经浏览了很多链接但找不到合适的解决方案。请帮帮我。

提前致谢。

3 个答案:

答案 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

    查看

    让我知道什么是更好的多字段或字段集合。

    谢谢!