ซ่อนกลุ่มฟิลด์ CCK โดยใช้ #states ใน hook_form_alter () หรือไม่


9

ฉันมีโมดูลที่กำหนดเองและฉันพยายามซ่อน CCK fieldgroup โดยใช้ "#states" เมื่อมีการเลือกรายการบางรายการในรายการเลือกแบบหล่นลง

ฉันได้ลองใช้สถานะจากภายใน hook_form_alter () เช่น:

$form['group_mygroup']['#states']['invisible'] = array(
  ':input[name="field_trigger[' . LANGUAGE_NONE. ']"]' => array( 'value' => 'hide' ),
);

ดูเหมือนจะไม่ทำอะไรเลย

ฉันได้ดูการเปลี่ยนแปลงน้ำหนักของโมดูลของฉันตามเว็บไซต์ต่างๆเช่นhttp://proofgroup.com/blog/2008/dec/modifying_cck_fieldgroups_hook_form_alter

แต่ก็ยังไม่มีประโยชน์ ฉันสามารถซ่อนองค์ประกอบแบบฟอร์มทั้งหมดภายในกลุ่มฟิลด์โดยใช้สถานะ แต่ไม่ใช่กลุ่มฟิลด์เอง ไม่มีใครมีความคิดใด ๆ


สำหรับผู้ชมในอนาคต: @ andriy-malish 'คำตอบคือคำตอบที่ถูกต้อง
UltraBob

คำตอบ:


11
/ **
 * ใช้ hook_field_group_build_pre_render_alter
 * /
ฟังก์ชัน mymodule_field_group_build_pre_render_alter (& องค์ประกอบ $) {
  if (isset ($ element ['# form_id'])) {
    if ($ element ['# form_id'] == 'mynodetype_node_form') {
      $ องค์ประกอบ ['group_myfieldgroup'] ['# states'] = อาร์เรย์ (
        'visible' => อาร์เรย์ (
          ': อินพุต [name = "field_myfield [und]"]' => อาร์เรย์ ('ถูกทำเครื่องหมาย' => TRUE)
        )
      );
      $ element ['group_myfieldgroup'] ['# id'] = 'group_myfieldgroup';
    }
  }
}

ฉันใช้เบ็ดนี้เพื่อซ่อนกลุ่มสาขาของฉัน มันมองเห็นได้เฉพาะในกรณีที่ช่องfield_myfieldมีการตรวจสอบ

เพื่อสำรวจ$elementตัวแปรในเบ็ดนี้ฉันใช้

die('<pre>'.print_r($element, 1).'</pre>');

dpm()แทน

หวังว่าจะช่วย :)


1

Fieldgroups $formยังไม่ได้กำหนดไว้ในรากของ ดูเหมือนว่าคุณควรจะใช้ไม่ได้แต่$form['group_mygroup']$form['#fieldgroups']['group_mygroup']


0

คุณสามารถดูโมดูลตัวอย่างเพื่อดูว่าพวกเขาซ่อน fieldetsอย่างไร ตามที่ฉันคิดว่ารหัสของคุณควรเป็น:

$form['group_mygroup']['#states'] = array(
  'invisible' => array(
    ':input[name="field_trigger"]' => array('value' => 'hide'),
  ),
),

2
ขอบคุณสำหรับคำแนะนำของคุณ แม้ว่ามันจะเหมือนกับรหัสของฉันเท่านั้นที่ประกาศแตกต่างกันเล็กน้อย ฉันสามารถซ่อน fieldets ถ้าฉันประกาศฟอร์มและ fieldset โดยใช้ FAPI ปัญหาของฉันคือมันไม่ทำงานกับกลุ่มเขตข้อมูล CCK ภายใน hook_form_alter ()
thepearson
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.