Score:1

จะเพิ่มคำนำหน้าภาษาในแบบฟอร์มได้อย่างไร

ธง ng

เรามีไซต์หลายภาษาที่มีค่าเริ่มต้นคือ "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">
Score:0
ธง ng

พบวิธีแก้ปัญหาที่เหมาะกับฉัน แบบฟอร์มด้านบนนี้เป็นแบบฟอร์มโมดอลที่แสดงผลเป็น Iframe ดังนั้นในไฟล์ .module ของฉัน ฉันต้องปรับแอตทริบิวต์การกระทำเอง:

/**
 * ใช้ hook_preprocess_HOOK()
 */
ฟังก์ชัน freitag_layout_visibility_control_preprocess_form(&$ตัวแปร) {      
  if (isset($variables['attributes']['id']) && $variables['attributes']['id'] === 'layout-builder-configure-visibility') {
    $langcode = \Drupal::languageManager()->getCurrentLanguage()->getId();
    $variables['attributes']['action'] = '/' $langcode . $variables['attributes']['action'];
  }
}

ไม่ใช่ทางออกที่ดีที่สุด แต่ใช้งานได้

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา