การพึ่งพาฟิลด์ system.xml


16

ดังนั้นคุณสามารถตั้งค่าในsystem.xmlไฟล์ของโมดูลการพึ่งพาระหว่างเขตข้อมูลโดยการเพิ่ม<depends>แท็กในหนึ่งในเขตข้อมูล

<field1>
    ....
</field1>
<field2>
    ....
    <depends>
       <field1>1</field1>
    </depends>
</field2>

รหัสข้างต้นหมายความว่าfield2จะแสดงเมื่อค่าของการมีfield1 1ฉันต้องการทราบว่าฉันสามารถบอกให้วีโอไอพีแสดงfield2ว่าค่าfield1เป็น1หรือ2?

คำตอบ:


29

ลองสิ่งนี้:

<depends>
    <field separator="|">
        <value>1|2|3</value>
    </field>
</depends>

คุณรู้หรือไม่ว่ามันใช้งานได้หรือคุณเพิ่งวางมันไว้ที่นั่น?
benmarks

1
เพื่อน ... ฉันไม่รู้ว่า แต่มันใช้งานได้จริง ตอนนี้ฉันละอายใจและขอโทษสำหรับคำพูดที่ไม่ดีทั้งหมดของฉันที่ฉันพูดกับคนที่ใช้ส่วนกำหนดค่า ด้วยเหตุผลบางอย่างกลับค่าของแอตทริบิวต์$dependent['separator'] separatorสำหรับผู้ที่เคยลงคะแนนนี้โปรดโหวต (ถ้าเป็นไปได้สองครั้ง) ทำงานได้อย่างสมบูรณ์แบบ ขอบคุณ cc @benmarks
Marius

1
สิ่งนี้ใช้งานได้! = มันเป็นความคิดที่ดี ฉันคิดว่าไม่จำเป็นต้องขอโทษคำของคุณ :-D
benmarks

7

[แก้ไข]

ฉันตอบผิดด้านล่าง ฉันจะไม่ลบ (เพราะ) เพราะฉันมี 7 upvotes ในเรื่องนี้ :) แต่ฉันจะแก้ไขเพื่อให้คุณทุกคนมีโอกาสถอนการลงคะแนนของคุณ (แม้แต่ลงเพราะฉันสมควรได้รับมัน)

คำตอบเดิม

ฮ่า! .. ฉันพบแล้ว
คำตอบสั้น ๆ :คุณไม่สามารถ!
คำตอบยาว ๆ : คุณควรจะทำได้ถ้ามีใครรู้ถึงความแตกต่างระหว่างอาร์เรย์กับวัตถุ
ในทางทฤษฎีสิ่งนี้น่าจะได้ผล

<field1>
    ....
</field1>
<field2>
    ....
    <depends>
       <field1>
           <value>1|2</value>
           <separator>|</separator>
       </field1>
    </depends>
</field2>

แต่ในรหัสที่จัดการการพึ่งพาMage_Adminhtml_Block_System_Config_Form::initFieldsรอบ ๆ บรรทัด 366 มีรหัสนี้

if (isset($dependent['separator'])) {
    $dependentValue = explode((string)$dependent['separator'], $dependentValue);
}

$dependentเป็นวัตถุเสมอจึง$dependent['separator']ไม่เคยตั้ง
หากฉันเปลี่ยนรหัสข้างต้นเป็น

if (isset($dependent->separator)) {
    $dependentValue = explode((string)$dependent->separator, $dependentValue);
}

ทุกอย่างทำงานได้อย่างราบรื่น
ฉันเดาว่าฉันไม่สามารถเปลี่ยนแกนเพื่อประโยชน์ของส่วนขยายดังนั้นฉันต้องสร้าง 2 ฟิลด์แทน 1 หนึ่งสำหรับแต่ละค่าจากfield1หรือสร้าง js ที่กำหนดเองที่จัดการสิ่งนี้และเพิ่มไปยังหน้าการตั้งค่า


2
ประณามมัน ฉันรู้ข้อบกพร่องประเภทนี้ :-) ฉันหวังว่าคุณจะรายงานมัน? ความเข้าใจที่ยอดเยี่ยม!
Fabian Blechschmidt

1
โอ้ชายผู้มีการสอบสวนที่ดีมากคุณแน่ใจหรือว่าคุณไม่ใช่เชอร์ล็อค +1 สำหรับการรายงาน
David Manners

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