Computed field: суммировать значение из field collection

Главные вкладки

Аватар пользователя Arto Arto 11 января 2018 в 12:37

Привет

Нужно в computed field суммировать значения полей из нескольких коллекций. Коллекции с единичными полями, а не с множественными.
У меня не получается вывести значения этих полей в computed field.

Поиском нахожу вариант только для множественного поля:

$sum = 0;
$wrapper = entity_metadata_wrapper($entity_type, $entity);
foreach($wrapper->field_pay as $collection) { $sum += $collection->field_pay_count->value(); } $entity_field[0]['value'] = $sum;

и он прекрасно работает со множественным полем. Но с единичным нет.

Перепробовала кучу вариантов, но ничего не получается. Подскажите, пожалуйста, правильный вывод единственного значения из field collection в computed field.

Спасибо!

Комментарии

Аватар пользователя fairrandir fairrandir 11 января 2018 в 14:36
<?php
  
if ($field_collections field_get_items('node'$node'field_collection_name')) {
      foreach (
$field_collections as $collection) {
        
// Load field collection
        // If it is new, it does not have key 'entity' yet
        // Если вкратце - при добавлении новой коллекции в ноду, у неё при сохранении отличаются
        // поля массива от коллекций добавленных ранее.
        
if (isset($collection['entity'])) {
          
$field_collection $collection['entity'];
        } else {
          
$loaded_collection entity_load('field_collection_item', array($collection['value']));
          
$field_collection array_shift($loaded_collection); // Уже не помню зачем, смотреть через dpm
        
}
        
// Загрузить значения поля
        
$collection_field field_get_items('field_collection_item'$field_collection'field_from_collection');
        
// Обрабатываем загруженные данные, как вам угодно.
      
}
    }
?>
Аватар пользователя Arto Arto 11 января 2018 в 20:24

Ничего не получается. Даже просто значение вывести. Скорее всего, я просто не понимаю как это работает.
Ошибок не выдает, но и результата никакого.

Может на это влиять как-то тот факт, что вывод полей коллекции в ноде контролирует модуль conditional field?

У меня три коллекции field_itemone, field_itemtwo, field_item_three. В каждом из них поле field_valueone, field_valuetwo и fieldvaluethree. Мне нужно в ноде их суммировать.

Подскажите, пожалуйста.

Аватар пользователя xakudu xakudu 11 января 2018 в 22:13

вам же написали нормальный пример. Если вы умеете программировать на PHP - теперь все понятно. Ну а если не умеете - вам под конкретные условия для трех коллекций трех полей кто будет код писать ?

Аватар пользователя Arto Arto 11 января 2018 в 22:54

Заменяю в коде field_collection_name, field_from_collection

Notice: Undefined variable: node в функции eval() (строка 1 в файле /home/u10857/domains/greenbet2.u10857.ocean.vps-private.net/sites/all/modules/computed_field/computed_field.module(468) : eval()'d code).

Что я делаю не так?

Аватар пользователя fairrandir fairrandir 12 января 2018 в 16:53

В переменной $node должна лежать, как ни странно, нода. Изначально нода передаются в функцию computed_field в переменной $entity

Честно говоря, я думал затык у вас в том, что у новых полей в коллекции отличаются поля в массиве от уже сохранённых. Я тогда помучился. Но на объяснение базовых вещей времени тут, я полагаю, ни у кого особо нет.