我正在尝试在 Joomla 2.5 中创建一个自定义组件,并努力让它阻止它从编辑器字段中剥离所有 html 标签 - 链接、新行、p 标签 - 完整的作品。表单域如下:
<field
name="post"
type="editor"
label="COM_HELLO_WORLD_EDITOR_LABEL"
description="COM_HELLO_WORLD_EDITOR_DESC"
class="inputbox"
filter="JComponentHelper::filterText"
required="true"
default=""
/>
显然,在 SO 和 Joomla 论坛上都有很多关于此的帖子。然而,它们通常似乎有两个明确的主题。
- 微小的 MCE 设置。在将我的默认编辑器设置为“无”(即只是一个文本区域)后,我已经检查过了,标签仍然被剥离
- Joomla 文本过滤器设置。我以全局管理员身份登录,超级用户设置为“无过滤”
我为此覆盖了模型的保存功能:
function store()
{
$row =& $this->getTable();
$input = new JInput();
$data = $input->getArray($_POST);
//Sets Users id as current logged in user if not set
if(!$data['jform']['post_user']) {
$data['jform']['post_user']=JFactory::getUser()->id;
}
// Bind the form fields to the post table
if (!$row->bind($data['jform'])) {
$this->setError($this->_db->getErrorMsg());
return false;
}
// Make sure the hello is valid
if (!$row->check()) {
$this->setError($this->_db->getErrorMsg());
return false;
}
// Store the hello table to the database
if (!$row->store()) {
$this->setError($this->_db->getErrorMsg());
return false;
}
return true;
}
我的直觉是它与 JInput 剥离 HTML 标签有关。但即使在保存文件中添加额外的行$data['jform']['post']=$input->getHTML('post');
也没有任何反应。所以我不确定从这里去哪里。有任何想法吗?
更新
只是为了快速澄清一个问题 - 我想使用“全局配置”下预设的 Joomla“文本过滤器”设置,而不是手动设置组件中的每个标签!
更新 2
我将 filter="raw" 添加到编辑器表单字段中。现在,<p>
当我转储变量时,我看到了 html 标记$_POST['jform']['post'], null, 'HTML')
。然而,当只应用一个简单的 JInput 过滤器函数时——更不用说应用 Joomla 配置值了——我得到了空值。
$input = new JInput();
$data = $input->getArray($_POST);
$data['jform']['post']=$input->get($_POST['jform']['post'], null, 'HTML');
这里的句子是“HTML - 返回一个完整的 HTML 实体和标签的字符串,受过滤器中的白名单或黑名单的约束。” 描述引用全局配置文本过滤器设置的 JInput HTML 过滤器?只是为了确认?