Deoarece conținutul câmpului dvs. este generat dinamic, se pare că aveți nevoie de un câmp calculat. Care va elimina problema în care vă confruntați. Un câmp calculat este unul care este generat dinamic, mai degrabă decât prin introducerea utilizatorului. Deoarece este un câmp, acesta poate fi gestionat ca orice alt domeniu din Drupal (deși integrarea cu Views necesită unele eforturi suplimentare). Câmpurile sunt, de asemenea, stocate în cache cu diferitele API-uri cache ale Drupal.
Pentru a crea un câmp calculat, mai întâi extindeți Drupal\Core\Field\FieldItemList
, utilizare
cel Drupal\Core\TypedData\ComputedItemListTrait
, și implementați computeValue()
metodă:
spațiu de nume Drupal\[EXEMPLU]\Plugin\Field;
utilizați Drupal\Core\Field\FieldItemList;
utilizați Drupal\Core\TypedData\ComputedItemListTrait;
clasa SomeDynamicField extinde FieldItemList {
utilizați ComputedItemListTrait;
/**
* {@inheritdoc}
*/
funcția protejată computeValue() {
$valori = some_function_to_get_o_array_of_values();
foreach ($valori ca $index => $valoare) {
$this->list[$delta] = $this->createItem($delta, $valoare);
}
}
}
În continuare, acest câmp trebuie adăugat fiecărui tip de entitate de care aveți nevoie, în hook_entity_base_field_info_alter():
utilizați Drupal\Core\Entity\EntityTypeInterface;
utilizați Drupal\Core\Field\BaseFieldDefinition;
/**
* Implementează hook_entity_base_field_info_alter().
*/
funcția EXAMPLE_entity_base_field_info_alter(&$fields, EntityTypeInterface $entity_type) {
// Adăugați/modificați tipurile de entități după cum este necesar.
$applicable_entity_types = ['nod'];
if (în_array($entity_type->id(), $applicable_entity_types)) {
$fields['my_computed_field'] = BaseFieldDefinition::create('string')
->setName('example_field')
->setLabel(t('Exemplu de câmp calculat'))
->setDescription(t('Un exemplu de câmp calculat'))
// Setați câmpul ca câmp calculat.
->setComputed(TRUE)
// Setați clasa care generează valorile câmpului.
->setClass('\Drupal\[EXEMPLU]\Plugin\Field\Computed\SomeDynamicField');
}
}