Как я делал смайлики в bueditor (изврат)

Аватар пользователя cwer cwer 15 октября 2007 в 19:46

Предупреждения:
1) это не готовое решение, ибо делал исключительно для себя. Просто на основе того, что я сделал, можете сделать свое Smile
2) делал для старой (dev) версии буедитора, так что не уверен будет ли на новой работать.
3) так как было лень писать модуль, для преобразования из текста в картинки, издевался над ббкодами.

Итак, что я делал
1) в bbcode-filter.inc, в _bbcode_filter_process, там где написано
// Simple replacements (str_replace is faster than preg_replace)
в $str добавил

    ':smile:'   => '<img src="/sites/all/modules/bueditor/icons/smiles/smile.gif" alt="smile" />',
    ':wink:'   => '<img src="/sites/all/modules/bueditor/icons/smiles/wink.gif" alt="wink" />',
    ':sad:'   => '<img src="/sites/all/modules/bueditor/icons/smiles/sad.gif" alt="sad" />',
    ':cry:'   => '<img src="/sites/all/modules/bueditor/icons/smiles/cry.gif" alt="cry" />',
    ':angel:'   => '<img src="/sites/all/modules/bueditor/icons/smiles/angel.gif" alt="angel" />',
    ':diablo:'   => '<img src="/sites/all/modules/bueditor/icons/smiles/diablo.gif" alt="diablo" />',
    ':cool:'   => '<img src="/sites/all/modules/bueditor/icons/smiles/cool.gif" alt="cool" />',
    ':embarassed:'   => '<img src="/sites/all/modules/bueditor/icons/smiles/embarassed.gif" alt="embarassed" />',
    ':kiss:'   => '<img src="/sites/all/modules/bueditor/icons/smiles/kiss.gif" alt="kiss" />',
    ':laughing:'   => '<img src="/sites/all/modules/bueditor/icons/smiles/laughing.gif" alt="laughing" />',
    ':lazy:'   => '<img src="/sites/all/modules/bueditor/icons/smiles/lazy.gif" alt="lazy" />',
    ':music:'   => '<img src="/sites/all/modules/bueditor/icons/smiles/music.gif" alt="music" />',
    ':rtfm:'   => '<img src="/sites/all/modules/bueditor/icons/smiles/rtfm.gif" alt="rtfm" />',
    ':secret:'   => '<img src="/sites/all/modules/bueditor/icons/smiles/secret.gif" alt="secret" />',
    ':shok:'   => '<img src="/sites/all/modules/bueditor/icons/smiles/shok.gif" alt="shok" />',
    ':tongue:'   => '<img src="/sites/all/modules/bueditor/icons/smiles/tongue.gif" alt="tongue" />',

желательно такую штуку сделать в своем модуле Smile
2) Положил в папку /sites/all/modules/bueditor, папку smiles со смайликами
3) сделал новую кнопку в буедиторе:

js:
editor.G.getSmile=function(txt) {
  editor.active.replaceSelection(txt,'end');
  editor.dialog.close();
}
var userForm = '<table><tr>';
userForm += '<td><a href="javascript:editor.G.getSmile(\':smile:\');"><img src="/sites/all/modules/bueditor/icons/smiles/smile.gif" alt="smile" /></a></td>';
userForm += '<td><a href="javascript:editor.G.getSmile(\':wink:\');"><img src="/sites/all/modules/bueditor/icons/smiles/wink.gif" alt="wink" /></a></td>';
userForm += '<td><a href="javascript:editor.G.getSmile(\':sad:\');"><img src="/sites/all/modules/bueditor/icons/smiles/sad.gif" alt="sad" /></a></td>';
userForm += '<td><a href="javascript:editor.G.getSmile(\':cry:\');"><img src="/sites/all/modules/bueditor/icons/smiles/cry.gif" alt="cry" /></a></td>';
userForm += '</tr><tr>';

userForm += '<td><a href="javascript:editor.G.getSmile(\':angel:\');"><img src="/sites/all/modules/bueditor/icons/smiles/angel.gif" alt="angel" /></a></td>';
userForm += '<td><a href="javascript:editor.G.getSmile(\':diablo:\');"><img src="/sites/all/modules/bueditor/icons/smiles/diablo.gif" alt="diablo" /></a></td>';
userForm += '<td><a href="javascript:editor.G.getSmile(\':cool:\');"><img src="/sites/all/modules/bueditor/icons/smiles/cool.gif" alt="cool" /></a></td>';
userForm += '<td><a href="javascript:editor.G.getSmile(\':embarassed:\');"><img src="/sites/all/modules/bueditor/icons/smiles/embarassed.gif" alt="embarassed" /></a></td>';
userForm += '</tr><tr>';

userForm += '<td><a href="javascript:editor.G.getSmile(\':kiss:\');"><img src="/sites/all/modules/bueditor/icons/smiles/kiss.gif" alt="kiss" /></a></td>';
userForm += '<td><a href="javascript:editor.G.getSmile(\':laughing:\');"><img src="/sites/all/modules/bueditor/icons/smiles/laughing.gif" alt="laughing" /></a></td>';
userForm += '<td><a href="javascript:editor.G.getSmile(\':lazy:\');"><img src="/sites/all/modules/bueditor/icons/smiles/lazy.gif" alt="lazy" /></a></td>';
userForm += '<td><a href="javascript:editor.G.getSmile(\':music:\');"><img src="/sites/all/modules/bueditor/icons/smiles/music.gif" alt="music" /></a></td>';
userForm += '</tr><tr>';

userForm += '<td><a href="javascript:editor.G.getSmile(\':rtfm:\');"><img src="/sites/all/modules/bueditor/icons/smiles/rtfm.gif" alt="rtfm" /></a></td>';
userForm += '<td><a href="javascript:editor.G.getSmile(\':secret:\');"><img src="/sites/all/modules/bueditor/icons/smiles/secret.gif" alt="secret" /></a></td>';
userForm += '<td><a href="javascript:editor.G.getSmile(\':shok:\');"><img src="/sites/all/modules/bueditor/icons/smiles/shok.gif" alt="shok" /></a></td>';
userForm += '<td><a href="javascript:editor.G.getSmile(\':tongue:\');"><img src="/sites/all/modules/bueditor/icons/smiles/tongue.gif" alt="tongue" /></a></td>';
userForm += '</tr></table>';
editor.dialog.open('Смайлики', userForm);

P.S. так же переделал кнопку предпросмотра, но так как я грязный извращенец так же добавлял в предпросмотр преобразование ббкода, думаю не особо круто будет выкладывать этот код (слишком замусорен получился) Wink

Комментарии

Аватар пользователя Moon Fan Moon Fan 9 ноября 2007 в 16:31

1) в bbcode-filter.inc, в _bbcode_filter_process, там где написано
// Simple replacements (str_replace is faster than preg_replace)
в $str добавил

Что-то я не нашёл в поставке BuEditora такого файла:(

Аватар пользователя cwer cwer 10 ноября 2007 в 0:24

> 3) так как было лень писать модуль, для преобразования из текста в картинки, издевался над ббкодами.
т.е. изначально был модуль bbcode

Аватар пользователя Shedko Shedko 19 ноября 2007 в 0:05

Спасибо, весьма доступно и красиво Smile

P.S.
модуль smile удалил Smile теперь просто добавив в список замен свои коды смайлов ( =), Smile Smile ) и сделал для них замену на рисунок.
Очень удобно оказалось. Только вот не забыть про это обновлении модуля Smile

Аватар пользователя cwer cwer 19 ноября 2007 в 0:47

Можно написать свой модуль через хуки (как bbcode) и подключить его в настройках материала.
Но было лень Sad

Аватар пользователя l_test l_test 30 ноября 2007 в 2:45

Автору уже писала, что была проблема с данным кодом.
При нажатии на новую кнопку появлялась ошибка вида:

"
TypeError: Statement on line 2: Cannot convert undefined or null to Object
Backtrace:
Line 2 of eval script
editor.G.getSmile=function(txt) {
Line 88 of linked script http:// сайт/sites/all/modules/bueditor/bueditor.js
if (b[4]) b[4](E); //execute button script.
Line 1 of function script
editor.buttonClick(34, 33); return false;
..."

(это в Опере)

В IE ошибка другого вида: "TypeError: "editor.G" - есть null или не является объектом."

Удалось обойти, исправив начало кода.
js:
getSmile=function(txt) {

...
Теперь будем пользоваться.
Ещё раз спасибо.:-)

Аватар пользователя Aime Aime 22 марта 2008 в 23:02

1) в bbcode-filter.inc, в _bbcode_filter_process, там где написано
// Simple replacements (str_replace is faster than preg_replace)
в $str добавил

- Подскажите добавить перед частью $str или после? Т.к. там идет
// Simple replacements (str_replace is faster than preg_replace)
$str = array(

Аватар пользователя ivcons ivcons 20 сентября 2009 в 21:20

Вот рабочий код кнопки:

js:
getSmile=function(txt) {
  editor.active.replaceSelection(txt,'end');
  editor.dialog.close();
}
var userForm = '<table><tr>';
userForm += '<td><a href="javascript:getSmile(\':smile:\');"><img src="/sites/all/modules/bueditor/icons/smiles/smile.gif" alt="smile" /></a></td>';
userForm += '<td><a href="javascript:getSmile(\':wink:\');"><img src="/sites/all/modules/bueditor/icons/smiles/wink.gif" alt="wink" /></a></td>';
userForm += '<td><a href="javascript:getSmile(\':sad:\');"><img src="/sites/all/modules/bueditor/icons/smiles/sad.gif" alt="sad" /></a></td>';
userForm += '<td><a href="javascript:getSmile(\':cry:\');"><img src="/sites/all/modules/bueditor/icons/smiles/cry.gif" alt="cry" /></a></td>';
userForm += '</tr><tr>';
 
userForm += '<td><a href="javascript:getSmile(\':angel:\');"><img src="/sites/all/modules/bueditor/icons/smiles/angel.gif" alt="angel" /></a></td>';
userForm += '<td><a href="javascript:getSmile(\':diablo:\');"><img src="/sites/all/modules/bueditor/icons/smiles/diablo.gif" alt="diablo" /></a></td>';
userForm += '<td><a href="javascript:getSmile(\':cool:\');"><img src="/sites/all/modules/bueditor/icons/smiles/cool.gif" alt="cool" /></a></td>';
userForm += '<td><a href="javascript:getSmile(\':embarassed:\');"><img src="/sites/all/modules/bueditor/icons/smiles/embarassed.gif" alt="embarassed" /></a></td>';
userForm += '</tr><tr>';
 
userForm += '<td><a href="javascript:getSmile(\':kiss:\');"><img src="/sites/all/modules/bueditor/icons/smiles/kiss.gif" alt="kiss" /></a></td>';
userForm += '<td><a href="javascript:getSmile(\':laughing:\');"><img src="/sites/all/modules/bueditor/icons/smiles/laughing.gif" alt="laughing" /></a></td>';
userForm += '<td><a href="javascript:getSmile(\':lazy:\');"><img src="/sites/all/modules/bueditor/icons/smiles/lazy.gif" alt="lazy" /></a></td>';
userForm += '<td><a href="javascript:getSmile(\':music:\');"><img src="/sites/all/modules/bueditor/icons/smiles/music.gif" alt="music" /></a></td>';
userForm += '</tr><tr>';
 
userForm += '<td><a href="javascript:getSmile(\':help:\');"><img src="/sites/all/modules/bueditor/icons/smiles/help.gif" alt="help" /></a></td>';
userForm += '<td><a href="javascript:getSmile(\':secret:\');"><img src="/sites/all/modules/bueditor/icons/smiles/secret.gif" alt="secret" /></a></td>';
userForm += '<td><a href="javascript:getSmile(\':shok:\');"><img src="/sites/all/modules/bueditor/icons/smiles/shok.gif" alt="shok" /></a></td>';
userForm += '<td><a href="javascript:getSmile(\':tongue:\');"><img src="/sites/all/modules/bueditor/icons/smiles/tongue.gif" alt="tongue" /></a></td>';
userForm += '</tr></table>';
editor.dialog.open('Смайлики', userForm);
Аватар пользователя infarh infarh 12 октября 2009 в 15:39

А можно код предпросмотра в студию? Я не программер, но тоже хочу сделать на ббкодах и что бы предпросмотр работал...

Аватар пользователя Worth Worth 18 октября 2011 в 13:14

Менять код модуля bbcode-filter.inc - неправильно. При обновлениях все затрется, а ты и не вспомнишь.
Странно, что для такой распространенной задачи не было написано подробной инструкции. Вот народ, я написал, пользуйтесь: qip смайлики в Drupal
Автору топика - спасибо за код кнопки BuEditor'a! Надо бы на выходных разобраться с превью...