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">