Score:0

มีวิธีส่งค่าไปยังฟิลด์ที่ซ่อนอยู่ไปยังหลายบล็อกที่พิมพ์จากไฟล์เทมเพลตหรือไม่?

ธง ng

สถานการณ์จำลองคือไฟล์เทมเพลต (tpl) ที่แสดงรายการแบบฟอร์มการติดต่อซึ่งแต่ละรายการไม่ซ้ำกันสำหรับ ID คำในส่วนนั้นบนหน้า ฉันต้องสร้างรายการตัวเลือกที่กำหนดเองต่อบล็อก Webform ที่พิมพ์โดยใช้ tid ที่ส่งผ่านจากส่วนที่อยู่ในเทมเพลต จนถึงตอนนี้ฉันไม่เห็นวิธีการทำเช่นนี้

ตัวอย่าง.tpl.php

<?php
   $block = module_invoke('webform', 'block_view', 'my-block-3581');
   print render($block['content']);
?>

พิมพ์ด้านบนสำหรับแต่ละส่วน (โหนด) บนหน้า และฉันสามารถเข้าถึง tid ที่พิมพ์บล็อก Webform แต่ฉันไม่สามารถหาวิธีส่งต่อไปยังแบบฟอร์มได้

Score:1
ธง cn

คุณสามารถใช้งานได้เสมอ drupal_get_form ฟังก์ชั่นดึงฟอร์มใน drupal ฟังก์ชันนี้ให้คุณส่งอาร์กิวเมนต์ที่จำเป็น เช่น คุณสามารถเรียกมันว่า:

$form = drupal_get_form('SOME_FORM_ID', $argument1);

ในกรณีนี้ $argument1 ค่าผ่านและสามารถเข้าถึงได้ใน hook_form_SOME_FORM_ID_alter ดังต่อไปนี้:

ถ้า (isset ($form_state['build_info']['args'][0]) {
  $form['SOME_ELEMENT']['#default_value'] = $form_state['build_info']['args'][0]; // เมื่อ $arguments1 ถูกส่งผ่านเป็นพารามิเตอร์แรก
}

ตอนนี้มีสิ่งนี้ในใจเพื่อรับเว็บฟอร์มโดยใช้ drupal_get_form คุณต้องใช้ข้อมูลโค้ดนี้ (ควรใช้ hook_preprocess_HOOK เพื่อเพิ่มเว็บฟอร์มในอาร์เรย์เรนเดอร์ของคุณ):

$นิด = ; // รหัสโหนดเว็บฟอร์มของคุณ
$node = node_load($นิด);
$submission = (วัตถุ) อาร์เรย์ ();
$enabled = จริง;
$ดูตัวอย่าง = FALSE;
$webform = drupal_get_form('webform_client_form_' . $nid, $node, $submission, $enabled, $preview, $YOUR_ADDITIONAL_ARGUMENT);

จากนั้นในไฟล์เทมเพลตของคุณ คุณสามารถพิมพ์ $webform ของคุณ:

พิมพ์ drupal_render($webform);

อย่างที่ฉันบอกว่าคุณสามารถใช้ hook_form_alter เพื่อตั้งค่าเริ่มต้นขององค์ประกอบที่ซ่อนอยู่โดยใช้พารามิเตอร์ที่ส่ง

Juraj Nemec avatar
in flag
ฉันคิดว่ามันมีประโยชน์ที่จะพูดว่า ไม่ควรเรียก `drupal_get_form` ในไฟล์เทมเพลต ตามหลักการแล้ว OP จะต้องใช้หนึ่งในฟังก์ชันประมวลผลล่วงหน้าใน template.php หรือส่ง $webform เป็นพารามิเตอร์ไปยังไฟล์เทมเพลตนั้น (หากมีการเรียกใช้ฟังก์ชัน `ธีม() โดยตรง เช่น จากโมดูลที่กำหนดเอง)
Alireza Tabatabaeian avatar
cn flag
@JurajNemec และฉันคิดว่าเป็นความคิดที่ดีที่จะบอกว่ามันถูกกล่าวถึงในคำตอบแล้ว
quantumized avatar
ng flag
ขอขอบคุณ! อีกหนึ่งคำถามฉันจะเข้าถึงอาร์กิวเมนต์ใน Webform ได้อย่างไรเมื่อส่งผ่าน drupal_get_form() ฉันต้องการเติมข้อมูลในฟิลด์ที่ซ่อนอยู่ ถ้าเป็นไปได้
Alireza Tabatabaeian avatar
cn flag
คุณสามารถใช้ hook_form_alter จากนั้นคุณสามารถเข้าถึงอาร์กิวเมนต์ของคุณ $form_state['build_info']['args'][4]
Juraj Nemec avatar
in flag
@AlirezaTabatabaeian ฉันเขียนความคิดเห็นของฉันเพราะสำหรับฉันมันไม่ได้ระบุไว้อย่างชัดเจนในคำตอบของคุณ คุณเขียนเป็นหมายเหตุด้านข้างในวงเล็บเท่านั้น จึงดูเหมือนว่านิพจน์นั้นมีน้ำหนักเพียงเล็กน้อย แต่ไม่เป็นไร ฉันแค่ต้องการช่วย OP ด้วยแนวทางปฏิบัติที่ดีที่สุด...

โพสต์คำตอบ

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