logo

Dodatni tipovi blokova (EBT) - Novo iskustvo rada sa Layout Builder-om❗

Dodatni tipovi blokova (EBT) – stilizovani, prilagodljivi tipovi blokova: slajdšouvi, kartice sa tabovima, kartice, akordeoni i mnogi drugi. Ugrađena podešavanja za pozadinu, DOM Box, javascript dodatke. Iskusite budućnost kreiranja rasporeda već danas.

Demo EBT moduli Preuzmite EBT module

❗Dodatni tipovi pasusa (EPT) – Novo iskustvo rada sa pasusima

Dodatni tipovi pasusa (EPT) – analogni skup modula zasnovan na pasusima.

Demo EPT moduli Preuzmite EPT module

Scroll
18/06/2025, by Ivan
  • Drupal 7 – Entiteti su bili opšti stdClass objekti.
  • Drupal 8 – Entiteti su sada strogo tipizirani objekti, pri čemu svaki tip entiteta definiše klasu koja će se koristiti za instance tog entiteta.

Zahtevi
Klase entiteta moraju biti smeštene u podprostor imena Entity modula koji obezbeđuje taj tip entiteta, na primer \Drupal\[ime_modula]\Entity. To znači da se PHP fajlovi za klase entiteta nalaze u folderu modula src/Entity.

Dokumentacioni blok klase mora sadržati anotaciju EntityType koja definiše metapodatke za entitete tog tipa. To uključuje stvari poput naziva tipa entiteta, kontrolera, tabela itd. Za detaljan spisak svih dostupnih svojstava metapodataka pogledajte klasu \Drupal\Core\Entity\Annotation\EntityType.

Naming

Nazivi tipova objekata treba da imaju prefiks sa imenom modula ako ime tipa objekta i modula nisu ista. Prefiks za samu klasu entiteta nije potreban jer se nalazi u prostoru imena definisanom od strane modula, pod uslovom da je naziv klase dovoljno jasan. Na primer, tip entiteta za taksonomijske termine je taxonomy_term, a ime klase je Drupal\taxonomy\Entity\Term.

Interfejsi

Drupal 8 preporučuje korišćenje hintova i metoda putem interfejsa umesto direktno klasa. Na primer, skladište za opšte entitete prima tip hint EntityInterface, kao u hook_entity_insert (EntityInterface $entity), dok skladište specifično za čvor (node) prima tip hint NodeInterface, kao u hook_node_insert (NodeInterface $node).

Polja/svojstva entiteta često su vrlo jednostavna i orijentisana na skladištenje, a kod entiteta sadržaja se ne koriste direktno svojstva polja (uključujući osnovna polja poput naslova čvora).

Zato se preporučuje da se definiše interfejs sa dokumentovanim imenima metoda. Pridržavajte se sledećih pravila:

  • Metode obično imaju prefikse get/set/is ili slične: getSomething(), setSomething($value), isSomething().
  • Dodajte metode samo za stvari koje drugi kod treba da menja. Na primer, datum poslednje izmene čvora ($node->updated) ne bi trebalo da se menja, zato postoji $node->getChangedTime(), ali nema $node->setChangedTime().
  • Koristite samorazumljive nazive metoda, na primer metoda za pristup $node->status se zove $node->isPublished().

Preglednost

Da biste saznali koje tipove entiteta neki modul pruža, pogledajte klase u podprostoru imena Entity tog modula koje sadrže anotaciju @EntityType, koja takođe sadrži ime u ključu anotacije id.

Kada tražite gde je definisan određeni tip entiteta, prvo tražite prefiks tipa entiteta. Ako modul ne koristi ovo imenovanje, možete pretražiti po id = "$type". Ako znate klasu ili interfejs, prostor imena pokazuje odakle dolazi.

Primer

core/modules/node/src/Entity/Node.php:

namespace Drupal\node\Entity;

use Drupal\Core\Entity\ContentEntityBase;
use Drupal\Core\Entity\EntityChangedTrait;
use Drupal\Core\Entity\EntityStorageInterface;
use Drupal\Core\Entity\EntityTypeInterface;
use Drupal\Core\Field\BaseFieldDefinition;
use Drupal\Core\Session\AccountInterface;
use Drupal\node\NodeInterface;
use Drupal\user\UserInterface;

/**
 * Definiše klasu entiteta čvora.
 *
 * @ContentEntityType(
 *   id = "node",
 *   label = @Translation("Sadržaj"),
 *   bundle_label = @Translation("Tip sadržaja"),
 *   handlers = {
 *     "storage" = "Drupal\node\NodeStorage",
 *     "storage_schema" = "Drupal\node\NodeStorageSchema",
 *     "view_builder" = "Drupal\node\NodeViewBuilder",
 *     "access" = "Drupal\node\NodeAccessControlHandler",
 *     "views_data" = "Drupal\node\NodeViewsData",
 *     "form" = {
 *       "default" = "Drupal\node\NodeForm",
 *       "delete" = "Drupal\node\Form\NodeDeleteForm",
 *       "edit" = "Drupal\node\NodeForm"
 *     },
 *     "route_provider" = {
 *       "html" = "Drupal\node\Entity\NodeRouteProvider",
 *     },
 *     "list_builder" = "Drupal\node\NodeListBuilder",
 *     "translation" = "Drupal\node\NodeTranslationHandler"
 *   },
 *   base_table = "node",
 *   data_table = "node_field_data",
 *   revision_table = "node_revision",
 *   revision_data_table = "node_field_revision",
 *   translatable = TRUE,
 *   list_cache_contexts = { "user.node_grants:view" },
 *   entity_keys = {
 *     "id" = "nid",
 *     "revision" = "vid",
 *     "bundle" = "type",
 *     "label" = "title",
 *     "langcode" = "langcode",
 *     "uuid" = "uuid",
 *     "status" = "status",
 *     "uid" = "uid",
 *   },
 *   bundle_entity_type = "node_type",
 *   field_ui_base_route = "entity.node_type.edit_form",
 *   common_reference_target = TRUE,
 *   permission_granularity = "bundle",
 *   links = {
 *     "canonical" = "/node/{node}",
 *     "delete-form" = "/node/{node}/delete",
 *     "edit-form" = "/node/{node}/edit",
 *     "version-history" = "/node/{node}/revisions",
 *     "revision" = "/node/{node}/revisions/{node_revision}/view",
 *   }
 * )
 */
class Node extends ContentEntityBase implements NodeInterface {
  // ...
}

Da bismo dobili celokupnu sliku entiteta u Drupal 8, možemo pogledati sledeću dijagramu. Ona prikazuje klase entiteta. Da biste je pogledali, otvorite u novom tabu:

classDrupal_Entities

 

Source URL:

Drupal’s online documentation is © 2000-2020 by the individual contributors and can be used in accordance with the Creative Commons License, Attribution-ShareAlike 2.0. PHP code is distributed under the GNU General Public License.