Puncte:1

Cum se poate face o entitate personalizată de câmp?

drapel us

Acest lucru a fost întrebat aici înainte; dar întrebarea este închisă și cele câteva răspunsuri nu oferă suficiente informații.

Încerc să folosesc un modul contrib (sitewide_alert) care oferă propria sa entitate personalizată.Încerc să îmi dau seama cum să corectez acest modul pentru a-l face aplicabil (și cum să fac acest lucru în general).

În alte postări, am văzut sugestii pentru a adăuga următoarele la adnotarea ContentEntityType:

  • fieldable = TRUE;
  • bundle_entity_type = ??
  • field_ui_base_route -> sugestii diferite, dar există deja pentru acest modul care indică formularul de configurare al modulului.

Dar niciunul dintre aceștia nu părea să rezolve asta.

adnotarea completă pentru entitate este:

* @ContentEntityType(
 * id = "sitewide_alert",
 * label = @Translation ("Alertă la nivel de site"),
 * label_plural = @Translation ("Alerte la nivel de site"),
 * label_collection = @Translation ("Alerte la nivel de site"),
 * handler = {
 * "storage" = "Drupal\sitewide_alert\SitewideAlertStorage",
 * "view_builder" = "Drupal\Core\Entity\EntityViewBuilder",
 * "list_builder" = "Drupal\sitewide_alert\SitewideAlertListBuilder",
 * "views_data" = "Drupal\sitewide_alert\Entity\SitewideAlertViewsData",
 * "translation" = "Drupal\sitewide_alert\SitewideAlertTranslationHandler",
 *
 * „form” = {
 * "default" = "Drupal\sitewide_alert\Form\SitewideAlertForm",
 * "add" = "Drupal\sitewide_alert\Form\SitewideAlertForm",
 * "edit" = "Drupal\sitewide_alert\Form\SitewideAlertForm",
 * "delete" = "Drupal\sitewide_alert\Form\SitewideAlertDeleteForm",
 *},
 * „furnizor_rută” = {
 * "html" = "Drupal\sitewide_alert\SitewideAlertHtmlRouteProvider",
 *},
 * "access" = "Drupal\sitewide_alert\SitewideAlertAccessControlHandler",
 *},
 * base_table = "sitewide_alert",
 * data_table = "sitewide_alert_field_data",
 * revision_table = "sitewide_alert_revision",
 * revision_data_table = "sitewide_alert_field_revision",
 * show_revision_ui = TRUE,
 * traducebil = ADEVĂRAT,
 * admin_permission = „administrați entități de alertă la nivel de site”,
 * entity_keys = {
 * "id" = "id",
 * „revizuire” = „vid”,
 * "label" = "nume",
 * "uuid" = "uuid",
 * "uid" = "user_id",
 * "langcode" = "langcode",
 * „publicat” = „stare”,
 *},
 * revision_metadata_keys = {
 * "revision_user" = "revision_user",
 * "revision_created" = "revision_created",
 * "revision_log_message" = "revision_log",
 *},
 * linkuri = {
 * "canonical" = "/admin/content/sitewide_alert/{sitewide_alert}",
 * "add-form" = "/admin/content/sitewide_alert/add",
 * "edit-form" = "/admin/content/sitewide_alert/{sitewide_alert}/edit",
 * "delete-form" = "/admin/content/sitewide_alert/{sitewide_alert}/delete",
 * "version-history" = "/admin/content/sitewide_alert/{sitewide_alert}/revisions",
 * "revision" = "/admin/content/sitewide_alert/{sitewide_alert}/revisions/{sitewide_alert_revision}/view",
 * "revision_revert" = "/admin/content/sitewide_alert/{sitewide_alert}/revisions/{sitewide_alert_revision}/revert",
 * "revision_delete" = "/admin/content/sitewide_alert/{sitewide_alert}/revisions/{sitewide_alert_revision}/delete",
 * "translation_revert" = "/admin/content/sitewide_alert/{sitewide_alert}/revisions/{sitewide_alert_revision}/revert/{langcode}",
 * "colecție" = "/admin/content/sitewide_alert",
 *},
 * field_ui_base_route = "sitewide_alert.settings",
 * constrângeri = {
 * „ScheduledDateProvided” = {}
 *}
 * )
 */

În abordarea mea de încercare/eroare, am observat că am creat interfața de utilizare Manage Fields/Display/etc pentru fiecare entitate pe care o creasem anterior. Deci, cred că acest lucru este posibil legat de faptul că nu aveți un pachet definit? Cazul meu de utilizare nu necesită crearea de noi pachete (similar cu entitatea Utilizator).

În ciuda celorlalte răspunsuri postate; Cred că modificarea adnotării nu este suficientă pentru a adăuga această funcționalitate.

Puncte:1
drapel cn

Nu este nimic în neregulă cu adnotarea tipului de entitate. După ce ați eliminat acest cod, dezactivând în mod intenționat câmpul rute UI

https://git.drupalcode.org/project/sitewide_alert/-/blob/8.x-1.6/src/Routing/RouteSubscriber.php

entitatea ar trebui să fie disponibilă la admin/content/sitewide_alert/settings/fields.

Acesta este un modul foarte tare.După ce m-am jucat puțin, am aflat că modulul are două rute de setări, forma falsă menționată într-un loc ciudat sub conținut și formularul oficial de setări a modulului în configurare. Dacă atașați câmpul UI la acest formular, este mai ușor de găsit, cred:

field_ui_base_route = "sitewide_alert.sitewide_alert_config_form"
liquidcms avatar
drapel us
minunat. Nici măcar nu văzusem acel fișier de rută blocând în mod intenționat utilizatorul să ajungă la managementul câmpului. Bănuiesc că întreținătorul proiectului presupune că cunoaște fiecare caz de utilizare posibil pentru modulul său. Și da, mutarea câmpului ui sub formularul de configurare are mai mult sens, cred. Ca și entitatea Utilizator; deși întotdeauna personal, deși a fost greșit să fii acolo și ar trebui să fie sub Structură. Voi adăuga și linkurile/filele lipsă și voi crea un patch. Multumesc pentru ajutor.
liquidcms avatar
drapel us
Bănuiesc că asta înseamnă răspunsul predominant pe care l-am văzut postat acea adnotare: „fieldable = true” este solicitat - nu este necesar (nu este așa cum nu îl am acum și totul funcționează conform așteptărilor).
4uk4 avatar
drapel cn
Nu, această adnotare nu există în D8/9.Pentru un tip minim de entitate cu câmpuri, consultați https://drupal.stackexchange.com/questions/283826/how-do-i-add-a-view-mode-to-a-simple-custom-entity

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.