Разоб'ем настройку TinyMCE на кілька кроків. Зазвичай потрібно зробити наступне:
Існує думка, що настройка форматування тексту, для самої популярної теми advanced, відбувається в файлі /themes/advanced/skins/default/content.css. Це не так. На ділі, звернення до цього файлу, без додаткової настройки, TinyMCE не робить.
Щоб налаштувати зовнішній вигляд тексту в області редагування TinyMCE, треба зробити наступне:
1. Скопіювати файл /themes/advanced/skins/default/content.css в каталог, де лежать css-файли сайту або CMS. Я зазвичай використовую каталог / css (щодо кореня сайту).
2. Перейменувати скопійований файл з /css/content.css на /css/tinymce.css, бо через деякий час можна забути, звідки з'явився і для чого потрібен файл з назвою "content.css".
3. У налаштуваннях TinyMCE (тобто в настроювальному масиві tinyMCE.init) треба додати опцію:
4. Треба переконатися, що даний файл впливає на TinyMCE. Для цього треба в першому рядку замінити розмір шрифту font-size з 10px на 12px. Ось так:
Цю установку має сенс так і залишити, бо розмір 10px всі вважають занадто дрібним.
5. Оновлюємо сторінку. Для того, щоб побачити зміни оформлення, в деяких браузерах, особливо це стосується Opera, треба обов'язково очистити кеш, щоб перевантажився css-файл.
Багато хто намагається вирішити цю проблему шляхом прописування в настроювальний масив tinyMCE.init наступної настройки:
Цього робити нетреба! По-перше, TinyMCE глючить при роботі з рядками, розділеними тегом
. Про це знають розробники TinyMCE, але безпосередньо не говорять, а настійно не рекомендують користуватися такою налаштуванням. А по-друге, наше завдання зовсім в іншому - треба зробити однаковим міжрядковий інтервал та інтервал між параграфами. Тоді користувачу буде зручно працювати.
Тому, в створений нами файл /css/tinymce.css потрібно додаємо рядок:
За допомогою цього рядка новий пункт не буде відділятися великим відступом, а буде зовні виглядати як новий рядок.
Тепер потрібно зробити так, щоб текст, створений в TinyMCE, відображався на сторінках сайту саме в тому вигляді, в якому він видно в області редагування TinyMCE.
Якщо ми просто підключимо файл /css/tinymce.css до коду сторінки сайту, то нічого доброго з цього не вийде. А чи не вийде тому, що правила, прописані в /css/tinymce.css, написані в "явному вигляді" для всіх основних тегів. Таким чином, просте підключення /css/tinymce.css до HTML-коду сторінки сайту, може порушити верстку сторінки.
Я довго розбирався, яким же чином можна підключити CSS-правила, які використовуються в TinyMCE так, щоб вони впливали тільки на певну область HTML-коду (тобто на ту облась, в якій знаходиться текст, створений за допомогою TinyMCE). В результаті підійшов тільки один метод. Трохи незручний, але зате працює залізобетонно.
Нам потрібно зробити наступне:
1. Скопіювати файл /css/tinymce.css, давши йому ім'я /css/site_tinymce.css. У цьому новому файлі треба перед кожним CSS-правилом прописати рядок ".tinymce". Наприклад, маємо файл /css/tinymce.css з вмістом:
mceItemTable. mceItemTable td. mceItemTable th. mceItemTable caption. mceItemVisualAid
2. Підключаємо файл /css/site_tinymce.css до HTML-коду сторінки сайту:
3. Ту область, де буде подаватись текст, створений в TinyMCE, укладаємо в тег div, із зазначенням класу tinymce:
Таким чином, ми створили CSS-файл правил, які застосовуються тільки до елементів, розташованим всередині тега з класом "tinymce". Тому, ці правила не будуть порушувати верстку сайту. А щоб ці правила використовуються в тексті, створеному в TinyMCE, ми робимо висновок цей текст в тег
Чому такий підхід незручний? Та тому, що тепер потрібно постійно пам'ятати, що якщо щось перенастроїли в файлі /css/tinymce.css, те ж саме потрібно зробити і в файлі /css/site_tinymce.css.
1. У файлі не можна використовувати складні селектори. Селектори повинні бути написані для тегів в явному вигляді, або простими правилами. Внаслідок цього, не працює ідея прописування рядки ".tinymce" перед кожним селектором, і обрамлення
2. У файлі не можна використовувати інклуд інших CSS-файлів. Рядки следущего виду:
порушують роботу css-парсера, вбудованого в TinyMCE, і текст починає відображатися абсолютно некоректно.
Внаслідок цих обмежень, я поки не бачу іншого рішення, відмінного від ідеї тримати два css-файлу: один для TinyMCE, другий для сторінок сайту.
Залишився останній пункт - розібратися, як використовувати в TinyMCE CSS-класи оформлення, використовувані на сайті. Тут довелося зіткнутися з тими ж проблемами, що і в попередній задачі, але до счатью, рішення виявилося досить простим.
Отже, у нас є CSS-файл, в якому прописані CSS-правила оформлення, використовувані на сторінках сайту. Нехай це буде файл /css/site.css. Нехай, наприклад в ньому є три ось таких правил:
font-family: Verdana, Arial, Helvetica, sans-serif;
Ми хочемо, щоб в TinyMCE була можливість форматування тексту саме цими правилами. Зовні це повинно виглядати так - в панелі TinyMCE повинен бути список, що випадає, в ктор буде три пункти:
При виборі відповідного пункту, текст повинен форматироваться правилом ".font_big_head", ".font_mini" або ".font_block_code".
Зробити таку функціональність неважко. Потрібно в настроювальному масиві tinyMCE.init додати елемент styleselect в якусь лінійку кнопок, наприклад в theme_advanced_buttons2. Ось так це може виглядати:
theme_advanced_buttons2. "Fontselect, fontsizeselect, styleselect",
Потім треба вказати, який випадає буде показувати елемент styleselect. Для цього в настроювальний масив tinyMCE.init потрібно додати наступну опцію:
Однак, незважаючи на правильно генерується HTML-код, в вікні редагування TinyMCE ми не побачимо застосування даного форматування. Чому? Та тому, що CSS-файл /css/site.css з нашими правилами невідомий TinyMCE.
Значить, нам треба підключити в TinyMCE два файли - /css/tinymce.css і /css/site.css. Однак, вивчаючи документацію, ми бачимо, що за допомогою опції content_css підключити щось можна тільки один CSS-файл. До того ж, як ми вже з'ясували, підключити один CSS-файл всередині іншого CSS-файлу так само не представляється можливим.
Я навіть спробував прописати в масив tinyMCE.init дві опції content_css:
але як і очікувалося, ні до чого хорошого це не призвело - зчитується тільки перший файл.
Знову довелося лізти в вихідні TinyMCE, і що ж я там побачив? Виявляється, можливість додати кілька css-файлів є, тільки про це в документації не написано. Потрібно просто перерахувати підключаються файли, розділяючи їх імена пропуском / комами. Ось так:
content_css: "/css/tinymce.css, /css/site.css",
Потрібно відразу обумовити один важливий момент.
Пам'ятайте, що ми додавали правило "p, span
font-family: Verdana, Arial, Helvetica, sans-serif;