我正在运行Joomla 1.7,我知道它有能力通过插件向组件添加自定义表单字段。
有一个示例插件位于:/plugins/user/配置文件
此插件允许您在用户配置文件前端和后端放置自定义表单字段,这些字段存储在自定义表中。
我为用户配置文件创建了一个类似的插件,它工作得很好。
然而,当我去为com_content创建这样的插件时,我遇到了一个问题。
这是我的XML文件的样子:
<?xml version="1.0" encoding="utf-8"?>
<form>
<fields name="additionalinfo">
<fieldset name="additionalinfo_fieldset" label="PLG_CONTENT_ADDITIONALINFO_FIELDSET_LABEL">
<field name="tagline" type="text" size="50" default="" label="PLG_CONTENT_ADDITIONALINFO_TAGLINE_LABEL" description="PLG_CONTENT_ADDITIONALINFO_TAGLINE_DESC" />
<field name="pseudocategory" type="category" extension="com_content" label="PLG_CONTENT_ADDITIONALINFO_PSEUDOCATEGORY_FIELD_LABEL" description="PLG_CONTENT_ADDITIONALINFO_PSEUDOCATEGORY_FIELD_DESC" />
</fieldset>
</fields>
</form>
这然而不工作,每当我做类似上面的东西,表单字段从来没有出现在管理表单(即使我有它设置正确,和用户插件和内容插件之间唯一改变的是表单的名称,我想表单出现在
当我把XML改成这样:
<?xml version="1.0" encoding="utf-8"?>
<form>
<fields name="attribs">
<fieldset name="additionalinfo_fieldset" label="PLG_CONTENT_ADDITIONALINFO_FIELDSET_LABEL">
<field name="tagline" type="text" size="50" default="" label="PLG_CONTENT_ADDITIONALINFO_TAGLINE_LABEL" description="PLG_CONTENT_ADDITIONALINFO_TAGLINE_DESC" />
<field name="pseudocategory" type="category" extension="com_content" label="PLG_CONTENT_ADDITIONALINFO_PSEUDOCATEGORY_FIELD_LABEL" description="PLG_CONTENT_ADDITIONALINFO_PSEUDOCATEGORY_FIELD_DESC" />
</fieldset>
</fields>
</form>
当我做这个简单的改变时,表单字段就显示出来了!但是,数据不会从自定义表中存储或检索,它只是进入_content表上的"attributes"列。这将内容存储在JSON中,这是可以的,但是我们希望能够根据自定义字段对内容进行索引(而不必遍历数据库中的每条记录来查找我们正在查找的内容)。
有什么办法解决这个问题吗?
谢谢!
david barratt我猜你的插件文件(例如,"yourplugin.php")将有一个名为"onContentPrepareForm"的方法。如果要向文章中添加数据,该方法应该这样开始:
function onContentPrepareForm($form, $data)
{
if (!($form instanceof JForm))
{
$this->_subject->setError('JERROR_NOT_A_FORM');
return false;
}
// Check we're manipulating an
if ( $form->getName() != "com_content.article" ) {
return true;
}
//[...] The rest of your code here
此外,如果你想将这些字段存储在另一个表中,以便更容易使用这些字段进行搜索,也许你应该创建一个新表,并使用"onContentAfterSave"方法保存数据:
public function onContentAfterSave( $context, &$article, $isNew )
在此方法中,您应该始终检查$context是否为"com_content"。
我希望它有帮助!