วิธีการซ่อนและ / หรือป้องกันการเข้าถึงฟิลด์ในแบบฟอร์มเช่น group_audience สำหรับกลุ่มออร์แกนิก


9

สิ่งนี้ทำให้ฉันลำบากในขณะที่ .. เมื่อฉันพยายามซ่อนเขตข้อมูลเช่นกลุ่มผู้ชมกลุ่มหรือการตั้งค่าการเผยแพร่จากแบบฟอร์มในการตรวจสอบความถูกต้องแบบฟอร์มตั้งค่าทั้งสองของเขตข้อมูลเหล่านี้เป็นค่า Null แม้ว่าค่า defaut เป็น ได้รับการประกาศอย่างถูกต้อง

ฉันพยายามใช้ Invisible, #access, unset hidden ใด ๆ ที่ไม่ทำงาน! นี่เป็นปัญหามากเพราะสำหรับผู้ใช้โครงการปัจจุบันของฉันสามารถแก้ไขโปรไฟล์เพียงเล็กน้อยในเวลาเช่นที่อยู่หรือรูปภาพดังนั้นหากฉันซ่อนผู้ชมกลุ่มผู้ใช้จะถูกเตะออกจากกลุ่มที่เขาเป็นเจ้าของทุกคน แก้ไข

ฉันใช้รหัสด้านล่างเพื่อซ่อนฟิลด์เหล่านี้ในขณะที่ยังคงรักษาผู้ใช้อยู่ในกลุ่ม

$variables['user_edit_about']['group_audience']= $temp['group_audience'];       
$variables['user_edit_about']['group_audience']['#prefix'] = '<div style="display:none;">';
$variables['user_edit_about']['group_audience']['#suffix'] = '</div>';

ใครจะคิดวิธีที่ดีกว่าเพื่อให้บรรลุนี้

ขอบคุณ


คำตอบนี้ไม่สมบูรณ์เพราะการใช้ยังสามารถเปลี่ยนค่าด้วยการจัดการ DOM
iStryker

คำตอบ:


6

แก้ไข:

ตกลงฉันคิดออก ใส่สิ่งนี้ในโมดูลที่กำหนดเองของคุณ:

function example_form_alter(&$form, &$form_state, $form_id) {
    if($form_id == 'story_node_form') {
        $form['title']['#value'] = 'hot stuff';
        $form['title']['#access'] = FALSE;

    }
}

สิ่งนี้จะตั้งชื่อของโหนดเรื่องเป็น 'สิ่งที่น่าสนใจ' และจะไม่ถูกแสดงบนหน้าเพราะ #access = FALSE;

คุณสามารถเพิ่มการควบคุมรายย่อยเพิ่มเติมภายใน hook_form_alter () เช่น

  global $user;

  // Check to see if $user has does not have the administrator role.
  if (!in_array('administrator', array_values($user->roles))) {
    $form['title']['#access'] = FALSE;
  }

ใช้งานได้กับ Drupal 6 และ 7

คำตอบเก่า (ไม่สนใจ):

มันไม่นานมานี้ตั้งแต่ฉันทำอะไรแบบนี้ฉันก็เลยคิดผิด หากคุณตั้งค่า [#value]ของไอเท็มฟอร์มจะไม่สามารถมองเห็นได้บนฟอร์ม

ฉันทำสิ่งนี้ใน Drupal 6 hook_form_alter()ในโมดูลที่กำหนดเอง ฉันไม่รู้ว่ามันจะทำงานใน Drupal 7 และฉันไม่รู้ว่าคุณสามารถทำได้ในฟังก์ชั่น preprocess หรือไม่


ขอบคุณสำหรับคำตอบของคุณถึงแม้ว่ามันจะไม่ได้ผลในกรณีของฉัน แต่แบบฟอร์มมี #value ก่อนยื่นเนื่องจากพวกเขาเป็นรูปแบบการแก้ไข
silkAdmin

@silkAdmin โปรดดูการแก้ไขใหม่
iStryker

ขอขอบคุณสไตรเกอร์ที่สละเวลาในการขุดเหตุการณ์แม้ว่าการใช้เทคนิคข้างต้นของคุณจะทำงานได้ซ่อนเขตข้อมูลดูเหมือนว่าค่าเริ่มต้นจะไม่นำมาพิจารณาเมื่อส่งเช่นกัน ดังนั้นฉันเลยจบลงด้วยผู้ใช้ที่ยังคงถูกไล่ออกจากกลุ่มของพวกเขาในทุกการแก้ไขโปรไฟล์ จนถึงตอนนี้มีเพียง #prefix # suffix trick เท่านั้นที่ดูเหมือนจะทำงานได้ตามปกติ
silkAdmin

ทำ $ form ['title'] ['# value'] = $ form ['title'] ['# default_value']
iStryker

5

คุณยังสามารถเพิ่มคลาส CSS 'องค์ประกอบที่ซ่อนอยู่' ในองค์ประกอบของฟอร์ม

$form['user_edit_about']['group_audience']['#attributes']['class'][] = 'element-hidden';

ดังที่ iStryker กล่าวถึงก่อนหน้านี้มันยังคงเป็นไปได้ที่จะเปลี่ยนค่าผ่านการจัดการ DOM อย่างไรก็ตามนี่เป็นวิธีที่ดีและง่ายในการซ่อนเขตข้อมูลฟอร์ม (หรือองค์ประกอบการแสดงผลอื่น ๆ ) ระดับที่กำหนดไว้ในelement-hiddensystem.base.css


บัดดี้คุณช่วยฉัน ขอบคุณ วิธีการอื่น ๆ ทั้งหมดที่ฉันเคยเห็นไม่ได้ส่งออกองค์ประกอบในรูปแบบของตัวเอง ในกรณีของฉันฉันต้องการซ่อนองค์ประกอบของฟอร์มในโมดูล contrib ซึ่งคาดว่าองค์ประกอบเหล่านั้นจะอยู่ในแบบฟอร์มมิฉะนั้นจะไม่สามารถทำงานได้อย่างถูกต้อง แก้ไข CSS ของคุณซ่อนองค์ประกอบที่ไม่พึงประสงค์ แต่ทุกอย่างยังคงทำงาน ขอขอบคุณที่โปรดสังเกตว่านี่ไม่ใช่ "หลักฐานแฮกเกอร์" และใช้งานได้ทุกเมื่อที่คุณต้องการคือการทำให้อินเทอร์เฟซที่คุณนำเสนอแก่ผู้ใช้โปรแกรมแก้ไขที่เชื่อถือได้ง่ายขึ้น
Mario Awad
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.