문제

필드에 대한 종속성을 생성하려면 노드를 사용할 수 있다는 것을 알고 있습니다.

<depends />

즉, 그룹 종속성을 생성하기 위해 여러 가지 방법을 시도했지만 Magento에서 언급된 실제 Form.php 코드에서 이를 사용하도록 하는 방법을 찾을 수 없는 것 같습니다.

$dependent->fieldset

그래서 거기에 있을 수도 있지만 나는 그것을 활용할 수 없었습니다.

편집하다:추가 조사에 따르면 Mage_Adminhtml_Block_System_Config_Form::initFields() 이후 종속성을 읽기 위해 필드를 반복하는 것 같습니다.

foreach ($group->fields as $elements) {

이를 달성하는 방법을 아는 것은 여전히 ​​좋은 일입니다.

도움이 되었습니까?

해결책

주석 영역에 JavaScript를 넣을 수 있습니다.그것은 이렇게 될 수 있습니다 :

<comment><![CDATA[
    <script type="text/javascript">
        document.observe("dom:loaded",function(){
            if($('sections_groups_value').value != some_value){
                 Element.up($('sections_groups')).hide();
            }
        });
        Event.observe('sections_groups_value', 'change', function(){
            if(this.value != some_value){
                Element.up($('sections_groups')).hide();
            }else if(this.value == some_value){
                Element.up($('sections_groups')).show();
            }
        })
    </script>]]>
</comment>
.

"sections_groups_value", "some_value"및 "sections_groups"를 그에 따라 바꿉니다.

다른 팁

우선, 아래 문구에 대한 설명이 필요합니다.

그룹 종속성을 생성하기 위해 여러 가지 방법을 시도해 왔습니다.

당신은 정말로 달성하려고 노력하고 있습니까? 그룹 의존성 ~의 필드 의존성 ?

요점을 더 명확하게 하기 위해, groups 그리고 fields 시스템 구성이 다릅니다.그룹은 관련 필드의 모음을 의미합니다.

관련 컬렉션 fields 구성하다 group.관련 그룹의 집합은 다음을 구성합니다. section 이러한 섹션의 모음은 전체 시스템 구성 페이지를 구성합니다.

필드 종속성에 대해 이야기하고 있다면 다음과 같습니다. 링크는 좋은 출발점입니다.

실제로 실시간 예제를 보고 싶다면 다음을 살펴보세요. Mage_Customer 기준 치수.거기 안에 app/code/core/Mage/Customer/etc/system.xml, 그룹에 대한 정의를 찾을 수 있습니다 create_account.해당 그룹에 있는 둘 이상의 필드가 이름이 있는 필드에 종속되어 있음을 알 수 있습니다. auto_group_assign.동일한 규칙에 따라 사용자 정의 필드를 선언하면 실제로 원하는 것을 쉽게 얻을 수 있습니다.

면책 조항 :- 다음 섹션은 내 관찰을 기반으로하며 정확하거나 정확하지 않을 수도 있습니다.제가 틀렸다면 정정해주세요 :-)

당신의 편집하다, 나는 당신이 올바른 방향으로 가고 있음을 알 수 있습니다. 따라서 이 부분에 대해 간략한 설명을 드리고 싶습니다.

참고하신 방법은 Mage_Adminhtml_Block_System_Config_Form::initFields(). Mage_Adminhtml_Block_System_Config_Form 시스템 구성 형태를 구성하는데 사용되는 클래스이다. initFields() 특정 그룹에서 필드를 생성하는 데 사용되는 방법입니다.

이 방법을 자세히 살펴보면 세 개의 루프를 발견할 수 있습니다.아래에는 구조가 나와 있습니다.

foreach ($group->fields as $elements) {

    //doing sorting on fields in a specific group and 
    //store sorted array of fields in $elements.

    foreach ($elements as $element) {

        //more more codes

        if ($element->depends) {
            foreach ($element->depends->children() as $dependent) {
            }
        }
    }
}

여기 먼저 foreach 루프는 특정 그룹(또는 필드 세트) 내부로 들어오는 필드를 수집합니다.이 컬렉션은 다음을 통해 만들어진 xml 구성에서 생성됩니다. system.xml 파일.그래서 필드 컬렉션은 $group->fields 정렬되지 않은 배열을 보유합니다.따라서 initField() 그런 다음 정렬을 수행하고 정렬된 필드를 배열로 유지하는 메서드 $elements.그래서 두 번째 foreach 루프는 정렬된 필드 배열을 다시 반복합니다.

이 루프 내에서 많은 일이 발생합니다.나는 그곳에서 정확히 무슨 일이 일어나는지 설명하지 않을 것입니다.하지만 우리의 관심 분야는 다음이다 foreach 루프 섹션.이 루프가 실행되기 전에, initFields() 메소드는 필드의 종속성을 확인합니다. if ($element->depends).따라서 종속성이 지정되고 해당 종속 필드를 반복합니다.($element->depends->children() 실제로 종속 필드의 배열을 생성합니다.이는 현재 필드가 의존하는 필드입니다).

기다리다...종속 필드 모음을 반복합니다 !!!!즉, 특정 필드에 대해 여러 개의 필드 종속성을 가질 수 있습니다..지금 이 순간 내가 언급하고 있는 내용을 명시해야 합니다. Magento 1.9.1.이 기능은 이전 버전에서는 사용할 수 없는 것 같습니다.(magento 1.7부터 다중 필드 종속성이 가능하다고 생각합니다).

그리고 그게 다야.이것이 magento에서 필드 종속성이 처리되는 방식입니다.위에 지정된 링크에서 자세한 내용을 확인할 수 있습니다.방금 요점을 분명히했습니다.

Magento 2.1.x의 경우 다음 jQuery를 사용하여 종속 구성 그룹을 토글 할 수 있습니다.

<comment><![CDATA[
<script type="text/javascript">//<![CDATA[
    require(['jquery'], function(){
        if (jQuery('#field_id').val() == 'value_to_compare') {
            toggleDependantGroups(true);
        }

        jQuery('#field_id').change(function() {
            if (jQuery(this).val() == 'value_to_compare') {
                toggleDependantGroups(true);
            } else {
                toggleDependantGroups(false);
            }
        });

        function toggleDependantGroups(hide=true)
        {
            if (hide) {
                jQuery('#section-id').closest('div.section-config').hide();
                jQuery('#section-id').closest('div.section-config').hide();
                jQuery('#last-visible-section-id').closest('div.section-config').css('border-bottom-width', '0px');
            } else {
            jQuery('#section-id').closest('div.section-config').show();
            jQuery('#section-id').closest('div.section-config').show();
            jQuery('#last-visible-section-id').closest('div.section-config').css('border-bottom-width', '1px');
            }
        }
    });
</script>]]>
.

필요한 경우 ID를 교체하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 magento.stackexchange
scroll top