我知道要为字段创建依赖项,可以使用节点

<depends />

也就是说,我一直在尝试几种方法来创建一个组依赖项,但我似乎无法找到一种方法来使Magento在实际表单上使用它。它提到的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”相应。

其他提示

首先,我需要澄清你下面的措辞。

我一直在尝试几种方法来创建一个组依赖项

你真的在努力实现吗? 组依赖关系字段依赖性 ?

让观点更清楚, groupsfields 在系统配置上是不同的。组是指相关字段的集合。

相关的集合 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.我认为旧版本中没有此功能。(从magento1.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归因
scroll top