เรามีไซต์หลายภาษาที่มีค่าเริ่มต้นคือ "en"
บางครั้งบรรณาธิการกำลังสร้างเนื้อหาในภาษาอื่น เช่น "de" และแปลเป็น "en"
ปัญหาของฉันคือเราใช้กฎการมองเห็นของตัวสร้างเค้าโครงสำหรับบล็อก
และแอตทริบิวต์ form action ที่แสดงผลตามตัวอย่างด้านล่าง
ไม่มีคำนำหน้าภาษา
ดังนั้นจึงจบลงด้วยการตอบกลับ 403 สำหรับทุกหน้าเนื้อหาที่ไม่ได้สร้างในภาษาเริ่มต้นของไซต์
คำถามของฉันคือ ฉันจะเพิ่มคำนำหน้าภาษาในแอตทริบิวต์ action ด้วยวิธี drupalish ได้อย่างไร
/**
* {@inheritdoc}
*/
buildForm ฟังก์ชันสาธารณะ (อาร์เรย์ $form, FormStateInterface $form_state, SectionStorageInterface $section_storage = NULL, $delta = NULL, $uuid = NULL) {
$this->sectionStorage = $section_storage;
$this->delta = $เดลต้า;
$this->uuid = $uuid;
// เงื่อนไขการมองเห็นใด ๆ ที่เพิ่มลงในบล็อกแล้ว
$visibility_conditions_applied_to_block = $this->getCurrentComponent()->get('visibility') ?: [];
// ประเภทเงื่อนไขการมองเห็นที่สามารถเพิ่มลงในบล็อกได้
$conditions_available_to_block = [];
foreach ($this->conditionManager->getFilteredDefinitions('layout_builder', $this->getAvailableContexts($section_storage)) เป็น $plugin_id => $definition) {
$conditions_available_to_block[$plugin_id] = $definition['label'];
}
$รายการ = [];
foreach ($visibility_conditions_applied_to_block as $visibility_id => $configuration) {
/** @var \Drupal\Core\Condition\ConditionInterface $condition */
$condition = $this->conditionManager->createInstance($configuration['id'], $configuration);
ตัวเลือก $ = [
'คุณสมบัติ' => [
'คลาส' => ['ใช้-ajax'],
'data-dialog-type' => 'ไดอะล็อก',
'data-dialog-renderer' => 'off_canvas',
'data-outside-in-edit' => จริง,
]
];
$items[$visibility_id] = [
'ฉลาก' => [
'ข้อมูล' => [
'condition_name' => [
'#type' => 'html_tag',
'#tag' => 'b',
'#value' => $condition->getPluginId(),
]
'condition_summary' => [
'#type' => 'คอนเทนเนอร์',
'#markup' => $condition->summary(),
]
]
]
'แก้ไข' => [
'ข้อมูล' => [
'#type' => 'ลิงค์',
'#title' => $this->t('แก้ไข'),
'#url' => Url::fromRoute('layout_builder.add_visibility', $this->getParameters($visibility_id), $ตัวเลือก),
]
]
'ลบ' => [
'ข้อมูล' => [
'#type' => 'ลิงค์',
'#title' => $this->t('ลบ'),
'#url' => Url::fromRoute('layout_builder.delete_visibility', $this->getParameters($visibility_id), $ตัวเลือก),
]
]
];
}
ถ้า ($ รายการ) {
$แบบฟอร์ม['การมองเห็น'] = [
'#prefix' => '<div class="configured-conditions">',
'#suffix' => '</div>',
'#theme' => 'ตาราง',
'#rows' => $รายการ,
'#caption' => $this->t('เงื่อนไขที่กำหนดค่า'),
'#น้ำหนัก' => 10,
];
}
$แบบฟอร์ม['เงื่อนไข'] = [
'#type' => 'เลือก',
'#title' => $this->t('เพิ่มเงื่อนไขการมองเห็น'),
'#options' => $conditions_available_to_block,
'#empty_value' => '',
'#น้ำหนัก' => 20,
];
// กำหนดว่าควรใช้หลายเงื่อนไขกับ 'และ' หรือ 'หรือ'
$แบบฟอร์ม['ตัวดำเนินการ'] = [
'#type' => 'วิทยุ',
'#title' => $this->t('โอเปอเรเตอร์'),
'#ตัวเลือก' => [
'และ' => $this->t('และ'),
'หรือ' => $this->t('หรือ'),
]
'#default_value' => $this->getCurrentComponent()->get('visibility_operator') ?: 'และ',
// ฟิลด์นี้ไม่จำเป็นจนกว่าจะเพิ่มหลายเงื่อนไข
'#access' => จำนวน($items) > 0,
// หากมีเงื่อนไขการมองเห็นตั้งแต่สองเงื่อนไขขึ้นไป ฟิลด์นี้จะปรากฏขึ้น
// เหนือรายการเงื่อนไขที่มีอยู่ หากมีเพียงทัศนวิสัยเดียว
// เงื่อนไข และกำลังเพิ่มอันที่สอง ฟิลด์นี้จะปรากฏขึ้น
// ระหว่างเมนูแบบเลื่อนลง 'เพิ่มเงื่อนไขการมองเห็น' และส่ง
// ปุ่ม.
'#weight' => จำนวน($items) === 1 ? 30 : 3,
];
// นี่คือปุ่มส่งที่ปรากฏขึ้นเมื่อมองเห็นสองครั้งขึ้นไปเท่านั้น
//เงื่อนไขมีอยู่. ปุ่มส่งนี้ปรากฏขึ้นเพื่อให้ผู้ใช้สามารถ
// อัปเดตตัวดำเนินการการมองเห็น ซึ่งเป็นการตั้งค่าที่ส่งผลต่อบล็อกทั้งหมด
// ซึ่งแตกต่างจากปุ่ม/ตัวจัดการส่งเริ่มต้นสำหรับแบบฟอร์มนี้
// ซึ่งใช้เพื่อเพิ่มเงื่อนไขการมองเห็นให้กับบล็อก
$แบบฟอร์ม['update_operator'] = [
'#type' => 'ส่ง',
'#access' => จำนวน($items) > 1,
'#น้ำหนัก' => 5,
'#value' => $this->t('ตัวดำเนินการอัปเดต'),
'#submit' => ['::updateOperator'],
];
ถ้า (นับ ($ รายการ) === 1) {
// หากมีเงื่อนไขการมองเห็นเพียงเงื่อนไขเดียว ให้ซ่อนฟิลด์โอเปอเรเตอร์
// จนกว่าจะมีการเลือกเงื่อนไขที่สองเพื่อเพิ่มลงในบล็อก
$form['operator']['#states'] = [
'ล่องหน' => [
'[ชื่อ="เงื่อนไข"]' => ['ค่า' => ''],
]
];
}
$form['actions']['#weight'] = 40;
$form['actions']['submit'] = [
'#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'] = 'คลิก';
$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">