Puncte:1

Cum pot dezactiva revizuirea pe un anumit câmp de nod

drapel de

În prezent, folosesc hook_entity_extra_field_info() și hook_ENTITY_TYPE_view() pentru a crea un câmp personalizat afișat în noduri care generează conținut dinamic prin PHP.

Cu toate acestea, Drupal 9 pare să urmărească modificările aduse rezultatului acestui câmp de fiecare dată când salvez o revizuire a nodului, ceea ce nu vreau, deoarece conținutul acelui câmp este generat dinamic și este deja sub controlul versiunii într-un modul personalizat.

Există vreo modalitate de a spune Drupal într-unul dintre aceste cârlige, sau oriunde altundeva în configurație, să nu urmărească revizuirile pentru un anumit câmp de nod?

sonfd avatar
drapel in
Cum urmărește exact modificările? Este doar un câmp de afișare? sau de fapt stochează o valoare în baza de date?
leymannx avatar
drapel ne
Ce înseamnă exact „generează conținut dinamic”? Ne puteți arăta un cod exemplu? Dacă generați conținut în sensul de a atașa ceva la același nod, desigur, revizuirea începe dacă nu stocați lucrurile în altă parte.Pseudo-câmpurile sunt utilizate în mod normal doar pentru afișarea markupurilor calculate, nu pentru generarea de conținut.
Puncte:0
drapel de

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');
  }
}

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.