phụ thuộc trường system.xml


16

Vì vậy, bạn có thể đặt trong system.xmltệp của mô-đun một phụ thuộc giữa các trường bằng cách thêm <depends>thẻ vào một trong các trường.

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

Mã ở trên có nghĩa là field2sẽ được hiển thị khi giá trị field11. Tôi muốn biết làm thế nào / nếu tôi có thể nói với Magento để hiển thị field2nếu giá trị cho field11HAY 2?

Câu trả lời:


29

Thử đi:

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

Bạn có biết rằng điều này hoạt động, hoặc bạn chỉ đưa nó ra khỏi đó?
đánh dấu

1
Anh bạn ... tôi không biết làm thế nào, nhưng điều này thực sự hoạt động. Bây giờ tôi xấu hổ và xin lỗi vì tất cả những lời nói xấu của tôi, tôi đã nói với những người thực hiện phần cấu hình. Vì một số lý do $dependent['separator']trả về giá trị của thuộc tính separator. Đối với những người đã từng đánh giá thấp điều này, xin vui lòng upvote (hai lần nếu có thể). Hoạt động hoàn hảo. Cảm ơn. cc @benmark
Marius

1
Điều này làm việc! = Đó là một ý tưởng tốt. Tôi nghĩ rằng không cần phải xin lỗi vì lời nói của bạn :-D
đánh dấu

7

[BIÊN TẬP]

Tôi đã sai trong câu trả lời của tôi dưới đây. Tôi sẽ không xóa nó (vì) tôi đã nhận được 7 lượt upvote về điều này :). Nhưng tôi đang chỉnh sửa nó để tất cả các bạn có cơ hội rút lại phiếu bầu của mình (thậm chí hạ cấp nó, vì tôi xứng đáng với điều đó).

Câu trả lời gốc

Ha! .. Tôi tìm thấy nó.
Câu trả lời ngắn gọn: Bạn không thể!
Câu trả lời dài : Bạn sẽ có thể làm điều đó nếu ai đó biết được sự khác biệt giữa một mảng và một đối tượng.
Về lý thuyết, điều này sẽ làm việc

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

Nhưng trong mã xử lý sự phụ thuộc, Mage_Adminhtml_Block_System_Config_Form::initFieldsxung quanh dòng 366 có mã này

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

$dependentluôn luôn là một đối tượng vì vậy $dependent['separator']không bao giờ được thiết lập.
Nếu tôi thay đổi mã ở trên thành

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

mọi thứ hoạt động trơn tru.
Tôi đoán rằng tôi không thể thay đổi lõi chỉ vì mục đích mở rộng nên tôi phải tạo 2 trường thay vì 1, mỗi trường cho mỗi giá trị field1hoặc tạo một js tùy chỉnh xử lý việc này và thêm nó vào trang cấu hình.


2
Chết tiệt. Tôi biết loại lỗi này :-) Tôi hy vọng bạn báo cáo nó? Cái nhìn sâu sắc!
Fabian Blechschmidt

1
Người đàn ông đó là một cuộc điều tra tuyệt vời, bạn có chắc bạn không phải là Sherlock? +1 để báo cáo nó.
Phong tục David

2
@DavidManners sơ cấp watson thân yêu của tôi
Marius
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.