【问题标题】:How to add CKEditor to Sonata Admin backend's textareas如何将 CKEditor 添加到 Sonata Admin 后端的文本区域
【发布时间】:2013-12-14 16:44:15
【问题描述】:

我想将 CKEditor 添加到 Sonata Admin 后端。现在我只运行 Create Bundle,它允许我内联编辑内容,但我也想在后端使用编辑器。我尝试了 Formatter Widget,但它有点过大,因为我不想在我的实体中创建新字段。

有人已经这样做了吗?

【问题讨论】:

    标签: symfony textarea ckeditor sonata-admin


    【解决方案1】:

    在您的页面中包含 ckeditor 脚本并将ckeditor 类添加到您的文本区域,仅此而已。

    示例:在您的表单类型中:

    $builder->add('description', 'textarea', array('attr' => array('class' => 'ckeditor')))
    

    在你的树枝上:

       <script src="{{ asset('js/ckeditor.js') }}"></script>
         .
         .
         .
        {{form(form)}}
    

    【讨论】:

    • 我尝试通过扩展 SonataAdminBundle 并使用以下行创建 CRUD/edit.html.twig:{% extends 'SonataAdminBundle:CRUD:base_edit.html.twig' %} {% block javascripts %} {{ parent() }} &lt;script src="{{ asset('js/ckeditor_ckeditor_1.js') }}"&gt;&lt;/script&gt; {% endblock %} 现在 ckeditor.js 已正确包含在 web/js 和 textarea 标签中类'ckeditor'。但是 textarea 字段根本没有被渲染。是否有任何 SonataAdminBundle 配置可以防止这种情况发生?
    • 这是为我的 textarea 字段生成的代码:&lt;div class="controls sonata-ba-field sonata-ba-field-standard-natural "&gt; &lt;textarea id="s52c4390577ec2_text1" name="s52c4390577ec2[text1]" class="ckeditor"&gt;&lt;/textarea&gt; &lt;/div&gt;
    • 顺便说一句,我使用 IvoryCKEditorBundle 得到了相同的结果
    • 当您在 javascript 控制台中执行此脚本时会发生什么? CKEDITOR.replaceAll()
    • 你写的是正确的,问题主要是我的ckeditor的版本和SonataAdminBundle:CRUD模板的覆盖。不过你的回答很有帮助,谢谢。
    【解决方案2】:

    zizoujab 的解决方案是完全正确的,所以我赞成它。但是,正如我提到的 SonataAdminBundle 的问题,还需要做更多的工作。这就是我给出这个额外答案的原因。

    我通过覆盖自定义包中的SonataAdminBundle:CRUD:edit.html.twig 解决了这个问题:

    {% extends 'SonataAdminBundle:CRUD:base_edit.html.twig' %}
    
    {% block javascripts %}
    {{ parent() }}
    <script src="{{ asset('js/ckeditor/adapter/jquery.js') }}" type="text/javascript"></script>
        <script src="{{ asset('js/ckeditor/ckeditor.js') }}" type="text/javascript"></script>
        <script type="text/javascript">
            $(function() {
                $('textarea.ckeditor').ckeditor();
            });
        </script>
    {% endblock %}
    

    我也遇到了问题,由于我使用的 ckeditor 版本,这不起作用。我无法使用 CmfCreateBundle 安装。这产生了一些 js 错误并且 &lt;textarea&gt; 标签消失了。 所以我不得不从 ckeditor.com 下载“标准”版本,这很有效。

    【讨论】:

    • 要使用 CmfCreate 附带的 ckeditor.js,您只需在包含它之前设置 CKEDITOR_BASEPATH 变量,例如:&lt;script&gt;window.CKEDITOR_BASEPATH = '{{ app.request.basePath }}/bundles/cmfcreate/vendor/ckeditor/';&lt;/script&gt;&lt;script src="{{ asset('js/ckeditor.js') }}"&gt;&lt;/script&gt;
    【解决方案3】:

    如果您想要一些所见即所得的编辑器,并且可以使用 NOT CKEditor,那么我建议您查看sonata-formatter-bundle

    【讨论】:

    • 我在我的问题中写道,我不想使用格式化程序小部件。如果没有该小部件,您的建议是否可行?你的建议让我很困惑。
    • 对不起,我错过了这个问题。如果您不创建其他字段,甚至是虚拟字段,我建议您使用下面的谜题提供的解决方案。
    【解决方案4】:

    按照updated docSonata Formatter

    config.yml:

    twig:
        debug:            "%kernel.debug%"
        strict_variables: "%kernel.debug%"
    
        # These 3 lines below were missing in my own conf
        # Adding them made formatter richtext editor alternatives
        # finally available in my project:
    
        form:
            resources:
                - 'SonataFormatterBundle:Form:formatter.html.twig'
    

    奏鸣曲.yml

    sonata_block:
        (...)
        blocks:
            (...)
            sonata.block.service.text:
            sonata.page.block.children_pages:
            sonata.formatter.block.formatter:
    (...)
    sonata_formatter:
        formatters:
            markdown:
                service: sonata.formatter.text.markdown
                extensions:
                    - sonata.formatter.twig.control_flow
                    - sonata.formatter.twig.gist
                    - sonata.media.formatter.twig
    
            text:
                service: sonata.formatter.text.text
                extensions:
                    - sonata.formatter.twig.control_flow
                    - sonata.formatter.twig.gist
                    - sonata.media.formatter.twig
    
            rawhtml:
                service: sonata.formatter.text.raw
                extensions:
                    - sonata.formatter.twig.control_flow
                    - sonata.formatter.twig.gist
                    - sonata.media.formatter.twig
    
            richhtml:
                service: sonata.formatter.text.raw
                extensions:
                    - sonata.formatter.twig.control_flow
                    - sonata.formatter.twig.gist
                    - sonata.media.formatter.twig
    
            twig:
                service: sonata.formatter.text.twigengine
                extensions: [] # Twig formatter cannot have extensions
    
        ckeditor:
            templates:
                browser: 'SonataFormatterBundle:Ckeditor:browser.html.twig'
                upload: 'SonataFormatterBundle:Ckeditor:upload.html.twig'
    

    【讨论】:

    • 谢谢!由于某种原因,ckeditor 块与其他格式化程序不在同一个选项卡上,并且它给了我一个错误,即“模板”属性是未知的。将 ckeditor 置于与格式化程序相同的级别解决了这个问题! :)
    猜你喜欢
    • 1970-01-01
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-12
    • 1970-01-01
    • 1970-01-01
    • 2021-07-25
    相关资源
    最近更新 更多