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

Obuhvata metode API zajedničkog objekta

  • Entity::create()
  • Entity::load()
  • Entity::save()
  • Entity::id()
  • Entity::bundle()
  • Entity::isNew()
  • Entity::label()

Detaljniji API biće obrađeni u posebnim poglavljima.

Provera

// Proverite da li je objekat entitet.
if ($entity instanceof \Drupal\Core\Entity\EntityInterface) {
}

// Proverite da li je to content entity.
if ($entity instanceof \Drupal\Core\Entity\ContentEntityInterface) {
}
// ili:
if ($entity->getEntityType()->getGroup() == 'content') {
}

// Dobij tip entiteta ili ID tipa entiteta.
$entity->getEntityType();
$entity->getEntityTypeId();

// Proverite da li je to node.
if ($entity instanceof \Drupal\node\NodeInterface) {
}

Dobijanje informacija od entity / Metode entity

Dostupno je nekoliko opštih metoda za dobijanje informacija od objekta, kao što su ID, paket (bundle), ID revizije i slično. Pogledajte dokumentaciju na EntityInterface za detalje.

// Dobij ID.
$entity->id();

// Dobij bundle.
$entity->bundle();

// Proveri da li je entitet nov.
$entity->isNew();

// Dobij labelu entiteta. Zamena za entity_label().
$entity->label();

// Dobij URL objekat za entitet.
$entity->toUrl();

// Dobij interni put, alias ako postoji, za entitet.
$entity->toUrl()->toString();

// Kreiraj duplikat koji može biti sačuvan kao novi entitet.
$duplicate = $entity->createDuplicate();

Kreiranje entiteta

// Možete koristiti statički create() metod ako znate klasu entiteta.
$node = Node::create([
  'type' => 'article',
  'title' => 'Naslov node-a',
]);

// Koristite entity type manager (preporučeno).
$node = \Drupal::entityTypeManager()->getStorage('node')->create(['type' => 'article', 'title' => 'Još jedan node']);

// Ili koristite proceduralni omotač (zastarjelo).
$node = entity_create('node', [
  'title' => 'Moj node',
  'body' => 'Sadržaj tela. Ovo funkcioniše zbog novog Entity Field API-ja. 
          Biće postavljeno kao vrednost prvog stavka polja na podrazumevanom jeziku.',
]);

Podrazumevana podešavanja iz anotacije tipa polja se dodaju samo za nedostajuće gornje nivoe ključeva; duboko spajanje nije podržano.

Izbegavajte korišćenje statičkog metoda Entity::create() u objektno orijentisanom kodu. Umesto toga koristite dependency injection da ubacite entity type manager i kreirate entitet pomoću $this->entityTypeManager->getStorage($entity_type)->create(). Ovo osigurava da je kod pravilno odvojen i može biti testiran modulom.

Za bolju podršku u IDE okruženju, možete dodeliti interfejs skladišta entiteta svojstvu. Na primer, $this->nodeStorage = $this->entityTypeManager->getStorage('node'); Da biste kreirali entitet, možete koristiti $this->nodeStorage->create().

Učitavanje

// Koristite statičku metodu
$node = Node::load(1);

// Zastarjelo. Dinamički tip entiteta, entity_load() sada učitava jedan entitet, dok je 7.x entity_load() preimenovan u entity_load_multiple().
$entity = entity_load($entity_type, $id);

// Korišćenje storage controllera (preporučeno).
$entity = \Drupal::entityTypeManager()->getStorage($entity_type)->load(1);

// Učitaj više entiteta, takođe postoji kao entity_load_multiple().
$entities = \Drupal::entityTypeManager()->getStorage($entity_type)->loadMultiple([1, 2, 3]);

// Učitaj entitete po vrednostima njihovih svojstava.
$entities = \Drupal::entityTypeManager()->getStorage('node')->loadByProperties(['type' => 'article']);

Da biste ažurirali objekat, učitajte ga, zatim sačuvajte sa izmenama.

Izbegavajte korišćenje statičkog metoda Entity::load() u objektno orijentisanom kodu. Umesto toga koristite dependency injection da ubacite entity type manager i učitate entitet pomoću $this->entityTypeManager->getStorage($entity_type)->load($entity_id). Ovo osigurava da je kod pravilno odvojen i može biti testiran modulom.

Čuvanje entiteta

// Da sačuvate entitet.
$entity->save();

Ovo radi kako za nove, tako i za postojeće entitete, entitet sam prati da li je nov ili ne. Po defaultu, za content entity to zavisi da li ima ID ili ne. Da biste sačuvali objekat sa ID-jem kao novim objektom (npr. prilikom uvoza), možete postaviti zastavicu isNew.

// Sledeće će pokušati da ubaci novi node sa ID 5, što će biti neuspešno ako taj node već postoji.
$node->nid->value = 5;
$node->enforceIsNew(TRUE);
$node->save();

Brisanje entiteta

// Obriši jedan entitet.
$entity = \Drupal::entityTypeManager()->getStorage('node')->load(1);
$entity->delete();

// Obriši više entiteta odjednom.
\Drupal::entityTypeManager()->getStorage($entity_type)->delete([$id1 => $entity1, $id2 => $entity2]);

Kontrola pristupa

Metod access() se može koristiti za proveru ko šta može da radi sa entitetom. Metod podržava različite operacije, standardne su prikaz, ažuriranje, brisanje i kreiranje, kreiranje je malo specifično, vidi dole.

Provere pristupa se prosleđuju kontroleru pristupa. (TODO: Dodati link)

// Provera pristupa za prikaz entiteta.
// Ovo podrazumevano proverava pristup za trenutno ulogovanog korisnika.
if ($entity->access('view')) {

}

// Provera da li određeni korisnik može da obriše entitet.
if ($entity->access('delete', $account)) {

}

Kod provere pristupa za kreiranje obično entitet još ne postoji. Kreiranje entiteta samo da bi se proverilo da li neko može da ga kreira je skupa operacija. Zato pristup kreiranju treba proveravati direktno preko kontrolera pristupa.

\Drupal::entityTypeManager()->getAccessControlHandler('node')->createAccess('article');

Ako entitet već postoji, $entity->access('create') takođe radi, što jednostavno preusmerava na metodu createAccess(), kao i druge operacije koje preusmeravaju metod access() na kontroleru pristupa.

NAPOMENA. U nekim online vodičima se koristi \Drupal::entityManager(), ali u verziji 8.x on je zastareo i biće uklonjen u verziji 9.x. Zato koristite \Drupal::entityTypeManager() umesto \Drupal::entityManager().

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.