Score:2

บล็อกการตั้งค่าภายในแบบฟอร์ม

ธง in

ได้โปรดฉันต้องการความช่วยเหลือเกี่ยวกับรหัสของฉัน ฉันมีแบบฟอร์มและบล็อกที่สร้างขึ้นโดยทางโปรแกรม บล็อกฝังแบบฟอร์มเพื่อแสดงไว้ที่ส่วนหน้าบล็อกยังมีการตั้งค่าบางอย่าง (ข้อความนำหน้าแบบฟอร์ม) ฉันต้องการโหลดการตั้งค่าบล็อกภายใน buildForm ของฉันใน Form.php ของฉันเพื่อรับข้อความคำนำหน้าและแสดงในฟิลด์มาร์กอัปแบบฟอร์ม แต่ฉันไม่สามารถหาวิธีส่งต่อ $block_id ไปยัง buildForm() เพื่อให้สามารถโหลดบล็อกได้

ฉันมีสถานการณ์ที่สามารถมีบล็อกเหล่านี้สองบล็อกในหน้าเดียวกัน ซึ่ง Drupal จะสร้างบล็อกที่ไม่ซ้ำใครโดยต่อท้าย ID บางตัวด้วยรหัสบล็อก ตัวอย่างเช่น หน้าของฉันมีสองบล็อกเหล่านี้ บล็อกหนึ่งจะเป็นแบบนี้ ข้อเสนอแนะบล็อก ที่อื่นจะเป็น คำติชมบล็อก_2 ดังนั้นฉันจึงไม่สามารถฮาร์ดโค้ดรหัสบล็อกเพื่อโหลดในฟังก์ชัน buildForm ของฉันได้

ฉันต้องการให้ส่งรหัสบล็อกไปยังแบบฟอร์มแบบไดนามิก

build() จาก Block.php ของฉัน:

  สร้างฟังก์ชั่นสาธารณะ () {
    $block_id // รับรหัสบล็อกของอินสแตนซ์บล็อกปัจจุบัน
    $feedback_form = $this->formBuilder->getForm(FeedbackForm::class, $block_id);

    $สร้าง = [];
    $build['#theme'] = 'feedback_block';
    $build['feedback_block']['#markup'] = แสดงผล ($feedback_form);

    ส่งคืน $build;
  }

buildForm จาก FeedbackForm.php ของฉัน:

  ฟังก์ชันสาธารณะ buildForm (อาร์เรย์ $form, FormStateInterface $form_state, สตริง $block_id) {
      // รับรหัสบล็อกที่นี่
  }

มีวิธีใดบ้างที่จะบรรลุเป้าหมายนี้?

Kevin avatar
in flag
$feedback_form เป็นอาร์เรย์เรนเดอร์อยู่แล้ว คุณไม่จำเป็นต้องเรนเดอร์ เพียงตั้งค่าเป็นตัวแปร แล้วให้ Drupal จัดการ
Kevin avatar
in flag
นอกจากนี้: https://drupal.stackexchange.com/a/199929/57
New To 'C' avatar
in flag
ขอบคุณสำหรับลิงค์ แต่ฉันได้ดูมันแล้วและนั่นจะไม่ทำงานในกรณีของฉันเพราะฉันไม่มี routing.yml และฉันไม่ต้องการมัน ฉันเพิ่งสร้างบล็อกและบล็อกฟอร์มกำลังแสดงฟอร์มนั้น และบล็อกสามารถแสดงได้ทุกที่บนไซต์โดยไม่คำนึงถึงเส้นทาง
Kevin avatar
in flag
คุณไม่จำเป็นต้องกำหนดเส้นทาง yaml อ่านคำตอบ " เมื่อใช้พารามิเตอร์ในฟอร์ม คุณต้องตั้งค่า null ในรายการพารามิเตอร์"
New To 'C' avatar
in flag
โอ้ ขอบคุณเพื่อน! มันได้ผล ฉันหวังว่าฉันจะสามารถโหวตความคิดเห็นของคุณ แต่ไม่มีตัวเลือก ตอนนี้ฉันสามารถส่ง arg พิเศษไปยัง buildForm() ได้แล้ว แต่ฉันจะได้รับรหัสบล็อกของอินสแตนซ์บล็อกปัจจุบันแบบไดนามิกได้อย่างไร
Kevin avatar
in flag
ฉันไม่เข้าใจว่าคุณหมายถึงอะไร ได้รับแบบไดนามิก?
New To 'C' avatar
in flag
ตัวอย่างเช่น หน้าของฉันมีสองบล็อกเหล่านี้ ดังนั้น Drupal จึงกำหนด ID เฉพาะ (ชื่อเครื่อง) ให้กับพวกเขา หนึ่งจะเป็นเหมือนfeedbackblock และอีกอันจะเป็นfeedbackblock_2 นี่เป็นพฤติกรรมเริ่มต้นของ Drupal ไม่ใช่สิ่งที่ฉันกำลังทำอยู่ Drupal ไม่ซ้ำบล็อกหากมีสองบล็อกในหน้าเดียวกัน ดังนั้นฉันจะได้รับชื่อเครื่องที่ไม่ซ้ำกันสำหรับแต่ละเครื่องและส่งต่อไปยัง buildForm() ได้อย่างไร
Score:2
ธง cn

มีชั้น abstaction ระหว่างที่เก็บข้อมูลของการกำหนดค่าบล็อกและการสร้างมุมมองบล็อก การกำหนดค่าบล็อกสามารถจัดเก็บได้ทุกที่และไม่จำเป็นต้องมีชื่อเครื่องอย่างไรก็ตาม คุณสามารถโอนชื่อเครื่องไปยังการตั้งค่าบล็อกได้เมื่อคุณวางบล็อกใน Block Layout:

ใช้ Drupal\block\BlockInterface;

/**
 * ใช้ hook_ENTITY_TYPE_presave() สำหรับบล็อกเอนทิตี
 */
ฟังก์ชัน mymodule_block_presave (BlockInterface $block) {
  ถ้า ($block->isNew()) {
    $settings = $block->get('ตั้งค่า');
    $settings['block_id'] = $block->get('id');
    $block->set('การตั้งค่า', $settings);
  }
}

จากนั้นคุณจะได้รับชื่อเครื่องใน build():

  สร้างฟังก์ชั่นสาธารณะ () {
    // รับรหัสบล็อกของอินสแตนซ์บล็อกปัจจุบัน
    $block_id = !empty($this->configuration['block_id']) ? $this->configuration['block_id'] : '';

เป็นบันทึกด้านข้าง ฉันไม่คิดว่ารหัสที่เหลือในคำถามนั้นใช้ไม่ได้ คุณต้องเพิ่ม ID เฉพาะให้กับอินสแตนซ์ของฟอร์มก่อนที่จะเรียก formBuilder->getForm() จากนั้นใช้เพื่อสร้าง ID ของฟอร์มเฉพาะ หลังจากนั้น buildForm() สามารถรับ ID จากคุณสมบัติคลาส ดู ใช้แบบฟอร์มเดียวกันมากกว่าหนึ่งครั้งต่อหน้าด้วยการโทรกลับ AJAX

โพสต์คำตอบ

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