-
12-12-2019 - |
题
我知道要为字段创建依赖项,可以使用节点
<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”相应。
其他提示
首先,我需要澄清你下面的措辞。
我一直在尝试几种方法来创建一个组依赖项
你真的在努力实现吗? 组依赖关系 的 字段依赖性 ?
让观点更清楚, 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
.我认为旧版本中没有此功能。(从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。