Chúng tôi có một trang web đa ngôn ngữ mặc định là "en".
Đôi khi các biên tập viên đang tạo nội dung bằng một ngôn ngữ khác như "de" và dịch nó sang "en".
Vấn đề của tôi là chúng tôi sử dụng quy tắc hiển thị của Trình tạo bố cục cho các khối.
Và thuộc tính hành động biểu mẫu được hiển thị như ví dụ bên dưới.
Không có tiền tố ngôn ngữ.
Và do đó kết thúc bằng phản hồi 403 cho mọi trang nội dung không được tạo bằng ngôn ngữ mặc định của trang web.
Câu hỏi của tôi là làm cách nào để thêm tiền tố ngôn ngữ vào thuộc tính hành động theo cách drupalish nhất?
/**
* {@inheritdoc}
*/
chức năng công khai buildForm(mảng $form, FormStateInterface $form_state, SectionStorageInterface $section_storage = NULL, $delta = NULL, $uuid = NULL) {
$this->sectionStorage = $section_storage;
$this->delta = $delta;
$this->uuid = $uuid;
// Bất kỳ điều kiện hiển thị nào đã được thêm vào khối.
$visibility_conditions_applied_to_block = $this->getCurrentComponent()->get('visibility') ?: [];
// Các loại điều kiện hiển thị có thể được thêm vào một khối.
$conditions_available_to_block = [];
foreach ($this->conditionManager->getFilteredDefinitions('layout_builder', $this->getAvailableContexts($section_storage)) dưới dạng $plugin_id => $definition) {
$conditions_available_to_block[$plugin_id] = $definition['label'];
}
$items = [];
foreach ($visibility_conditions_applied_to_block as $visibility_id => $configuration) {
/** @var \Drupal\Core\Condition\ConditionInterface $condition */
$condition = $this->conditionManager->createInstance($configuration['id'], $configuration);
tùy chọn $ = [
'thuộc tính' => [
'lớp' => ['sử dụng-ajax'],
'data-dialog-type' => 'dialog',
'data-dialog-renderer' => 'off_canvas',
'dữ liệu bên ngoài trong chỉnh sửa' => TRUE,
],
];
$items[$visibility_id] = [
'nhãn' => [
'dữ liệu' => [
'tên_điều_kiện' => [
'#type' => 'html_tag',
'#tag' => 'b',
'#value' => $condition->getPluginId(),
],
'điều kiện_tóm tắt' => [
'#type' => 'thùng chứa',
'#markup' => $condition->summary(),
],
],
],
'chỉnh sửa' => [
'dữ liệu' => [
'#type' => 'liên kết',
'#title' => $this->t('Sửa'),
'#url' => Url::fromRoute('layout_builder.add_visibility', $this->getParameters($visibility_id), $options),
],
],
'xóa' => [
'dữ liệu' => [
'#type' => 'liên kết',
'#title' => $this->t('Xóa'),
'#url' => Url::fromRoute('layout_builder.delete_visibility', $this->getParameters($visibility_id), $options),
],
],
];
}
nếu ($items) {
$form['khả năng hiển thị'] = [
'#prefix' => '<div class="configure-conditions">',
'#suffix' => '</div>',
'#theme' => 'bảng',
'#rows' => $items,
'#caption' => $this->t('Điều kiện đã định cấu hình'),
'#cân nặng' => 10,
];
}
$form['điều kiện'] = [
'#type' => 'chọn',
'#title' => $this->t('Thêm điều kiện hiển thị'),
'#options' => $conditions_available_to_block,
'#empty_value' => '',
'#cân nặng' => 20,
];
// Xác định xem có nên áp dụng nhiều điều kiện với 'and' hay 'or' hay không.
$form['toán tử'] = [
'#type' => 'radio',
'#title' => $this->t('Toán tử'),
'#options' => [
'và' => $this->t('Và'),
'hoặc' => $this->t('Hoặc'),
],
'#default_value' => $this->getCurrentComponent()->get('visibility_operator') ?: 'and',
// Trường này không cần thiết cho đến khi nhiều điều kiện được thêm vào.
'#access' => đếm($items) > 0,
// Nếu có hai hoặc nhiều điều kiện hiển thị, trường này sẽ xuất hiện
// phía trên danh sách các điều kiện hiện có. Nếu chỉ có một tầm nhìn
// điều kiện và điều kiện thứ hai được thêm vào, sau đó trường này xuất hiện
// giữa danh sách thả xuống 'Thêm điều kiện hiển thị' và gửi
// cái nút.
'#weight' => đếm($items) === 1 ? 30 : 3,
];
// Đây là nút gửi chỉ xuất hiện một lần từ hai lần hiển thị trở lên
// có điều kiện. Nút gửi này xuất hiện để người dùng có thể
// cập nhật toán tử khả năng hiển thị, một cài đặt tác động đến toàn bộ khối.
// Điều này khác với nút gửi/trình xử lý mặc định cho biểu mẫu này,
// được sử dụng để thêm điều kiện hiển thị cho khối.
$form['update_operator'] = [
'#type' => 'gửi',
'#access' => đếm($items) > 1,
'#cân nặng' => 5,
'#value' => $this->t('Toán tử cập nhật'),
'#submit' => ['::updateOperator'],
];
nếu (đếm($items) === 1) {
// Nếu chỉ có một điều kiện hiển thị, hãy ẩn trường toán tử
// cho đến khi điều kiện thứ hai được chọn để thêm vào khối.
$form['operator']['#states'] = [
'vô hình' => [
'[tên="điều kiện"]' => ['giá trị' => ''],
],
];
}
$form['actions']['#weight'] = 40;
$form['actions']['submit'] = [
'#type' => 'gửi',
'#value' => $this->t('Thêm điều kiện'),
// Nút Gửi chỉ hiển thị nếu một điều kiện được chọn.
'#states' => [
'vô hình' => [
'[tên="điều kiện"]' => ['giá trị' => ''],
],
],
];
$form['#attributes']['data-layout-builder-target-highlight-id'] = $this->blockUpdateHighlightId($this->uuid);
nếu ($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'] = 'click';
}
trả về biểu mẫu $;
}
Ví dụ sẽ không hoạt động:
<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">
Công việc ví dụ:
<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">