У нас есть многоязычный сайт, по умолчанию "en".
Иногда редакторы создают контент на другом языке, таком как «de», а затем переводят его на «en».
Моя проблема в том, что мы используем правила видимости Layout builder для блоков.
И атрибут действия формы, который отображается в качестве примера ниже.
Не имеет языкового префикса.
И поэтому заканчивается ответом 403 для каждой страницы контента, которая не создана на языке сайтов по умолчанию.
Мой вопрос: как я могу добавить языковой префикс к атрибуту действия наиболее друпалским способом?
общедоступная функция buildForm (массив $ form, FormStateInterface $ form_state, SectionStorageInterface $ section_storage = NULL, $ delta = NULL, $ uuid = NULL) {
$this->sectionStorage = $section_storage;
$this->delta = $delta;
$this->uuid = $uuid;
$visibility_conditions_applied_to_block = $this->getCurrentComponent()->get('видимость') ?: [];
$conditions_available_to_block = [];
foreach ($this->conditionManager->getFilteredDefinitions('layout_builder', $this->getAvailableContexts($section_storage)) as $plugin_id => $definition) {
$conditions_available_to_block[$plugin_id] = $definition['метка'];
}
$элементы = [];
foreach ($visibility_conditions_applied_to_block as $visibility_id => $configuration) {
$condition = $this->conditionManager->createInstance($configuration['id'], $configuration);
$ параметры = [
'атрибуты' => [
'класс' => ['использовать-ajax'],
'data-dialog-type' => 'диалоговое окно',
'data-dialog-renderer' => 'off_canvas',
'data-outside-in-edit' => ИСТИНА,
],
];
$items[$visibility_id] = [
'метка' => [
'данные' => [
'имя_условия' => [
'#type' => 'html_tag',
'#тег' => 'б',
'#value' => $condition->getPluginId(),
],
'условие_резюме' => [
'#type' => 'контейнер',
'#markup' => $условие->резюме(),
],
],
],
'редактировать' => [
'данные' => [
'#тип' => 'ссылка',
'#title' => $this->t('Редактировать'),
'#url' => Url::fromRoute('layout_builder.add_visibility', $this->getParameters($visibility_id), $options),
],
],
'удалить' => [
'данные' => [
'#тип' => 'ссылка',
'#title' => $this->t('Удалить'),
'#url' => Url::fromRoute('layout_builder.delete_visibility', $this->getParameters($visibility_id), $options),
],
],
];
}
если ($ пунктов) {
$ форма ['видимость'] = [
'#prefix' => '<div class="configured-conditions">',
'#суффикс' => '</div>',
'#theme' => 'стол',
'#rows' => $items,
'#caption' => $this->t('Настроенные условия'),
'#вес' => 10,
];
}
$ форма ['условие'] = [
'#тип' => 'выбрать',
'#title' => $this->t('Добавить условие видимости'),
'#options' => $conditions_available_to_block,
'#пустое_значение' => '',
'#вес' => 20,
];
$ форма ['оператор'] = [
'#type' => 'радио',
'#title' => $this->t('Оператор'),
'#варианты' => [
'и' => $this->t('И'),
'или' => $this->t('Или'),
],
'#default_value' => $this->getCurrentComponent()->get('visibility_operator') ?: 'и',
'#access' => count($items) > 0,
'#weight' => count($items) === 1 ? 30 : 3,
];
$form['оператор_обновления'] = [
'#type' => 'отправить',
'#access' => count($items) > 1,
'#вес' => 5,
'#value' => $this->t('Оператор обновления'),
'#submit' => ['::updateOperator'],
];
если (счетчик($items) === 1) {
$form['оператор']['#состояния'] = [
'невидимый' => [
'[имя="условие"]' => ['значение' => ''],
],
];
}
$form['actions']['#weight'] = 40;
$form['действия']['отправить'] = [
'#type' => 'отправить',
'#value' => $this->t('Добавить условие'),
'#состояния' => [
'невидимый' => [
'[имя="условие"]' => ['значение' => ''],
],
],
];
$form['#attributes']['data-layout-builder-target-highlight-id'] = $this->blockUpdateHighlightId($this->uuid);
если ($this->isAjax()) {
$form['actions']['submit']['#ajax']['callback'] = '::ajaxSubmit';
$form['actions']['submit']['#ajax']['event'] = 'click';
$form['update_operator']['#ajax']['callback'] = '::ajaxSubmit';
$form['update_operator']['#ajax']['event'] = 'щелчок';
}
вернуть $ форму;
}
Пример не будет работать:
<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">
Пример работы:
<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">