octobercms如何在我的Blog扩展插件上更改内容字段小部件类型

时间:2016-07-13 14:26:04

标签: plugins octobercms

我需要创建博客文章,不使用Markdown小部件进行内容输入。

我想使用RainLab博客插件,并了解我不应该更改RainLab \ Blog \ Post \ Models \ fields.yml,因为更新将覆盖我的更改。

所以我在https://vimeo.com/108040919的用户插件扩展教程之后创建了一个扩展程序,但当然我在我的案例中扩展了Blog插件。

在我的插件扩展中,我不需要你在教程中看到的新字段。我需要做的就是从'降价'更改内容小部件。到了#richeditor'。我查看了此页面http://octobercms.com/docs/backend/forms,并尝试在我的新模型中使用filterForms。但是,我不确定,如果那是我应该使用的。

任何人都有类似问题的解决方案吗?

2 个答案:

答案 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将为空,所以你必须在您的视图中打印内容列