Puncte:0

Este posibil să găsiți ruta „originală” în timp ce executați codul dintr-un widget?

drapel br

Sunt pe D9.

Am un formular de editare a nodului cu a mass-media câmp folosind Biblioteca media widget.

Când se adaugă un mediu media nou, ar trebui să rulez un cod personalizat pentru a înlocui un simbol al locației căii media, în funcție de valoarea nodului în sine.

Cu toate acestea, traseul disponibil cu \Drupal::routeMatch() este media_library.ui si nu exista obiect nod disponibil

Presupun că acest lucru este corect, deoarece codul este executat în timpul solicitării „în interiorul widgetului bibliotecii media”.

Astfel, încerc să aflu dacă este posibil să obțin cumva cererea „principală\originală” din acel moment și relativa obiect nod sau dacă este imposibil. În acest din urmă caz, aveți idee dacă acest obiectiv este cumva posibil?

apaderno avatar
drapel us
Pentru ca întrebarea să fie utilă viitorilor cititori, ar trebui să arătați codul pe care îl utilizați și să clarificați ce cârlig utilizați și ce formă încercați să o modificați. Întrebarea pare despre un formular de editare a nodului, dar apoi spune că `\Drupal::routeMatch()` returnează `'media_library.ui'`, care nu este ruta pentru un formular de editare a nodului.
apaderno avatar
drapel us
Bănuiesc că ceea ce este descris ar fi posibil atunci când widgetul de câmp folosește AJAX.
Giuseppe avatar
drapel br
@apaderno deocamdată nu am încă un cod definit de afișat, depanez direct în `token_tokens` pentru că încerc să văd dacă acest patch funcționează https://www.drupal.org/project/token/ issues/919760 cu cazul meu de utilizare. După cum am spus, traseul nu este cel al formularului de editare a nodului, deoarece codul „rulează” în timpul inserării media, care se află în interiorul „modalului media widget”
Puncte:2
drapel us

Pentru a modifica forma unui widget, Drupal invocă aceste cârlige.

În ambele cazuri, puteți obține nodul la care câmpul utilizând Biblioteca media widget-ul este atașat folosind un cod similar cu următorul.

if ($context['widget']->getPluginId() == 'media_library_widget') {
  $field_definition = $context['items']->getFieldDefinition();
  if ($field_definition->getTargetEntityTypeId() == 'nod') {
    $nod = $context['items']->getEntity();
    // Folosește $node.
  }
}

Dacă, în schimb, încercați să modificați valoarea unui token atunci când este folosit pentru acel widget, acest lucru nu este posibil, deoarece cârligul pentru a modifica jetoanele (hook_tokens_alter()) știe doar pentru ce tip de entitate este solicitat jetonul ($context['tip']) și pentru ce obiect de entitate ($context['date'][$context['tip']]).

Puncte:0
drapel cn

Iată codul meu care face o treabă similară - extragerea nodului din parametrii browserului entității (Totuși, nu sunt sigur ce locație a căii media veți schimba).

/**
 * Implementează hook_form_BASE_FORM_ID_alter().
 */
funcția my_module_form_entity_browser_media_entity_browser_modal_form_alter(&$form, FormStateInterface $form_state) {
  // @todo Mută ​​acel cod în ClassResolver.
  /** @var \Drupal\entity_browser\Form\EntityBrowserForm $form_object */
  $form_object = $form_state->getFormObject();
  $eb = $form_object->getEntityBrowser();
  $eb_params = $eb->getAdditionalWidgetParameters();
  dacă (!isset($eb_params["path_parts"][1]) || !isset($eb_params["path_parts"][2])) {
    întoarcere;
  }

  dacă (!is_numeric($eb_params["path_parts"][2])) {
    întoarcere;
  }

  $params = [];
  încerca {
    $params = Url::fromUserInput(implode('/', $eb_params["path_parts"]))->getRouteParameters();
  }
  captură (Excepție $excepție) {
    Drupal::messenger()->addError($exception->getMessage());
  }

  $nod = NULL;
  if (isset($params['nod'])) {
    $nod = Node::load($params['nod']);
  }

  $grup = NULL;
  if (isset($params['grup'])) {
    $grup = Group::load($params['grup']);
  }

  if (gol ($nod) && gol ($grup)) {
    întoarcere;
  }

  $etichete = [];
  $group_links = [];
  $group_urls = [];
  $gids = [];
  $gid = NULL;
  $form['#attributes']['data-parent_node'] = NULL;

  comutator (!$nod ? 'grup': 'nod') {
    caz „grup”:
      $gid = $grup->id();
      pauză;
    caz „nod”:
      $group_contents = GroupContent::loadByEntity($node);
      foreach ($group_contents ca $group_content) {
        $group = $group_content->getGroup();
        $gids[] = $grup->id();
        $etichete[] = $grup->etichetă();
        $group_urls[] = $group->toUrl()->toString();
        $group_links[] = $group->toLink($group->label())->toString();
      }

      $form['#attributes']['data-parent_node'] = $node->id();

      $gid = reset($gids);
      pauză;
  }

  $form['#attributes']['data-parent_group_names'] = json_encode($labels);
  $form['#attributes']['data-parent_group_urls'] = json_encode($group_urls);
  $form['#attributes']['data-parent_group_links'] = json_encode($group_links);
  $form['#attributes']['data-parent_group_ids'] = json_encode($gids);
  $form['#attributes']['data-parent_group_id'] = $gid;
}

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.