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
21/05/2025, by Ivan

Neki sajtovi možda neće želeti da izlože određene JSON:API tipove resursa ili polja, ili žele da preimenuju polja radi čistijeg interfejsa.

Da bi omogućio ove izmene, JSON:API emituje objekat događaja ResourceTypeBuildEvent koristeći ime događaja ResourceTypeBuildEvents::BUILD. Molimo pogledajte kako se pretplatiti na događaje i emitovati ih za više informacija.

Pretplatnici mogu pozvati sledeće metode:

  • ResourceTypeBuildEvent::disableResourceType() da sprečite pristup tipu resursa na bilo koji način putem JSON:API.
  • ResourceTypeBuildEvent::disableField() da sprečite pristup određenom polju putem JSON:API.
  • ResourceTypeBuildEvent::setPublicFieldName() da podesite alias polja tako da JSON:API ne izlaže interno Drupal ime polja.
  • ResourceTypeBuildEvent::setResourceTypeName() da podesite alias resursa tako da JSON:API ne izlaže interno ime resursa.

Bilo koji modul, prilagođeni ili doprinosni, može implementirati pretplatnika za ovaj događaj. To znači da modul za određeni sajt može onemogućiti tipove resursa, kao i da moduli koji pružaju svoje entitetske tipove mogu onemogućiti sopstvene JSON:API reprezentacije.

Primer

U nastavku je prikazan primer EventSubscriber klase sa svim mogućim akcijama koje možete preduzeti:

<?php

namespace Drupal\modules\custom\resource_types\EventSubscriber;

use Drupal\jsonapi\ResourceType\ResourceTypeBuildEvents;
use Drupal\jsonapi\ResourceType\ResourceTypeBuildEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

/**
 * Pretplatnik događaja za izmenu određenih tipova resursa.
 */
class ResourceTypeBuildEventSubscriber implements EventSubscriberInterface {

  /**
   * {@inheritdoc}
   */
  public static function getSubscribedEvents() {
    return [
      ResourceTypeBuildEvents::BUILD => [
        ['disableResourceType'],
        ['aliasResourceTypeFields'],
        ['disableResourceTypeFields'],
        ['renameResourceType'],
      ],
    ];
  }

  /**
   * Onemogućava node/page tip resursa.
   *
   * @param \Drupal\jsonapi\ResourceType\ResourceTypeBuildEvent $event
   *   Događaj izgradnje.
   */
  public function disableResourceType(ResourceTypeBuildEvent $event) {
    if ($event->getResourceTypeName() === 'node--page') {
      $event->disableResourceType();
    }
  }

  /**
   * Daje alias "content" za polje "body".
   *
   * @param \Drupal\jsonapi\ResourceType\ResourceTypeBuildEvent $event
   *   Događaj izgradnje.
   */
  public function aliasResourceTypeFields(ResourceTypeBuildEvent $event) {
    if ($event->getResourceTypeName() === 'node--article') {
      foreach ($event->getFields() as $field) {
        if ($field->getInternalName() === 'body') {
          $event->setPublicFieldName($field, 'content');
        }
      }
    }
  }

  /**
   * Onemogućava polje "sticky" na node--article.
   *
   * @param \Drupal\jsonapi\ResourceType\ResourceTypeBuildEvent $event
   *   Događaj izgradnje.
   */
  public function disableResourceTypeFields(ResourceTypeBuildEvent $event) {
    if ($event->getResourceTypeName() === 'node--article') {
      foreach ($event->getFields() as $field) {
        if ($field->getInternalName() === 'sticky') {
          $event->disableField($field);
        }
      }
    }
  }

  /**
   * Preimenuje node--article u article, izlažući resurs kao /jsonapi/article
   *
   * @param \Drupal\jsonapi\ResourceType\ResourceTypeBuildEvent $event
   *   Događaj izgradnje.
   */
  public function renameResourceType(ResourceTypeBuildEvent $event) {
    if ($event->getResourceTypeName() === 'node--article') {
      $event->setResourceTypeName('article');
    }
  }

}

JSON:API Extras

Neke od ovih funkcionalnosti omogućava i JSON:API Extras. Ovaj modul koristi core funkcionalnost gde god je to moguće, ali nudi i interfejs i dodatne opcije kao što su:

  1. Izmena osnovne putanje ka API-ju.
  2. Dodavanje enhancera (poboljšivača) na polja.
  3. Onemogućavanje resursa po default-u.

Nakon što omogućite modul, možete posetiti /admin/config/services/jsonapi da vidite listu svih konfiguracija i sadržaja koje JSON:API izlaže.

Članak sa Drupal Dokumentacije.