如何添加字段到com_content在Joomla!使用插件并将数据存储在自己的表中



我正在运行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"。

我希望它有帮助!

相关内容

  • 没有找到相关文章

最新更新