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

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

Предупреждения:
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

Комментарии

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

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

9 ноября 2007 в 16:31

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

10 ноября 2007 в 0:24

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

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

19 ноября 2007 в 0:05

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

19 ноября 2007 в 0:47

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

"
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) {

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

30 ноября 2007 в 2:45

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(

22 марта 2008 в 23:02

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

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);
20 сентября 2009 в 21:20

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

12 октября 2009 в 15:39

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

18 октября 2011 в 13:14