我创建了一个用户插件,用于在Joomla 3.6.5中扩展默认用户配置文件。 我在 profiles / profile.xml 中添加了以下字段 sample_title 。
<field
name="sample_title"
type="list"
id="sample_title" description="sample description..." label="sample title" default="">
<option value="mr">Mr</option>
<option value="mrs">Mrs</option>
</field>
在我的插件类中,我有一个函数onContentPrepareForm($ form,$ data)。在此函数中,我尝试通过执行 $ form-&gt; setFieldAttribute('sample_title','required','true','profilecustom')来更改sample_title的必需属性; 如果我在下一行看到所需的属性值,似乎没关系,所需的是“true”。此代码 echo $ form-&gt; getFieldAttribute('sample_title','required','false','profilecustom '); 打印true,这对我来说没问题。 但是当我显示注册视图(我使用com_users中的 registration / default.php 视图)时,sample_title字段被声明为可选。在注册视图中,我们有
<?php if (!$field->required && $field->type != 'Spacer') : ?>
<span class="optional"><?php echo JText::_('COM_USERS_OPTIONAL');?></span>
<?php endif; ?>
并为sample_title显示此范围,同时我将所需的字段属性设置为true,因此它不正常...
作为补充信息:
我做错了吗? 我知道我可以将所需的值放在字段声明中
<field
name="sample_title"
type="list"
id="sample_title" description="sample description..." label="sample_title" default="" required="true">
但这不是我想要的。我想在某些条件下设置这个值,所以我需要以编程方式进行。
我继续调查:-)在注册视图中,如果我使用默认方式显示字段
<?php foreach ($fields as $field) : ?>
....
<?php if (!$field->required && $field->type != 'Spacer') : ?>
<span class="optional"><?php echo JText::_('COM_USERS_OPTIONAL');?></span>
<?php endif; ?>
...
<?php endforeach;?>
$ field-&gt;必需为false但如果我尝试使用 $ sample_title_field = $ this-&gt; form-&gt; getField('sample_title','profilecustom)获取字段'); 然后 $ sample_title_field-&gt;必需是真的所以似乎 $ this-&gt; form-&gt; getFieldset($)返回的字段之间存在一些不一致fieldset-&gt; name); 以及那些使用 $ this-&gt; form-&gt; getField(...);
的人答案 0 :(得分:0)
在示例代码(https://docs.joomla.org/Creating_a_profile_plugin)中,他们执行 $ form-&gt; loadFile('profile',false); 。我用 $ form-&gt; loadFile('profile',true); 替换了这段代码,现在字段属性已正确更新。
答案 1 :(得分:0)
我使用 $ form-&gt; loadFile('profile'); ,它也可以。