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

Создаем вместе дополнение Транслита

Тема в разделе "Основные вопросы по XenForo", создана пользователем makdeniss, 08.11.2010.

Загрузка
  1. makdeniss

    makdeniss Местный

    Регистрация:
    06.10.10
    Сообщения:
    62
    Симпатии:
    20
    Я почти сделал. Транслит работает, единственная проблема:
    tinyMCE.activeEditor.getContent(); почему-то берёт мой текст из редактора, а также какой-то код типа <p>тут мой текст<br _mce_bogus="1"></p>
    Как мне написать так, чтобы он брал просто текст с редактора, без всяких <p>br_mce_bogus="1"</p>
    Если решу эту проблему - тогда транслит есть :)
     
  2. Pepelac

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

    Регистрация:
    28.09.10
    Сообщения:
    1 794
    Симпатии:
    1 361
    То есть вы хотите забить на форматирование, которое может применить пользователь к тексту и вернуть ему только транслитерованный текст? Это вы хорошо придумали.
     
  3. makdeniss

    makdeniss Местный

    Регистрация:
    06.10.10
    Сообщения:
    62
    Симпатии:
    20
    Ну вы уж извините, я программирую первые два часа и 10 минут в своей жизни. Скорее всего на данном этапе для меня это лучше, чем ничего ;) Потом дойду исправлюсь, но сейчас мне мешает конкретная строка ХТМЛ кода, который видимо и есть оформление. Как бы мне прочесть ЭДИТОР без форматирования или с учётом его, но не вывода в строку транслита?
    --- добавлено : 15 дек 2010 в 09:22 ---
    Нашёл немного другое решение, но менее удобное. При выделение текста внутри редактора и нажатии кнопки транслит - он транслитируется, но ессно без форматирования. Теперь есть задача сохранить форматирование.
    --- добавлено : 15 дек 2010 в 09:44 ---
    !!! Спасибо добрым людям с сайта xenforo, теперь нет необходимости выделать - берётся текст без форматирования и транслитизируется. Осталось решить задачу с форматированием!!!
    Код:
    var editor = tinyMCE.activeEditor;
    editor.selection.select(editor.dom.getRoot());
    var y = editor.selection.getContent({format : 'text'});
    editor.selection.collapse();
     
    Romchik® нравится это.
  4. makdeniss

    makdeniss Местный

    Регистрация:
    06.10.10
    Сообщения:
    62
    Симпатии:
    20
    Ещё бы присобачить это дело под Internet Explorer :D
     
  5. makdeniss

    makdeniss Местный

    Регистрация:
    06.10.10
    Сообщения:
    62
    Симпатии:
    20
    На данном этапе у меня получилось вот так.

    translit.js файл - автор скрипта Rassol @ vbsupport
    // Я лишь добавил связь с редактором tinyMCE

    Код/ссылку на данный файл надо поставить внутри шаблона PAGE_CONTAINER
    Код:
    <script type="text/javascript" language="javascript" src="http://www.путь_к_форуму_или_куда_вы_загрузите_этот_файл/translit.js"></script>
    Сам translit.js файл (необходимо скопировать код, создать пустой файл translit.js и вставить туда этот код)
    Код:
    function getText()
    {
    var editor = tinyMCE.activeEditor;
    editor.selection.select(editor.dom.getRoot());
    var y = editor.selection.getContent({format : 'text'});
    editor.selection.collapse();
    
        var instring = new String();
        instring = document.getElementById('alphabet').innerHTML;
        var temp,x,elem,elem2,temp2;
        var alphabet, alphabetUp;
        alphabet = alphabetUp = new Array();
        temp = instring.split(', ');
        for (x=temp.length-1;x>-1;x--){
            temp2 = temp[x].split('-');
            elem = temp2[1];
            elem2 = temp2[0];
            elem = elem.toLocaleUpperCase();
            elem2 = elem2.toLocaleUpperCase();
            alphabet[temp2[1]] = temp2[0];
            alphabetUp[elem] = elem2;
        }
    
        instring = y;
        var outer = '111';
        var expr = new RegExp();
        for (var i in alphabet){
            expr.compile(i,'g');
            instring = instring.replace(expr,alphabet[i]);
        }
        y = instring;
    
    tinyMCE.activeEditor.setContent(y);
    }
    Далее идёт вставка в две формы ответа - быстрого и расширенного
    (код - Rassol)

    1. Шаблон EDITOR_QUICK_REPLY сразу наверху после фразы <xen:if is="{$showWysiwyg}">

    Код:
    <a href="javascript:getText()">Транслит</a>
    Показать справку? <input type="checkbox" onclick="if (this.checked) document.getElementById('alphabet').style.display='block'; else document.getElementById('alphabet').style.display='none';">
    <div id="alphabet" style=" display:none; border:1px dotted #6591B1; width:100%;color:#6591B1;">а-a, б-b, в-v, г-g, д-d, е-e, ё-jo, ж-zh, з-z, и-i, й-j, к-k, л-l, м-m, н-n, о-o, п-p, р-r, с-s, т-t, у-u, ф-f, х-h, ц-c, ч-ch, ш-sh, щ-w, ъ-#, ы-y, ь-', э-je, ю-ju, я-ja</div>
    2. Шаблон EDITOR сразу наверху после фразы <xen:if is="{$showWysiwyg}">

    Код:
    <a href="javascript:getText()">Транслит</a>
    Показать справку? <input type="checkbox" onclick="if  (this.checked)  document.getElementById('alphabet').style.display='block'; else  document.getElementById('alphabet').style.display='none';">
    <div id="alphabet" style=" display:none; border:1px dotted  #6591B1; width:100%;color:#6591B1;">а-a, б-b, в-v, г-g, д-d, е-e,  ё-jo, ж-zh, з-z, и-i, й-j, к-k, л-l, м-m, н-n, о-o, п-p, р-r, с-s, т-t,  у-u, ф-f, х-h, ц-c, ч-ch, ш-sh, щ-w, ъ-#, ы-y, ь-', э-je, ю-ju,  я-ja</div>
    Данная функция работает только для расширенного редактора. Для простого редактора всё намного проще, поэтому я даже и не запаривался. Там достаточно взять функцию господина Rassol и поменять переменные.

    Проблемы/что нужно ещё сделать

    1. Транслит не сохраняет форматирование - необходимо научить функцию разделять текст и форматирование - у меня пока с этим тяжело. Помощь приветствуется.
    2. Есть косяки внутри функции самого транслита. Пример: ja будет я, а вот Ja - будет Йа. Но решение этому я уже нашёл, обновлю потом.
    3. Ошибка в IE 8 (у меня мак, поэтому я смог протестить только на работе именно на 8ой версии, на Лисе всё чётко). Пока никак не могу понять где я ошибся. Кто-то подскажет?

    Пока вроде всё... Если кто ещё что-то заметит или готов помочь/подсказать - я только рад. Надо, чтобы у пользователей была возможность транслита на данном движке форума :)

    translit_preview.jpg
     
    Alex777, DeagleOnly и CyberAP нравится это.

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