วิธีค้นหาองค์ประกอบในอาร์เรย์เรนเดอร์


8

ฉันใช้เวลามากมายในการค้นหาองค์ประกอบในอาร์เรย์เรนเดอร์ ฉันมักจะใช้dpm()ในการพิมพ์อาร์เรย์แล้วขยายตัวเลือกจนกว่าฉันจะพบสิ่งที่ฉันกำลังมองหา

ในอาร์เรย์ขนาดใหญ่ที่ยุ่งยาก เมื่อฉันใช้print_r()ฉันสามารถค้นหาข้อความ แต่ก็ยากที่จะเห็นโครงสร้างของอาร์เรย์และค้นหาเส้นทางไปยังองค์ประกอบ

คุณสามารถแนะนำวิธีการอื่นได้อีก


คำถามนี้มีค่าที่จะเพิ่มพนักงานเต็มของฉัน !!
niksmac

มีบางโมดูลจะสวยขึ้นทั้งหมดนี้Caca ฉันขี้เกียจเกินไปที่จะไปดู แต่โมดูล dev รวมกับ krumo และเครื่องมือเพิ่มประสิทธิภาพการถ่ายโอนข้อมูลอื่น ๆ ถ้าฉันจำได้อย่างถูกต้อง จากนั้นจะมีดีบักเกอร์เก่าที่ดีอยู่เสมอซึ่งคุณสามารถตรวจสอบและขับลงวัตถุได้
stefgosselin

@stefgosselin OP ใช้โมดูล Devel อยู่แล้วdpm()ฉันคิดว่าเขากำลังมองหาฟังก์ชั่นเพื่อค้นหาอิลิเมนต์ย่อยภายในอาเรย์เรนเดอร์โดยใช้ชื่อ / คีย์ที่กำหนด
Clive

@MotoTribe หากฉันได้รับสิ่งที่ถูกต้องและคุณกำลังมองหาฟังก์ชั่นคุณจะหวังที่จะให้ / รับเอาท์พุท / เอาท์แบบไหน? มันจะเป็นสิ่งที่ต้องการ$elements = find_elements_by_key($render_array, 'element_name');กลับอาร์เรย์ขององค์ประกอบทั้งหมดในอาร์เรย์แสดงผลด้วยคีย์การจับคู่?
Clive

แก้ไข. ใน devel "krumo display = disabled" แสดงอาร์เรย์ที่จัดรูปแบบที่ดีกว่าซึ่งฉันสามารถใช้การค้นหาข้อความ โดยหลักการแล้วควรมีฟังก์ชั่นการค้นหาในเอาต์พุต krumo และคุณสมบัติ "คัดลอก" ที่ฉันสามารถคัดลอกเส้นทางแบบเต็ม ['... '] ['... '] โดยไม่ต้องพิมพ์ ใช่ฟังก์ชั่นของคุณก็ยอดเยี่ยมเช่นกัน นั่นไม่ใช่ฟังก์ชั่น Drupal หรือ PHP ใช่มั้ย
Uwe

คำตอบ:


9

มีโมดูลส่วนขยายสำหรับ Devel คือค้นหา Krumo มันใช้ Javascript เพื่อค้นหาข้อความในข้อความ Krumo / dpm และเปิดอาร์เรย์ในสถานที่เหล่านั้น
ดูเหมือนว่านี้:
ป้อนคำอธิบายรูปภาพที่นี่

ปรับปรุง

หลังวันที่ 22 เม.ย. 2555คุณควรใช้sdpm()ฟังก์ชั่นเพื่อดูช่องค้นหา


ไม่มีทางนั่นคือสิ่งที่ฉันกำลังมองหา !!! ขอบคุณ !!!
Uwe

@MotoTribe เพื่อที่จะสามารถได้รับการยอมรับผมคิดว่า :)
kalabro

ขอโทษที่พลาดไป นี่เป็นเครื่องมือที่ยอดเยี่ยมใช้มันตลอดเวลา !!!
Uwe

ฉันใส่โมดูลส่วนขยายนี้ที่ไหน ทั้งในไดเรกทอรี devel [\ www \ drupal \ sites \ all \ modules \ devel] หรือภายในไดเรกทอรีโมดูลที่มีส่วนร่วม [\ www \ drupal \ sites \ all \ modules]
GiLL

คุณช่วยพูดถึงวิธีการใช้ฟังก์ชั่น sdpm () ได้ไหม? วางที่ไหน ขอบคุณมาก.
CodeNext

5

ปัญหาใหญ่อย่างหนึ่งของการเรนเดอร์เรย์คือมักจะมีสำเนาของข้อมูลที่คุณกำลังค้นหาอยู่เป็นจำนวนมาก หากคุณต้องการเปลี่ยนการแสดงผลจริงคุณต้องค้นหาสิ่งที่ถูกต้อง ฉันมักจะใช้ dpm () จากนั้นดูแหล่งที่มาของหน้าและค้นหาผลลัพธ์ที่มีการพลิกกลับไปกลับมาระหว่างสองจอแสดงผลจนกว่าฉันจะพบสิ่งที่ฉันต้องการ

หากคุณต้องการถ่ายโอนเนื้อหาของอาร์เรย์การแสดงผลสำหรับเส้นทางที่กำหนดไปยังเทอร์มินัล (เช่นเพื่อส่งผ่าน grep) คุณสามารถทำสิ่งนี้:

drush ev '$router_item=menu_get_item("node/7"); require_once(DRUPAL_ROOT .
"/" . $router_item["include_file"]);
$render_array=call_user_func_array($router_item["page_callback"],
$router_item["page_arguments"]); print_r($render_array);'

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

อัปเดต:ฉันพบบทความที่ดีมากในเรื่องนี้: The Scary Render Array - อาจเป็นวิธีการเรนเดอร์อาร์เรย์ที่ดีที่สุดเท่าที่ฉันเคยเห็นมา ฉันควรได้กล่าวถึงโมดูลdevel_themerล่วงหน้าเช่นกัน มันทำงานได้ดีที่ "ซูมเข้า" ในส่วนของเรนเดอร์เรนเดอร์ที่คุณสนใจ


ไม่สามารถขอบคุณมากพอสำหรับการลิงก์ไปยัง The Scary Render Array - บทความที่ยอดเยี่ยม!
แอนดี้
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.