Возник вопрос, как не особо заморачиваясь, добавить редактор tinymce в symfony2 проект. Нужно это нам преемущественно для админки.
Немного погуглив, наткнулся на бандл https://github.com/stfalcon/TinymceBundle, разрабатывал бандл украинский разработчик. Но в бандле была не последняя версия tinymce, поэтому было принято решение, написать это самому через расширение формы.
Итак, что я сделал:
1. Создал новый тип поля для формы, по сути расширил "textarea":
2. Далее нужно создать виджет для обработки нашего поля формы.
Важно: первая часть названия виджета должна совпадать с тем что возвращает метод (tinymce_widget) TinymceType::getName()
Немного погуглив, наткнулся на бандл https://github.com/stfalcon/TinymceBundle, разрабатывал бандл украинский разработчик. Но в бандле была не последняя версия tinymce, поэтому было принято решение, написать это самому через расширение формы.
Итак, что я сделал:
1. Создал новый тип поля для формы, по сути расширил "textarea":
// \Namespace\BaseBundle\Form\TinymceType.php use Symfony\Component\Form\AbstractType; /** * @author Igor Onachenko <> */ class TinymceType extends AbstractType { public function getParent() { return 'textarea'; } public function getName() { return 'tinymce'; } }
2. Далее нужно создать виджет для обработки нашего поля формы.
Важно: первая часть названия виджета должна совпадать с тем что возвращает метод (tinymce_widget) TinymceType::getName()
// \Namespace\BaseBundle\Resources\views\Form\tinymce.html.twig {% block tinymce_widget %} {% spaceless %} <script src="http://tinymce.cachefly.net/4.0/tinymce.min.js" type="text/javascript"></script> <script type="text/javascript"> tinymce.init({ selector:'textarea#{{ form.vars.id }}', width: 700, height: 250, language_url : '/bundles/BUNDLENAME/tinymce/langs/ru.js', plugins: [ "advlist autolink link image lists charmap print preview hr anchor pagebreak spellchecker", "searchreplace wordcount visualblocks visualchars code fullscreen insertdatetime media nonbreaking", "save table contextmenu directionality emoticons template paste textcolor" ] }); </script> {{ form_widget(form) }} {% endspaceless %} {% endblock %}3. Также для удобства можно объявить этот тип поля в качестве сервиса
// BaseBundle\Resources\config\services.yml services: base.form.type.tinymce: class: Namespace\BaseBundle\Form\TinymceType tags: - { name: form.type, alias: tinymce }Так как мы используем SonataAdminBundle, то использовать новый тип формы можно так:
class PageAdmin extends Admin { //... public function configureFormFields(FormMapper $formMapper) { $formMapper ->add('title', null, array('label' => 'page.title')) ->add('slug', null, array('label' => 'page.slug')) ->add('text', 'tinymce', array('label' => 'page.text')); } }
Да, чуть не забыл: чтобы редактор был на русском языке нужно, чтобы в папке
/bundles/BUNDLENAME/tinymce/langs/', лежал файл ru.js его можно скачать с сайта tinymce.com
Вот так просто. Маленький ньанс в том, что здесь js файл для редактора загружается с CDN сервера. Это надо учитывать и возможно, на всякий случай, скопировать этот js файл на сервер
Вот что получилось )
Комментариев нет:
Отправить комментарий