WYMeditor Django-cms попробуй забори

В общем сабж

В интернете нашёл только краткий пост Ивана Маркеева

Я не прочитал внимательно строчку:
Приведенные WYM_STYLES определяют то, как контент будет выглядеть в редакторе. То есть просто как он будет выглядеть в редакторе :) В окошке редактирования 1. Для кастомизации WYMeditora в рамках Django-cms следует изменить свой файл настроек django проекта settings.py дописав в него примерно следующее:

``` python Это нужно добавить в settings.py

WYMEditor

WYM_TOOLS = ",\n".join([ "{'name': 'Bold', 'title': 'Strong', 'css': 'wym_tools_strong'}", "{'name': 'Italic', 'title': 'Emphasis', 'css': 'wym_tools_emphasis'}", "{'name': 'Superscript', 'title': 'Superscript', 'css': 'wym_tools_superscript'}", "{'name': 'Subscript', 'title': 'Subscript', 'css': 'wym_tools_subscript'}", "{'name': 'InsertOrderedList', 'title': 'Ordered_List', 'css': 'wym_tools_ordered_list'}", "{'name': 'InsertUnorderedList', 'title': 'Unordered_List', 'css': 'wym_tools_unordered_list'}", "{'name': 'Indent', 'title': 'Indent', 'css': 'wym_tools_indent'}", "{'name': 'Outdent', 'title': 'Outdent', 'css': 'wym_tools_outdent'}", "{'name': 'Undo', 'title': 'Undo', 'css': 'wym_tools_undo'}", "{'name': 'Redo', 'title': 'Redo', 'css': 'wym_tools_redo'}", "{'name': 'Paste', 'title': 'Paste_From_Word', 'css': 'wym_tools_paste'}", "{'name': 'ToggleHtml', 'title': 'HTML', 'css': 'wym_tools_html'}", #"{'name': 'CreateLink', 'title': 'Link', 'css': 'wym_tools_link'}", #"{'name': 'Unlink', 'title': 'Unlink', 'css': 'wym_tools_unlink'}", #"{'name': 'InsertImage', 'title': 'Image', 'css': 'wym_tools_image'}", "{'name': 'InsertTable', 'title': 'Table', 'css': 'wym_tools_table'}", #"{'name': 'Preview', 'title': 'Preview', 'css': 'wym_tools_preview'}", ])

WYM_CONTAINERS = ",\n".join([ "{'name': 'P', 'title': 'Paragraph', 'css': 'wym_containers_p'}", "{'name': 'H1', 'title': 'Heading_1', 'css': 'wym_containers_h1'}", "{'name': 'H2', 'title': 'Heading_2', 'css': 'wym_containers_h2'}", "{'name': 'H3', 'title': 'Heading_3', 'css': 'wym_containers_h3'}", "{'name': 'H4', 'title': 'Heading_4', 'css': 'wym_containers_h4'}", "{'name': 'H5', 'title': 'Heading_5', 'css': 'wym_containers_h5'}", "{'name': 'H6', 'title': 'Heading_6', 'css': 'wym_containers_h6'}", "{'name': 'PRE', 'title': 'Preformatted', 'css': 'wym_containers_pre'}", "{'name': 'BLOCKQUOTE', 'title': 'Blockquote', 'css': 'wym_containers_blockquote'}", "{'name': 'TH', 'title': 'Table_Header', 'css': 'wym_containers_th'}", ])

WYM_CLASSES = ",\n".join([ "{'name': 'date', 'title': 'PARA: Date', 'expr': 'p'}", "{'name': 'hidden-note', 'title': 'PARA: Hidden note', 'expr': 'p[@class!=\"important\"]'}",

"{'name': 'center', 'title': 'PARA: Center', 'expr': 'p'}", "{'name': 'contentheading', 'title': 'PARA: Center', 'expr': 'p, h1'}",

])

WYM_STYLES = ",\n".join([ "{'name': '.hidden-note', 'css': 'color: #999; border: 2px solid #ccc;'}", "{'name': '.date', 'css': 'background-color: #ff9; border: 2px solid #ee9;'}",

"{'name': '.center', 'css': 'border: 20px solid #9acd32; text-align:center;'}", "{'name': '.contentheading', 'css': 'border: 5px solid #9acd32;'}",

]) ```

Многие спросят чего так много?!

Это скопированно из стандартных настроек редактора /usr/local/lib/python2.6/dist-packages/django_cms-2.2-py2.6.egg/cms/plugins/text/settings.py Там читаем в начале коммент, для тех кто хочет подключить другой редактор, я не стал и дальше из того что скопировал в свой файл настроек django, поудалял строки такого вида:
WYM_TOOLS = getattr(settings, "WYM_TOOLS", WYM_TOOLS)
этой строкой он лезет в наш settings.py проекта и достаёт то что мы кастомизируем. Можно кастомизировать не всё, а только то, что нужно.

Теперь по делу

  1. WYM_TOOLS - это то что мы хотим видеть из кнопок настройки, или утилит, к примеру я для себя раскоментировал "{'name': 'InsertTable', 'title': 'Table', 'css': 'wym_tools_table'}", Чтобы появилась возможность добавлять таблицы

  2. WYM_CONTAINERS это, как следует из названия контейнеры. :) Как получилось у меня: для того чтобы применить свойство контейнера для этого нужно было изначально заключить кусок текста в контейнер. Не понятно?

При добавлении контента может случиться так, что вы добавите контент без тега, в смысле, что он не будет заключён в тег параграфа. Тогда вы не сможете применить свойство контейнера. Так что перед добавлением сначала нажмите пару раз Enter для появления в визуальном просмотре пары контейнеров

2.1 Для того чтобы применить контейнер, к примеру {Heading_1} Следует текст, который будет выделен этим тегом заключить в отдельный <p> И тогда уже выделять этот отдельный <p> и выбирать контейнер, они могут переключаться. Т.е, {Heading_1} можно поменять на {Heading_2} не переключаясь сначала в параграф.

Итог: текст для применения свойства контейнер должен находиться в теге <p>

WYM_CLASSES

WYM_CLASSES пример: "{'name': 'contentheading', 'title': 'PARA: Center', 'expr': 'p, h1'}",
Тут мы приступаем к самому вкусному и непонятному. Данная строчка позволяет добавлять класс (contentheading) из нашей таблицы стилей сайта к заданным тегам: 'expr': 'p, h1', и отображаться это будет под названием 'title': 'PARA: Center'. Что такое пара, не интересовался. Center можно заменить на своё. Но вообще и работает просто любой title, например Таблица, такой который будет вам понятен.

Другими словами: Добавили эту строчку, и к тегам <p>, <h1> можем нажатием на PARA: Center задавать класс contentheading заданному тегу.

WYM_STYLES

Вот эта строчка показывает нам что, если у нас в html коде встречается тег с классом .contentheading, то мы его обводим каёмочкой в 5 пикселей, и красим в цвет. "{'name': '.contentheading', 'css': 'border: 5px solid #9acd32;'}",

Вроде всё понятно.

Особенность

Заметил такую штуку, что когда мы применили {Classes} к параграфу, а потом решили сделать его всё-таки{Heading_1}, то нужно будет повторно применить класс, иначе он сбросится.


Anshik в разное Вт. 29 Май 2012. Tags: Django, django-cms,


© Anshik 2012-2015