定制 stfalcon/tinymce-bundle 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

stfalcon/tinymce-bundle

Composer 安装命令:

composer require stfalcon/tinymce-bundle

包简介

This Bundle integrates TinyMCE WYSIWYG editor into a Symfony2 project.

README 文档

README

📦 This bundle makes it very easy to add the TinyMCE WYSIWYG editor to your Symfony2 project.

Installation

Choose the appropriate version

Bundle Version (X.Y) PHP Symfony Comment
3.0 >= 7.2 >= 5.0 Actual version
2.4 >= 7.1 >= 3.4 and 4.*
2.0 >= 5.4 >= 3.0
1.0 >= 5.4 >= 2.1 and <= 2.8

NOTE! To upgrade your configuration, please read UPGRADE.md

Add TinyMCE bundle as a dependency of your application via composer

$ php composer.phar require stfalcon/tinymce-bundle='X.Y'

Add StfalconTinymceBundle to your application kernel.

// app/AppKernel.php
<?php
    // ...
    public function registerBundles()
    {
        $bundles = array(
            // ...
            new Stfalcon\Bundle\TinymceBundle\StfalconTinymceBundle(),
        );
    }

The bundle needs to copy the resources necessary to the web folder. You can use the command below:

$ php app/console assets:install web/

Include in template

This bundle comes with an extension for Twig. This makes it very easy to include the TinyMCE Javascript into your pages. Add the tag below to the places where you want to use TinyMCE. It will output the complete Javascript, including <script> tags. Add it to the bottom of your page for optimized performance.

    {{ tinymce_init() }}

You can also override the default configuration by passing an option like this:

    {{ tinymce_init({'use_callback_tinymce_init': true, 'theme': {'simple': {'menubar': false}}}) }}

or

    {{ tinymce_init({
        theme: {'simple':{'language': app.request.locale, 'height': 500 }},
        toolbar: "insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image",
        autosave_ask_before_unload: false,
        asset_package_name: 'backend'})
    }}

NEW ! Added posibility to specify asset package doc to generate proper js links, see above, parameter: asset_package_name

Base configuration

By default, tinymce is enabled for all textareas on the page. If you want to customize it, do the following:

Add class "tinymce" to textarea field to initialize TinyMCE.

    <textarea class="tinymce"></textarea>

If you want to use jQuery version of the editor set the following parameters:

    stfalcon_tinymce:
        include_jquery: true
        tinymce_jquery: true
        ...

The option include_jquery allows you to load external jQuery library from the Google CDN. Set it to true if you haven't included jQuery on your page.

If you are using FormBuilder, use an array to add the class, you can also use the theme option to change the used theme to something other than 'simple' (i.e. on of the other defined themes in your config - the example above defined 'bbcode'). e.g.:

<?php
    $builder->add('introtext', 'textarea', array(
        'attr' => array(
            'class' => 'tinymce',
            'data-theme' => 'bbcode' // Skip it if you want to use default theme
        )
    ));

Localization

You can change the language of your TinyMCE editor by adding language selector into top level of configuration, something like:

    // app/config/config.yml
    stfalcon_tinymce:
        include_jquery: true
        tinymce_jquery: true
        selector: ".tinymce"
        language: %locale%
        theme:
            simple:
                theme: "modern"
        ...

NOTE! As there is no way to set custom language for each instance of editor, this option set on language for all instances.

In the example we set default language from the parameters.ini. Of course you can set your default language passing the language code (ru or ru_RU, en or en_US)

If language parameter isn't set, the default language will be get from the session.

Multiply selector

You can specify one or many selectors for editor placement.

    // app/config/config.yml
    stfalcon_tinymce:
        selector: ".tinymce"

or

    // app/config/config.yml
    stfalcon_tinymce:
        selector: 
            - ".tinymce"
            - "#tinymce"

or

    // app/config/config.yml
    stfalcon_tinymce:
        selector: [".tinymce", "#tinymce"]

Custom configurations

According to the TinyMCE documentation you can configure your editor as you wish. Below is an almost full list of available parameters that you can configure by yourself:

    // app/config/config.yml
    stfalcon_tinymce:
        include_jquery: true
        tinymce_jquery: true
        selector:
            - ".tinymce"
            - "#editor1"
            - "#editor2"
        base_url: "http://yourdomain.com/" # this parameter may be included if you need to override the assets_base_urls for your template engine (to override a CDN base url)
        # Get current language from the parameters.ini
        language: %locale%
        # Custom buttons
        tinymce_buttons:
            stfalcon: # Id of the first button
                title: "Stfalcon"
                image: "http://stfalcon.com/favicon.ico"
        theme:
            # Simple theme: same as default theme
            simple: ~
            # Advanced theme with almost all enabled plugins
            advanced:
                 plugins:
                     - "advlist autolink lists link image charmap print preview hr anchor pagebreak"
                     - "searchreplace wordcount visualblocks visualchars code fullscreen"
                     - "insertdatetime media nonbreaking save table contextmenu directionality"
                     - "emoticons template paste textcolor"
                 toolbar1: "insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image"
                 toolbar2: "print preview media | forecolor backcolor emoticons | stfalcon | example"
                 image_advtab: true
                 templates:
                     - {title: 'Test template 1', content: 'Test 1'}
                     - {title: 'Test template 2', content: 'Test 2'}
            # BBCode tag compatible theme (see http://www.bbcode.org/reference.php)
            bbcode:
                 plugins: ["bbcode, code, link, preview"]
                 menubar: false
                 toolbar1: "bold,italic,underline,undo,redo,link,unlink,removeformat,cleanup,code,preview"

External plugins support

If you want to load some external plugins which are situated in your bundle, you should configure it as in the example:

    stfalcon_tinymce:
        external_plugins:
            filemanager:
                url: "asset[bundles/acmedemo/js/tinymce-plugin/filemanager/editor_plugin.js]"
            imagemanager:
                url: "asset[bundles/acmedemo/js/tinymce-plugin/imagemanager/editor_plugin.js]"
        ...
        theme:
            simple:
                theme: "modern"
                ...

Custom buttons

You can add some custom buttons to editor's toolbar (See: http://www.tinymce.com/tryit/button.php, http://www.tinymce.com/wiki.php/api4:method.tinymce.Editor.addButton)

First of all you should describe it in your config:

    stfalcon_tinymce:
        tinymce_buttons:
            stfalcon: # Id of the first button
                title: "Stfalcon"
                image: "http://stfalcon.com/favicon.ico"
            hello_world: # Id of the second button
                title: "Google"
                image: "http://google.com/favicon.ico"
                ...
                or for the local images
                ...
                image: "asset[bundles/somebundle/images/icon.ico]"

        theme:
            simple:
                     ...
                 toolbar1: "insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image"
                 toolbar2: "print preview media | forecolor backcolor emoticons | stfalcon | hello_world"

And you should create a callback functions tinymce_button_ for your buttons, based on their button ID:

function tinymce_button_stfalcon(ed) {
    ed.focus();
    ed.selection.setContent("Hello from stfalcon.com :)");
}

function tinymce_button_hello_world(ed) {
    ed.focus();
    ed.selection.setContent("Hello world!");
}

Custom CSS

This option enables you to specify a custom CSS file that extends the theme content CSS. This CSS file is the one used within the editor (the editable area). This option can also be a comma separated list of URLs.

If you specify a relative path, it is resolved in relation to the URL of the (HTML) file that includes TinyMCE, NOT relative to TinyMCE itself.

    stfalcon_tinymce:
        ...
        theme:
            simple:
                content_css: "asset[bundles/mybundle/css/tinymce-content.css]"
                ...

NOTE! Read Official TinyMCE documentation for more details: http://www.tinymce.com/wiki.php/Configuration:content_css

Init Event

As $(document).ready() in jQuery you can listen to the init event as well in Tinymce.

To do so you must edit your config and set use_callback_tinymce_init to true.

app/config/config.yml:

    stfalcon_tinymce:
        ...
        use_callback_tinymce_init: true
        ...

And then create a javascript callback function named callback_tinymce_init as follow

function callback_tinymce_init(editor) {
    // execute your best script ever
}

How to init TinyMCE for dynamically loaded elements

To initialize TinyMCE for new loaded textareas you should just call initTinyMCE() function.

Example for Sonata Admin Bundle

    jQuery(document).ready(function() {
        $('form').on('sonata.add_element', function(){
            initTinyMCE();
        });
    });

stfalcon/tinymce-bundle 适用场景与选型建议

stfalcon/tinymce-bundle 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 2.95M 次下载、GitHub Stars 达 257, 最近一次更新时间为 2012 年 01 月 13 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「Symfony2」 「bundle」 「wysiwyg」 「tinymce」 「editor」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 stfalcon/tinymce-bundle 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 stfalcon/tinymce-bundle 我们能提供哪些服务?
定制开发 / 二次开发

基于 stfalcon/tinymce-bundle 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 2.95M
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 269
  • 点击次数: 31
  • 依赖项目数: 34
  • 推荐数: 2

GitHub 信息

  • Stars: 257
  • Watchers: 17
  • Forks: 149
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2012-01-13