核心组件的自定义表单域

时间:2014-04-07 15:56:37

标签: php plugins joomla

我正在为Joomla 3.2编写一个小插件,它应该扩展一个核心组件(com_content),因此它在创建文章时还会在后端显示自定义表单字段。

我跟着instructions from the docs,但不幸的是它根本没用。表单字段显示在后端,但是当我输入内容并点击保存时,这些值不会存储在数据库中。

test123.php

    <?php
    defined ( '_JEXEC' ) or die ( 'Restricted access' );

    class plgContentTest123 extends JPlugin {

            protected $autoloadLanguage = true;

            function onContentPrepareForm($form, $data) {
                    $app = JFactory::getApplication();
                    $option = $app->input->get('option');

                    switch($option) {
                            case 'com_content':
                            if ($app->isAdmin()) {
                                    JForm::addFormPath(__DIR__ . '/forms');
                                    $form->loadFile('content', false);
                            }
                            return true;
                    }
                    return true;
            }
    }
    ?>

形式/ content.xml中

    <?xml version="1.0" encoding="UTF-8"?>
    <form>
            <fields name="params" >
                    <fieldset name="params" >
                            <field
                                    name="test123"
                                    type="text"
                                    label="Test Field"
                                    />
                            <field
                                    name="test234"
                                    type="text"
                                    label="Another one"
                                    filter="email"
                            />
                    </fieldset>
            </fields>
    </form>

但是,我能够用XML文件替换以前存在的表单字段 - 这些值是正确存储的。 (此外,我注意到,$reset Jform::loadFile的{​​{1}}参数没有任何影响。无论是true还是false ,形式总是被替换。)

我完全不知道这里发生了什么......!?那么有人吗?

1 个答案:

答案 0 :(得分:0)

我找到了问题的解决方案。仅供将来参考:

为什么教程不适用于com_content的原因是,数据库中的__content - 表没有字段&#34; params&#34; (与本教程中使用的__contact_details - 表相反)。

因此,您必须更改表格并添加列。但是,有一个更好的解决方案:由于字段集中的所有参数都存储为数据库中的JSON编码字符串,因此您只需使用自定义参数连接到现有字段集:

<?xml version="1.0" encoding="UTF-8"?>
<form>
        <fields name="urls" >
                <fieldset name="urls" >
                        <field
                                name="test123"
                                type="text"
                                label="Test Field"
                                />
                        <field
                                name="test234"
                                type="text"
                                label="Another one"
                                filter="email"
                        />
                </fieldset>
        </fields>
</form>