1. Приветствуем Вас на неофициальном форуме технической поддержки XenForo на русском языке. XenForo - коммерческий форумный движок от бывших создателей vBulletin, написанный на PHP.

Транслит

Тема в разделе "Made in XF-Russia.ru", создана пользователем Alexey, 11.04.2011.

Загрузка
  1. Alexey

    Alexey Местный

    Регистрация:
    23.03.11
    Сообщения:
    4
    Симпатии:
    12
    Это решение добавляет кнопку «Транслитерация» в редактор TinyMCE при нажатии на которую выделенный в редакторе текст (или весть текст) переводится из латиницы в кириллицу.

    Основная функция транслитерации заимствована без изменений из FractalizeR: TransliterizeR addon for VB.
    Надеюсь, этим я не нарушил чьи-нибудь авторские права.

    Установка.
    1. Залить «translit.js» в js/tinymce/themes/xenforo/js/
    2. Залить новую иконку «translit.png» в styles/default/xenforo/editor/
    3. В файле "js/tinymce/themes/xenforo/editor_template.js" найти строку (одна из самых длинных строк примерно в середине файла)
    Код:
    theme_xenforo_buttons2 : 'bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,|,bullist,numlist,outdent,indent,|,link,unlink,image,xenforo_media,|,xenforo_code,xenforo_custom_bbcode',
    и добавить в список кнопку (куда пожелаете)
    Код:
    xenforo_translit
    4. Произвести в шаблоне «editor_js_setup» следующие изменения:
    в самом начале после строки
    Код:
    <xen:require js="js/tinymce/tiny_mce.js" />
    вставить строку
    Код:
    <xen:require js="js/tinymce/themes/xenforo/js/translit.js" />
    после
    Код:
    code: "{xen:jsescape {xen:phrase code}}"
    поставить запятую (,) и вставить строку
    Код:
    translit: "{xen:jsescape {xen:phrase translit}}"
    в строку
    Код:
    var plugins = 'tabfocus,-xenforo_inline_popups,-xenforo_custom_bbcode,-xenforo_smilies,-xenforo_media,-xenforo_code,-xenforo_bbcode_switch,-xenforo_translit';
    добавить
    Код:
    -xenforo_translit
    5. в шаблоне «editor_ui.css» добавить
    Код:
    .xenForoSkin span.mce_xenforo_translit { background:url(@imagePath/xenforo/editor/translit.png) no-repeat; }
    6. Добавить новую фразу «translit»: «Транслитерация»

    Протестировано в Firefox 3.5/4, Chrome, Opera 10/11, IE 7/8/9.
     

    Вложения:

    • translit.js.txt
      Размер файла:
      3,6 КБ
      Просмотров:
      46
    • translit.png
      translit.png
      Размер файла:
      352 байт
      Просмотров:
      348
    Sadorimatsu, Romchik®, Ice и 3 другим нравится это.
  2. Romchik®

    Romchik® The Power of Dreams Команда форума

    Регистрация:
    26.09.10
    Сообщения:
    5 746
    Симпатии:
    5 311
    Версия XF:
    1.5.18
    Ну если работает, то неплохо. Давно вроде искали пользователи. Только вот файлы править - плохо. Но раз другого варианта нет, пока наверно и так сгодится. Лучше чем ничего :)

    Только теме не тут место. Перенес.
     
  3. Alexey

    Alexey Местный

    Регистрация:
    23.03.11
    Сообщения:
    4
    Симпатии:
    12
    Честно должен признатся, что я не разбирался с написанием дополнений. И если кто-то возьмётся сделать из этого плагин, я буду только рад.
    Но насколько я понял, на данный момент XenForo не позволят создавать дополнения для TinyMCE. Все кто интересовались как создать в нём новые кнопки, получали ответ, что необходимо править «editor_template.js». :(
     
    makdeniss и Romchik® нравится это.
  4. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Ковырялся тут намедни с bb-кодами. В скрипте редактора есть функция вставки кнопок с пользовательскими bb-кодами. Вот интересно, кто-нибудь использовал данную функцию? Как я понял, необходимо создать скрипт в js/tinymce/themes/xenforo/js с названием custom-bbcode.js, где описать требуемые кнопки, а редактор их подхватит вот в этом куске кода:
    Код:
                    addButtons : function (theme, tb)
                    {
                            var tags = theme.settings.xenforo_custom_bbcode_tags,
                                    controlManager = theme.editor.controlManager;
    
                            //tb.add(controlManager.createControl('|'));
    
                            tb.add(controlManager.createButton('xenforo_quote',
                                    { title: 'xenforo.quote', cmd: 'xenForoWrapBbCode', ui: false, value: 'QUOTE' }
                            ));
    
                            if (typeof tags === 'undefined' || tags.length === 0 || tags === {})
                            {
                                    return;
                            }
    
                            tinymce.each(tags, function(tag, tagName) {
                                    tb.add(controlManager.createButton('xenforo_custom_bbcode_' + tag,
                                            {title : tag[0], image : tag[1], cmd : 'xenForoWrapBbCode', ui : false, value : tagName}
                                    ));
                            });
                    },
    
    
    То есть для вставки своих кнопок в редакторе уже вроде как все имеется, нужно лишь их описать. Нигде не нашел решения :(
     
  5. Yoskaldyr

    Yoskaldyr Пользователь

    Регистрация:
    27.09.10
    Сообщения:
    1 921
    Симпатии:
    1 163
    Версия XF:
    1.0.4
    тоже интересовался этой проблемой и тоже нашел этот кусок кода если что-то получится то отпишусь здесь.
    насчет того, что надо использовать custom-bbcode.js я ничего не видел, но видел то что можно заполнить объект theme.settings.xenforo_custom_bbcode_tags данными пользовательских ббкодов по типу
    {
    bbcodename1: ['title1', 'imagepath1'],
    bbcodename2: ['title2', 'imagepath2']
    }
     
  6. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Да, я не прав. На самом деле та папка не причем и создавать файл не нужно.
    По идее нужно использовать хук:
    Код:
                <xen:hook name="editor_tinymce_init" params="{xen:array 'editorId={$editorId}'}">
                    mode: 'exact',
                    elements: $editor.attr('id'),
                    plugins: plugins,
                    cleanup: false,
                    theme: 'xenforo',
                    theme_xenforo_dialog_url: "{xen:jsescape 'index.php?editor/dialog'}", // TODO: can't use xen:link until editor_dialog* template respect base
                    theme_xenforo_contents_css_url: "css.php?style={xen:urlencode $visitorStyle.style_id}&css=editor_contents&d={xen:urlencode $visitorStyle.last_modified_date}",
                    language: '',
                    document_base_url: "{xen:jsescape $requestPaths.fullBasePath}",    
                
                    xenforo_smilies_menu_image: '@imagePath/xenforo/editor/smilie.png',
                    xenforo_smilies: {xen:helper json, $smilies},
                
                    xenforo_bbcode_switch_text: ["{xen:jsescape {xen:phrase use_bb_code_editor}}", "{xen:jsescape {xen:phrase use_rich_text_editor}}"]
                </xen:hook>
    
    Как видно, помимо использования хука, потребуется еще и свой хелпер написать по аналогии с xenforo_smilies. Я не совсем понял, как это работает, поэтому задал вопрос тут. Вот только плохо, что в хуке что-то свое добавится после переключателя режима редактора. Но можно и поправить шаблон, вставив вообще свой хук, например. Кстати, а где сам хелпер смайлов находится?
     
  7. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Я решил спросить об этом на оффоруме. Посмотри, пожалуйста, я верно поставил вопрос?
     
  8. Yoskaldyr

    Yoskaldyr Пользователь

    Регистрация:
    27.09.10
    Сообщения:
    1 921
    Симпатии:
    1 163
    Версия XF:
    1.0.4
    похоже на то, что правильно :)
     
  9. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    В общем, проверил я корректность обработки параметров инициализации для вставки своих кнопок в редактор. Достаточно повесить свой обработчик на хук editor_tinymce_init, в котором можно написать что-то в духе:
    Код:
    $bbcode_tags['BB-код'] = array('Название кнопки', 'styles/default/xenforo/smilies/smile.png');
    $contents .= ', xenforo_custom_bbcode_tags: ' . json_encode($bbcode_tags);
    
    Появится кнопка со смайлом (картинку, естественно, можно любую ставить) со всплывающей подсказкой "Название кнопки" и с bb-кодом [BB-код][/BB-код]
    Добавлять можно сразу несколько кнопок, так как используется стандартный JSON-овский массив. Кстати, как из кода без лишних накладных расходов конвертировать PHP массив в JSON (по подсказке Pepelac используем json_encode)?
    Вот думаю, что не хватает в BB Code Manager поля с указанием пути к картинке. Тогда можно было бы автоматом запихать в редактор все нужные кнопки. Но все равно, разработчики могли бы и довести до ума систему добавления кнопок. А то, получается, бросили на пол-пути - функционал практически весь готов, но в шаблоне нет прямой обработки по аналогии со смайлами.

    P.S. Поправил пример кода.
     
    TAIFUN, resonansER и Yoskaldyr нравится это.
  10. Pepelac

    Pepelac Продам луц в бутылках

    Регистрация:
    28.09.10
    Сообщения:
    1 794
    Симпатии:
    1 361
    Эм... json_encode? Или, поскольку нужный зендовский класс тоже присутствует в библиотеке, Zend_Json::encode()
     
  11. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Thanks :)
     
  12. Yoskaldyr

    Yoskaldyr Пользователь

    Регистрация:
    27.09.10
    Сообщения:
    1 921
    Симпатии:
    1 163
    Версия XF:
    1.0.4
    только одна проблема, в данном методе пролетают все ббкоды с опциями :(
    Хоть бери и правь оригинальный код editor_template.js...
     
  13. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Ну не только в этом проблема. Еще и нельзя хук более одного раза использовать, либо придется в $output искать уже сформированную строку и добавлять к ней нужные описания кнопок.
    Хотя для bb-кодов с опциями можно делать несколько кнопок. В любом случае - это костыль на костыле, а не нормальное решение.
     
  14. Yoskaldyr

    Yoskaldyr Пользователь

    Регистрация:
    27.09.10
    Сообщения:
    1 921
    Симпатии:
    1 163
    Версия XF:
    1.0.4
    Именно костыль на костыле :(
     
  15. resonansER

    resonansER Местный

    Регистрация:
    19.08.11
    Сообщения:
    461
    Симпатии:
    290
    Версия XF:
    1.5.6
    А могли бы вы все, кому это интересно, "додавить" этот вопрос у Kier?
    Это ж важно, я думаю.
     
  16. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    По редактору разработчики наотрез отказываются хоть что-то делать. Или готовят что-то свое или готовят полную обвязку того, что есть. Не исключено, что они и тупо игнорируют любые проблемы с ним, так как есть более насущные по их мнению проблемы. На сегодняшний день нет нормальных средств добавлять что-то к редактору из плагинов, за исключением прямой правки шаблонов. Проблема там достаточно серьезная. И в основном эта проблема из-за архитектуры TinyMCE, которая является сложной и запутанной. В него добавлять свои фишки достаточно сложно в принципе.
    Если в двух словах, то все забили на помощь от разработчиков ксена и, кому нужно, делают свои хардхаки. Естественно, при появлении большого разнообразия дополнений, использующих напрямую редактор, появится шквал проблем с конфликтами между такими хаками.
    Для себя я решил, что проще постоять в сторонке, чем пытаться с разработчиками на этом поприще кашу сварить. Для примера можете посмотреть, как решается достаточно сложная проблема с часовыми поясами - гениальное решение Майка. Я после его ответа сначала хотел привести кучу аргументов и даже начал писать ответ. Но после некоторого размышления просто написал "Ок". Не хочу тратить свое время на постоянные переводы в английский и обратно, а английский не является моим родным, да и я с ним, можно сказать, лишь знаком. Англичане, как и американцы, да и большинство европейцев обычно с большой колокольни смотрят на многие вещи, которые именно им не интересны, а нужны другим нациям и народам. Ожидать от них чего-то большего не приходиться. Так что нужно делать на это поправку и более рационально решать вопросы на оффоруме :)
     
    resonansER нравится это.
  17. resonansER

    resonansER Местный

    Регистрация:
    19.08.11
    Сообщения:
    461
    Симпатии:
    290
    Версия XF:
    1.5.6
    infis, ага... Вона оно как. В этом случае я полностью с вами согласен с той позицией, какую вы избрали в общении с Kier...
    В конце концов форум только-только начинает "на четвереньках ползать", у него даже "зубки не прорезались". Не говоря о том, что "ходить" он будет через 1-1,5 годика ;) Так что подождём. Главное, чтобы его "родители" привили ему сильную "имунную систему"...
     
  18. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Да. Расчет на это. Пока архитектура движка и реализация ядра и обвязки почти хорошая. С хуками траблы. Но тут вообще решения единственно правильного нет и врядли в ближайшем будущем появится.
     
    resonansER нравится это.
  19. Sisi

    Sisi Местный

    Регистрация:
    21.04.12
    Сообщения:
    20
    Симпатии:
    0
    Версия XF:
    1.1.2
    Есть небольшой трабл с отображением кнопки.
    IE - всё ок.
    Мазила/Opera - только в личных сообщениях.
     
  20. Telia

    Telia Read only

    Регистрация:
    22.11.12
    Сообщения:
    136
    Симпатии:
    21
    Версия XF:
    1.0.1
    не отображается кнопка.
     

Поделиться этой страницей