1

Тема: всплывающая подсказка тэгов

В MT есть замечатльная фича, когда вы в строке тегов при создании поста набираете тэг, то если уже такой есть всплывает подсказака с правильным написание тэга, НО всё это работает для английских тэгов, а как сделать чтобы работало для русских?
Причём если например есть тег CANON то при наборе в русской раскладке СФТЩТ он тоже всплывёт, а вот русские тэги никак не всплывают.
вся sql база в UTF8 и все сравнения тоже. Что можно сделать?

2

Re: всплывающая подсказка тэгов

Про русскую раскладку не знал, это что-то из области удивительного ))
У меня почему-то вообще не работает эта фишка с «подтягиванием» предыдущих тегов.

3

Re: всплывающая подсказка тэгов

http://www.atmocube.ru/tmp_fotos/tags.jpg

4

Re: всплывающая подсказка тэгов

Круто! Без сомнения полезная штука, но у меня почему-то не работающая. А в каком браузере такое возможно? Я пробовал в Opera 9.5 Beta — не вышло. В других браузерах не пробовал.

5

Re: всплывающая подсказка тэгов

saahov пишет:

Круто! Без сомнения полезная штука, но у меня почему-то не работающая. А в каком браузере такое возможно? Я пробовал в Opera 9.5 Beta — не вышло. В других браузерах не пробовал.

Firefox 2.0.0.9 в других не пробовал )

6

Re: всплывающая подсказка тэгов

Теги, как оказалось, у меня даже в Firefox'e не отображаются, зато отображаются в Safari.

Немного покопавшись в коде, обнаружил, откуда они «подтягиваются». В кавычках потому, что они вовсе не подтягиваются, а загружаются автоматически со страницей. Примерно такой код есть на каждой странице создания записи (это код из problog.ru; я урезал его немного, чтобы наглядней было):

tags = {"LiveJournal":3,"QuickPost":1,"Социальные новости":1,"PayPal":3,"Яндекс":21,"PhpAdsNew":1,"Президент":1,"User Submitter":1,"Идеи":2,"Маркетинг":6,"wbloggar":1,"Плагины Movable Type":1,"Апорт":1,"Социальные закладки":1,"Интересные блоги":1,"Diary.ru":1,"Иконки":1,"Сервисы":29,"rucity.com":1,"Подписка":1,"ProBlog":7};

Т.е. получается, что при создании записи на странице уже есть все теги, у каждого из них отображено количество связанных с ними записей.

Там же есть и другой Javascript, который, судя по всему, отвечает за «подтягивание» тегов:

function tagSplit(str) {
    var delim = RegExp.escape(tag_delim);
    var delim_scan = new RegExp('^((([\'"])(.*?)\\3[^' + delim + ']*?|.*?)(' + delim + '\\s*|$))', '');
    str = str.replace(/(^\s+|\s+$)/g, '');
    var tags = [];
    while (str.length && str.match(delim_scan)) {
        str = str.substr(RegExp.$1.length);
        var tag = RegExp.$4 ? RegExp.$4 : RegExp.$2;
        tag = tag.replace(/(^\s+|\s+$)/g, '');
        tag = tag.replace(/\s+/g, ' ');
        if (tag != '') tags.push(tag);
    }
    return tags;
}

Что ж, причина проблемы ясна, будем искать как с ней бороться.

7

Re: всплывающая подсказка тэгов

saahov пишет:

Теги, как оказалось, у меня даже в Firefox'e не отобажаются, зато отображатся в Safari.

Немного покопавшись в коде, обнаружил, откуда они «подтягиваются». В кавычках потому, что они вовсе не подтягиваются, а загружаются автоматически со страницей. Примерно такой код есть на каждой странице создания записи (это код из problog.ru; я урезал его немного, чтобы наглядней было):

...

Что ж, причина проблемы ясна, будем искать как с ней бороться.

о, это уже намного интересней, спасибо за инфу, если будут результаты отпишу.

8

Re: всплывающая подсказка тэгов

Здравствуйте.
Занимаюсь МТ первый месяц, кое-что не устраивает, но для определенных задач подходит больше других CMS-подобных инструментов.

Решил поднять тему двухлетней давности ввиду ее нерешенности, прошу не пинать ногами, если она таки решена или возможно никому не нужна.

Сначала о разных броузерах.
Подстановка тегов работает в ff3, ff2, ie7. Глючит в ie6. Не работает в opera10 и ниже, ff1. Хром не проверял.

Проблема возникла через некорректную обработку строк в javascript

Какой-то индус в МТ вместо обработки юникодовой строчки тега обрабатывает только коды нажатых клавиш клавиатуры - в результате наблюдаем ситуацию, когда набирая англ тег в кириличной раскладке, получаем всплывающие англ теги

Я, как и тот индус, решил не напрягаться, поэтому предлагаю свой небольшой хак, где также нет обработки строки с учетом раскладки, а есть только прямая замена латинской раскладки в кириличную

Итак, в файле mt-static\js\tc\tagcomplete.js находим функцию TC.TagComplete.prototype.updateWord и в ее начало добавляем эти строки

var inpStr="q|w|e|r|t|y|u|i|o|p|[|]|a|s|d|f|g|h|j|k|l|;|'|z|x|c|v|b|n|m|,|.".split('|');
var outStr='й|ц|у|к|е|н|г|ш|щ|з|х|ї|ф|і|в|а|п|р|о|л|д|ж|є|я|ч|с|м|и|т|ь|б|ю'.split('|');
for(i=0;i<inpStr.length;++i) while(c.indexOf(inpStr[i])>=0) c=c.replace(inpStr[i],outStr[i]);

Этот код немного избыточный, поскольку посимвольно обрабатывает строку, а в эту функцию параметром приходит всегда только один символ

! не забудьте сохранить файл tagcomplete.js в кодировке utf-8 !
! теги латиницей в этой модификации работать не будут !

В том же каталоге есть еще скрипт autocomplete.js - пока не нашел, где он используется, там есть аналогичная функциональность, можно этот код поставить и туда.

9

Re: всплывающая подсказка тэгов

olesoles пишет:

Здравствуйте.
Занимаюсь МТ первый месяц, кое-что не устраивает, но для определенных задач подходит больше других CMS-подобных инструментов.

очень интересно, а сделать тоже самое но чтоб и латинскте теги и русские работали? Было бы шикарно :)

10

Re: всплывающая подсказка тэгов

lexxa пишет:

очень интересно, а сделать тоже самое но чтоб и латинскте теги и русские работали? Было бы шикарно :)

Эта правка делалась несколько минут, большая часть времени ушла на понимание работы скрипта.

На нормальное решение вопроса нужно время, которого как обычно не хватает.

Честно - пока в моих проектах можно будет обойтись тегами в какой-то одной раскладке - я вряд ли буду заниматься этим скриптом.

11

Re: всплывающая подсказка тэгов

Мне не помог этот код. Можно у кого-нибудь приватизировать уже исправленный файлег.
Самое плохое не то, что русские тэги не всплывают. У меня они клонируются =) Т.е. создается вновь уже созданный русский тэг, причем старый тэг отвечает за свою запись, новый только за свою.
Короче очень не удобно.