Joomla - 在插件中设置字段属性

Posted

技术标签:

【中文标题】Joomla - 在插件中设置字段属性【英文标题】:Joomla - setting field attribute in a plugin 【发布时间】:2017-01-04 12:22:14 【问题描述】:

我创建了一个用户插件,用于在 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->setFieldAttribute('sample_title', 'required', 'true', 'profilecustom'); 来更改 sample_title 的必需属性; 如果我在下一行看到所需的属性值,似乎可以,所需的是“true”。此代码 echo $form->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; ?>

当我将必填字段属性设置为 true 时,会为 sample_title 显示这个跨度,所以它不是 OK...

作为附加信息:

我试过 $form->setFieldAttribute('sample_title', 'required', 'true', 'profilecustom');$form->setFieldAttribute('sample_title', '必需的', true, 'profilecustom');.结果是一样的。 我按照以下文档 (https://docs.joomla.org/Creating_a_profile_plugin) 创建了我的插件。

我做错了吗? 我知道我可以将所需的值放在字段声明中

<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->required 是假的,但如果我尝试使用 $sample_title_field = $this->form->getField('sample_title', 'profilecustom'); 然后 $sample_title_field->required 为真,所以 $this->form->getFieldset($fieldset->name); 返回的字段之间似乎存在一些不一致 以及那些使用 $this->form->getField(...);

【问题讨论】:

【参考方案1】:

在示例代码 (https://docs.joomla.org/Creating_a_profile_plugin) 中,它们执行 $form->loadFile('profile', false);。我用 $form->loadFile('profile', true); 替换了这段代码,现在字段属性已正确更新。

【讨论】:

【参考方案2】:

我用$form->loadFile('profile');,它也可以。

【讨论】:

以上是关于Joomla - 在插件中设置字段属性的主要内容,如果未能解决你的问题,请参考以下文章

Joomla v1.6 - 如何在控制器中设置自定义成功消息?

没有插件的Joomla自定义类型/自定义字段?

将 Joomla SEF 规则从 .htaccess 移至 vhosts.conf

K2 (Joomla) 的多个额外字段组

如何使用插件打包我的 joomla 2.5 组件?

在 Joomla! 中搜索 created_by_alias 字段!内容