从实体获取字段的值


11

我在网站上安装的是Entity API和Entityform模块。Entityform模块允许我创建任何用户都可以提交的表单,并且表单域可供我在视图中使用,类似于内容类型的工作方式。

通常,要使用php将节点的字段值拉入模板,我会执行以下操作:

<?php echo $node->field_name[$node->language][0]['value']; ?>

但是,这不适用于实体形式/实体。

有人知道为实体表单中的字段执行此操作的方法吗?有人建议使用devel和dpm()函数,但我也不知道如何使用它们。

关于如何获得该领域价值的一些具体示例确实会对我有很大帮助。

Answers:


13

您是否尝试过使用entity_metadata_wrapper访问值?

$entityform_id = 12; // entity form id
$entityform = entityform_load($entityform_id);
$entityform_wrapper = entity_metadata_wrapper('entityform', $entityform);
// Access fields with $entityform_wrapper->field_name->value() or ->field_name->raw()
drupal_set_message($entityform_wrapper->field_my_field->value()); // for example

4
将来的读者注意:这是正确的,但是安装实体API模块不需要访问实体字段。Drupal核心已经具有访问实体字段的功能。
kiamlaluno

是的,但是OP标记并指定了他们已安装了Entity API模块,因此安装了object_metadata_wrapper,此外,它也是对Entityforms模块的依赖。
大卫·托马斯

2
entity-api是从Drupal 7实现的Entity API的标签,而不是Entity API模块的标签。注意是为了避免初学者开发人员认为Entity API模块对于处理实体是必需的。我没有说答案不正确。:)
kiamlaluno

7

在不使用实体API模块的情况下,要获取与实体关联的字段的值,请使用field_get_items() ; 您只需传递实体类型,实体对象和字段名称。

例如,要获取注释的正文,请使用以下代码。

if ($items = field_get_items('comment', $comment, 'comment_body')) {
  // ...
}

要获取节点的主体,可以使用以下代码。

if ($items = field_get_items('node', $node, 'body')) {
  // ...
}

实体对象是从entity_load()返回的对象,或者是该实体的特定加载函数,例如node_load()comment_load()taxonomy_term_load()。在Drupal 8中,这些函数是的包装entity_load()

如果要显示字段的内容,则应使用field_view_field()


0

通常,您可以使用$ node属性,因为您或您正在使用的某些代码预先调用了node_load()。

您需要完全加载实体,然后才能获取其属性。

使用entity_load()http://api.drupal.org/api/drupal/includes%21common.inc/function/entity_load/7

然后,实际上将有一个加载的实体对象,您可以在的字段中获得。

使用dpm()与其他任何函数相同,只需要安装devel模块。

因此,请执行以下操作:

<?php
$entity = entity_load('myEntityType', $entity_id);
dpm($entity);
?>

0

尝试:

$value= field_get_items('entityform', $entityform, 'field_myfieldname');
print '<p>the value is: '.$value.'</p>';

这应该打印该字段的值。

如果是数组,请尝试以下操作:

$values = field_get_items('entityform', $entityform, 'field_myfieldname');
$value = $values[0]['value'];
print '<p>the value is: '.$value.'</p>';

请记住,这是原始输出,根据值的来源,您可能必须在此处手动清理该值。

另请:函数field_get_items


0

将其放在您的模块之一内,然后转到表单页面,您将找到所需的信息。

function yourmodulename_form_alter(&$form, &$form_state, $form_id) {

  dpm($form);

}

-1

而不是使用dpm并安装该模块,我使用:

print_r('<pre>');
print_r($node);
print_r('</pre>');

希望这将帮助您挖掘价值。


嗯,对我来说,这不是什么输出:(难道是因为我正在浏览的entityform提交,而不是一个节点或将一个entityform提交实际上是一个节点如此混乱??
达斯汀

我不确定,那么我假设您需要除$ node之外的其他变量。
布莱恩(Brian)

1
问题是关于访问实体的字段,而不是如何打印实体。
kiamlaluno
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.