我需要创建博客文章,不使用Markdown小部件进行内容输入。
我想使用RainLab博客插件,并了解我不应该更改RainLab \ Blog \ Post \ Models \ fields.yml,因为更新将覆盖我的更改。
所以我在https://vimeo.com/108040919的用户插件扩展教程之后创建了一个扩展程序,但当然我在我的案例中扩展了Blog插件。
在我的插件扩展中,我不需要你在教程中看到的新字段。我需要做的就是从'降价'更改内容小部件。到了#richeditor'。我查看了此页面http://octobercms.com/docs/backend/forms,并尝试在我的新模型中使用filterForms。但是,我不确定,如果那是我应该使用的。
任何人都有类似问题的解决方案吗?
答案 0 :(得分:0)
你可以像在下面的代码中那样破解它。只要变量不是protected
,这就可以工作。
您需要将type
更新为您想要的任何内容(在这种情况下为richeditor
)。您还可以添加/编辑其他属性(例如css
)。
在事件之前挂钩非常重要,以便在表单窗口小部件使用它们之前准备值。记录的extend方法挂钩 after 事件后,因此更改字段属性为时已晚。
class Plugin extends PluginBase
{
public function register()
{
\Event::listen('backend.form.extendFieldsBefore', function ($widget) {
if ( ! $widget->model instanceof \RainLab\Blog\Models\Post) {
return;
}
array_set($widget->secondaryTabs, 'fields.content.type', 'richeditor');
});
}
}
答案 1 :(得分:0)
如果您有Rainlab Translate插件,则必须更改一行php代码,因为此行会覆盖yaml配置。
转到controllers / Posts.php并更改功能:
public function formExtendFieldsBefore($widget)
{
if (!$model = $widget->model) {
return;
}
if ($model instanceof Post && $model->isClassExtendedWith('RainLab.Translate.Behaviors.TranslatableModel')) {
$widget->secondaryTabs['fields']['content']['type'] = 'RainLab\Blog\FormWidgets\MLBlogMarkdown';
}
}
if ($model instanceof Post && $model->isClassExtendedWith('RainLab.Translate.Behaviors.TranslatableModel')) {
$widget->secondaryTabs['fields']['content']['type'] = 'RainLab\Blog\FormWidgets\MLBlogMarkdown';
}
}
这个
public function formExtendFieldsBefore($widget)
{
if (!$model = $widget->model) {
return;
}
if ($model instanceof Post && $model->isClassExtendedWith('RainLab.Translate.Behaviors.TranslatableModel')) {
// $widget->secondaryTabs['fields']['content']['type'] = 'RainLab\Blog\FormWidgets\MLBlogMarkdown';
$widget->secondaryTabs['fields']['content']['type'] = 'richeditor';
}
}
这有一个问题,因为这个插件在内部使用markdown格式,它被解析为html格式并存储在content_html列中,但是对于richeditor你已经用html格式,解析将失败并且content_html将为空,所以你必须在您的视图中打印内容列