Puncte:1

Cum să adăugați prefix de limbă la acțiunea de formular?

drapel ng

Avem un site multilingv care implicit este „en”.

Uneori, editorii creează conținut într-o altă limbă precum „de” și apoi îl traduc în „en”.

Problema mea este că folosim regulile de vizibilitate ale constructorului Layout pentru blocuri.

Și atributul de acțiune de formular care este redat ca exemplu de mai jos.

Nu are prefix de limbă.

Și, prin urmare, ajunge într-un răspuns 403 pentru fiecare pagină de conținut care nu este creată în limba implicită a site-urilor.

Întrebarea mea este cum pot adăuga prefixul de limbă la atributul de acțiune în modul cel mai drupal?

/**
   * {@inheritdoc}
   */
  funcția publică buildForm(array $form, FormStateInterface $form_state, SectionStorageInterface $section_storage = NULL, $delta = NULL, $uuid = NULL) {
    $this->sectionStorage = $section_storage;
    $aceasta->delta = $delta;
    $this->uuid = $uuid;

    // Orice condiții de vizibilitate care au fost deja adăugate la bloc.
    $visibility_conditions_applied_to_block = $this->getCurrentComponent()->get('vizibility') ?: [];

    // Tipuri de condiții de vizibilitate care pot fi adăugate la un bloc.
    $conditions_available_to_block = [];
    foreach ($this->conditionManager->getFilteredDefinitions('layout_builder', $this->getAvailableContexts($section_storage)) ca $plugin_id => $definiție) {
      $conditions_available_to_block[$plugin_id] = $definition['label'];
    }

    $articole = [];
    foreach ($visibility_conditions_applied_to_block ca $visibility_id => $configurare) {
      /** @var \Drupal\Core\Condition\ConditionInterface $condiție */
      $condition = $this->conditionManager->createInstance($configuration['id'], $configuration);
      $opțiuni = [
        'atribute' => [
          'class' => ['use-ajax'],
          'data-dialog-type' => 'dialog',
          'data-dialog-renderer' => 'off_canvas',
          'data-outside-in-edit' => TRUE,
        ],
      ];
      $items[$visibility_id] = [
        'etichetă' => [
          'date' => [
            'condition_name' => [
              '#type' => 'html_tag',
              '#tag' => 'b',
              '#value' => $condition->getPluginId(),
            ],
            'condition_summary' => [
              '#type' => 'container',
              '#markup' => $conditie->rezumat(),
            ],
          ],
        ],
        'editare' => [
          'date' => [
            '#type' => 'link',
            '#title' => $this->t('Editează'),
            '#url' => Url::fromRoute('layout_builder.add_visibility', $this->getParameters($visibility_id), $options),
          ],
        ],
        'șterge' => [
          'date' => [
            '#type' => 'link',
            '#title' => $this->t('Șterge'),
            '#url' => Url::fromRoute('layout_builder.delete_visibility', $this->getParameters($visibility_id), $options),
          ],
        ],
      ];
    }

    dacă ($articole) {
      $form['vizibilitate'] = [
        '#prefix' => '<div class="configured-conditions">',
        '#sufix' => '</div>',
        '#theme' => 'tabel',
        '#rows' => $articole,
        '#caption' => $this->t('Condiții configurate'),
        '#weight' => 10,
      ];
    }

    $form['condiție'] = [
      '#type' => 'selectați',
      '#title' => $this->t('Adăugați o condiție de vizibilitate'),
      '#options' => $conditions_available_to_block,
      '#empty_value' => '',
      '#weight' => 20,
    ];

    // Determină dacă mai multe condiții ar trebui aplicate cu „și” sau „sau”.
    $form['operator'] = [
      '#type' => 'radiouri',
      '#title' => $this->t('Operator'),
      '#options' => [
        'și' => $this->t('Și'),
        'sau' => $this->t('Sau'),
      ],
      '#default_value' => $this->getCurrentComponent()->get('visibility_operator') ?: 'și',
      // Acest câmp nu este necesar până când sunt adăugate mai multe condiții.
      '#access' => count($items) > 0,
      // Dacă există două sau mai multe condiții de vizibilitate, apare acest câmp
      // deasupra listei de condiții existente. Dacă există o singură vizibilitate
      // condiție, iar un al doilea este adăugat, apoi apare acest câmp
      // între meniul derulant „Adăugați o condiție de vizibilitate” și trimitere
      butonul //.
      '#weight' => count($items) === 1 ? 30:3,
    ];

    // Acesta este un buton de trimitere care apare o singură dată cu două sau mai multe vizibilități
    // condițiile sunt prezente. Acest buton de trimitere apare astfel încât utilizatorul să poată face acest lucru
    // actualizați operatorul de vizibilitate, o setare care afectează întregul bloc.
    // Acesta este diferit de butonul/managerul implicit de trimitere pentru acest formular,
    // care este folosit pentru a adăuga o condiție de vizibilitate la bloc.
    $form['update_operator'] = [
      '#type' => 'trimite',
      '#access' => count($items) > 1,
      '#weight' => 5,
      '#value' => $this->t('Update operator'),
      '#submit' => ['::updateOperator'],
    ];

    dacă (număr($articole) === 1) {
      // Dacă există o singură condiție de vizibilitate, ascundeți câmpul operator
      // până când este selectată oa doua condiție pentru a fi adăugată la bloc.
      $form['operator']['#states'] = [
        'invizibil' => [
          '[name="condition"]' => ['valoare' => ''],
        ],
      ];
    }

    $form['actions']['#weight'] = 40;
    $form['actions']['submit'] = [
      '#type' => 'trimite',
      '#value' => $this->t('Adăugați condiție'),
      // Butonul de trimitere este vizibil numai dacă este selectată o condiție.
      '#states' => [
        'invizibil' => [
          '[name="condition"]' => ['valoare' => ''],
        ],
      ],
    ];

    $form['#attributes']['data-layout-builder-target-highlight-id'] = $this->blockUpdateHighlightId($this->uuid);

    dacă ($this->isAjax()) {
      $form['actions']['submit']['#ajax']['callback'] = '::ajaxSubmit';
      $form['actions']['submit']['#ajax']['event'] = 'clic';
      $form['update_operator']['#ajax']['callback'] = '::ajaxSubmit';
      $form['update_operator']['#ajax']['event'] = 'clic';
    }

    returnează $form;
  }

Exemplul nu va funcționa:

<form class="layout-builder-configure-visibility" data-layout-builder-target-highlight-id="28411f7a-940c-44a5-bf49-43ca6dfa3acd" data-drupal-selector="layout-builder-configure-visibility" action="/layout_builder/visibility/block/overrides/node.220/1/28411f7a-940c-44a5-bf49-43ca6dfa3acd/user_role?destination=/layout_builder_iframe_modal/redirect" method="post" id="layout-builder-configure-visibility" accept-charset="UTF-8">

Exemplu de lucrare:

<form class="layout-builder-configure-visibility" data-layout-builder-target-highlight-id="28411f7a-940c-44a5-bf49-43ca6dfa3acd" data-drupal-selector="layout-builder-configure-visibility" action="/de/layout_builder/visibility/block/overrides/node.220/1/28411f7a-940c-44a5-bf49-43ca6dfa3acd/user_role?destination=/layout_builder_iframe_modal/redirect" method="post" id="layout-builder-configure-visibility" accept-charset="UTF-8">
Puncte:0
drapel ng

Am găsit o soluție care funcționează pentru mine. Acest formular de mai sus este o formă modală redată ca Iframe. Deci, în fișierul meu .module. A trebuit să ajustez atributul de acțiune în sine:

/**
 * Implementează hook_preprocess_HOOK().
 */
funcția freitag_layout_visibility_control_preprocess_form(&$variabile) {      
  if (isset($variables['atribute']['id']) && $variables['atribute']['id'] === 'layout-builder-configure-vizibility') {
    $langcode = \Drupal::languageManager()->getCurrentLanguage()->getId();
    $variables['atribute']['acțiune'] = '/' . $langcode . $variables['atribute']['acțiune'];
  }
}

Nu este cea mai bună soluție, dar funcționează.

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.