从计算字段更新字段集合

时间:2015-12-23 09:26:46

标签: drupal-7 computed-field drupal-field-collection

我可以使用以下代码检索附加到我的内容类型的字段集合的字段:

$entity->field_regular[LANGUAGE_NONE][0]['value'] = $value ;

或来自实体包装。

但我绝对无法使用计算字段中计算的值更新集合字段,就像我通常使用其他CCK字段一样,如:

$entity->field_collection[LANGUAGE_NONE][$key]['field_coll_field0'][LANGUAGE_NONE][0]['value'] = $value ;
// entity wrapper way
$coll = entity_load('field_collection_item', array($line['entity']->item_id));
$wcoll = entity_metadata_wrapper('field_collection_item', $coll[$key);
$wcoll->field_coll_field0->set($value) ;

然后它被正常保存,好像我用手编辑了field_regular'。

有了集合,这将无效(没有任何可见):

entity_save('field_collection_item',$coll);
wcoll->save();

任何save()方法都给我一个空白页面(无限cgi循环):

$c

我应该以编程方式保存收集字段? 谢谢,杰罗姆

1 个答案:

答案 0 :(得分:0)

请查看Entity metadata wrappers doc页面,其中包含如何更新字段集合的简单示例,例如:

<?php
    // Populate the fields.
    $ewrapper = entity_metadata_wrapper('node', $node);
    $ewrapper->field_lead_contact_name->set($contact_name);
    $ewrapper->field_lead_contact_phone->set($contact_phone);
    $ewrapper->field_lead_contact_email->set($contact_email);  

    // Create the collection entity and set it's "host".
    $collection = entity_create('field_collection_item', array('field_name' => 'field_facilities_requested'));
    $collection->setHostEntity('node', $node);  

    // Now define the collection parameters.
    $cwrapper = entity_metadata_wrapper('field_collection_item', $collection);
    $cwrapper->field_facility->set(intval($offset));
    $cwrapper->save();  

    // Save.
    $ewrapper->save();
?>

所以你可能需要这样做:

try {
  // Entity wrapper way.
  $coll = entity_load('field_collection_item', array($line['entity']->item_id));
  $wcoll = entity_metadata_wrapper('field_collection_item', $coll);
  $wcoll->field_coll_field0 = $value;
  $wcoll->save();
} catch (Exception $e) {
  drupal_set_message(t('Error message: @error.',
        array('@error' => $e->getMessage())), 'error');
  watchdog_exception('MYMODULE', $e);
}

添加try/catch会阻止您显示空白页面。但是,如果您仍然存在问题,请检查监视程序日志或PHP日志文件中的任何错误。