Puncte:1

rutare pentru bloc dinamic pentru entitate personalizată

drapel co

Pentru o entitate personalizată am creat mai multe blocuri dinamice. Dar blocurile nu sunt afișate. Sunt plasate în admin/structură/bloc. Mai jos este un exemplu de bloc 1.

myentity.routing.yml:

myentity.blocks:
  cale: „/colecție/{mitate}”
  implicite:
    _title: „Colecție de lucruri”
  cerinte:
    _permission: „accesează conținut”
    myentity: \d+
  Opțiuni:
    parametri:
      myentity:
        tip: entity:myentity
        pachet:
            - A

Parte din src/Plugin/Block:

namespace DrupalCorePluginBlock;

utilizați DrupalCoreBlockBase;

/**
 * Oferă un bloc „Colecție”.
 *
 * @Bloc(
 * id = "bloc_colecție 1",
 * admin_label = @Translation ("Colecție: Lucruri"),
 * categorie = @Translation ("Colecția mea"),
 * context_definitions = {
 * „myentity” = @ContextDefinition(„entity:myentity”, label = @Translation(„Myentity ID”))
 *}
 * )
 */
clasa MyentityBlock1 extinde BlockBase {

  /**
   * {@inheritdoc}
   */
  public function build() {
    $myentity = $this->getContextValue('myentity');
    întoarcere [...];
}

Dacă înlocuiesc myentity cu node, funcționează, dar pentru o entitate personalizată probabil că trebuie să definesc ceva mai mult. Dar ce?

Jaypan avatar
drapel de
Poate asta: `$myentity = \Drupal::service('current_route_match')->getParameter('myentity');`
Puncte:3
drapel cn
MrD

Puteți urmări Furnizarea de variabile de context globale. Trebuie să creați un nou serviciu pentru a furniza o variabilă de context pentru entitatea dvs. personalizată. Puteți folosi un nod de entitate, utilizator, taxonomy_term... deoarece acestea sunt deja definite.

https://git.drupalcode.org/project/drupal/-/blob/9.3.x/core/modules/taxonomy/taxonomy.services.yml#L7

  taxonomy_term.taxonomy_term_route_context:
      clasa: Drupal\taxonomie\ContextProvider\TermRouteContext
      argumente: ['@current_route_match']
      Etichete:
        - { nume: 'context_provider' }

https://git.drupalcode.org/project/drupal/-/blob/9.3.x/core/modules/taxonomy/src/ContextProvider/TermRouteContext.php#L48

 /**
   * {@inheritdoc}
   */
  funcția publică getRuntimeContexts(matrice $unqualified_context_ids) {
    $rezultat = [];
    $context_definition = EntityContextDefinition::create('taxonomy_term')->setRequired(FALSE);
    $valoare = NULL;
    if ($route_object = $this->routeMatch->getRouteObject()) {
      $route_parameters = $route_object->getOption('parametri');

      if (isset($route_parameters['taxonomy_term']) && $term = $this->routeMatch->getParameter('taxonomy_term')) {
        $valoare = $term;
      }
      elseif ($this->routeMatch->getRouteName() == 'entity.taxonomy_term.add_form') {
        $vocabular = $this->routeMatch->getParameter('taxonomy_vocabulary');
        $valoare = Term::create(['vid' => $vocabular->id()]);
      }
    }

    $cacheability = new CacheableMetadata();
    $cacheability->setCacheContexts(['route']);

    $context = context nou($definiție_context, $valoare);
    $context->addCacheableDependency($cacheability);
    $rezultat['taxonomy_term'] = $context;

    returnează $rezultat;
  }

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.