【问题标题】:Custom formfield for core component核心组件的自定义表单域
【发布时间】:2014-04-07 15:56:37
【问题描述】:

我正在为 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;
            }
    }
    ?>

forms/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 文件替换以前存在的表单字段 - 这些值已正确存储。 (此外,我注意到Jform::loadFile (See docs) 的$reset 参数没有任何作用。不管是true 还是false,表单域总是被替换。)

我完全不知道这里发生了什么……!?有人呢?

【问题讨论】:

    标签: php plugins joomla


    【解决方案1】:

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

    本教程不适用于 com_content 的原因是,数据库中的 __content-table 没有字段“params”(与本教程中使用的 __contact_details-table 形成对比) .

    因此,要么您必须更改表格并添加一列。但是,有一个更好的解决方案:由于字段集中的所有参数都作为 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-01
      • 2021-05-05
      • 2011-09-03
      • 2019-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多