我正在为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
,形式总是被替换。)
我完全不知道这里发生了什么......!?那么有人吗?
答案 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>