2015-12-23 6 views
0

Я могу получить поля коллекции поля, прикрепленную к моему типу контента, используя коды, как:обновить полевую коллекцию из вычисляемого поля

foreach ($entity->field_collection[LANGUAGE_NONE] as $line) {..} 

или от сущности обертки.

Но я определенно не смог обновить поля сбора со значениями, вычисленными в вычисляемое поле, как я обычно делаю с другими полями CCK, как:

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

то он сохраняется, как правило, как если бы я отредактирован field_regular 'вручную'.

с коллекцией это не будет работать (не делает ничего видимого):

$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) ; 

любой экономии() методы дает мне пустую страницу (бесконечный цикл CGI):

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

, что я должен знать, чтобы программно сохранять поля коллекции? спасибо, Джером

ответ

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.

 Смежные вопросы

  • Нет связанных вопросов^_^