Приклад створення у матеріалів обчислюваного поля "Age", яке повертатиме кількість секунд, що минуло з моменту додавання ноди. Значення не зберігатиметься в базі, а вираховуватиметься при першому зверненні до нього.
1. Створюємо клас поля:
// src/ComputedNodeAgeFieldItemList.php
namespace Drupal\MODULENAME;
use Drupal\Core\Field\FieldItemList;
use Drupal\Core\TypedData\ComputedItemListTrait;
use Drupal\node\NodeInterface;
class ComputedNodeAgeFieldItemList extends FieldItemList {
use ComputedItemListTrait;
/**
* {@inheritdoc}
*/
protected function computeValue() {
$node = $this->getEntity(); /** @var NodeInterface $node */
$node_age = \Drupal::time()->getCurrentTime() - $node->getCreatedTime();
$this->list[0] = $this->createItem(0, $node_age);
}
}
2. Додаємо поле до матеріалів:
// src/ComputedNodeAgeFieldItemList.php
namespace Drupal\MODULENAME;
use Drupal\Core\Field\FieldItemList;
use Drupal\Core\TypedData\ComputedItemListTrait;
use Drupal\node\NodeInterface;
class ComputedNodeAgeFieldItemList extends FieldItemList {
use ComputedItemListTrait;
/**
* {@inheritdoc}
*/
protected function computeValue() {
$node = $this->getEntity(); /** @var NodeInterface $node */
$node_age = \Drupal::time()->getCurrentTime() - $node->getCreatedTime();
$this->list[0] = $this->createItem(0, $node_age);
}
}
3. Скидаємо кеш.
Після цього можно звертатися до поля стандартним способом:
$age = $node->get('age')->value;
Коментарі