2

我正在运行 Joomla 1.7,我知道它能够使用插件向组件添加自定义表单字段。

有一个示例插件位于:/plugins/user/profile

此插件允许您在用户配置文件前端和后端放置自定义表单字段,这些字段存储在自定义表中。

我为用户配置文件创建了一个类似的插件,它运行良好。

但是,当我为 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 表上的“attribs”列。这将内容存储在 JSON 中,这很好,但我们希望能够通过自定义字段对内容进行索引(并且不必遍历数据库中的每条记录来查找我们要查找的内容)。

有想法该怎么解决这个吗?

谢谢!

大卫巴拉特

4

1 回答 1

0

我猜你的插件文件(例如,“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.article”,否则在保存类别时可能会遇到问题。

我希望它有帮助!

于 2011-11-17T20:29:34.550 回答