Русское сообщество fluxbb

Быстрый лёгкий надёжный форумный движок

Вы не вошли.

Объявление

Вы можете внести свой вклад в содержание сайта. Жертвователи попадут в почетную группу "Спонсоры". Поддержать сайт.

#1 2006-02-19 16:50:58

Demo
Гость

Делаем быстрый выбор цвета в моде BBCode

Делаем быстрый выбор цвета в моде BBCode

в файле mod_easy_bbcode.php

После кода:

if (!isset($bbcode_form))
    $bbcode_form = 'post';
if (!isset($bbcode_field))
    $bbcode_field = 'req_message';

?>

добавляем код:


 <script type="text/javascript">
                                                function popColors(k) {
      if (k==1) {urlPalette='pal01.html';}
      if (k==2) {urlPalette='pal02.html';}
      var newpos='left=0,top=0,width=100,height=100,scrollbars=yes,resizable=yes';
      var popwin = open(urlPalette,'',newpos);
      }
function setColor() {
     document.bgColor=document.getElementById('txtCol').value;
}
                                                
                                                <!--
                                                  function fonction() {
                                                    element.onclick = insert_text('[font='+(this.value)+']','[/font]', 'false');
                                                  }
                                                  
                                                        function insert_text(open, close, isSmiley)
                                                        {
                                                                msgfield = (document.all) ? document.all.req_message : document.forms['post']['req_message'];

                                                                // IE support
                                                                if (document.selection && document.selection.createRange)
                                                                {
                                                                        msgfield.focus();
                                                                        sel = document.selection.createRange();
                                                                        sel.text = open + sel.text + close;
                                                                        msgfield.focus();
                                                                }

                                                                // Moz support
                                                                else if (msgfield.selectionStart || msgfield.selectionStart == '0')
                                                                {
                                                                        var startPos = msgfield.selectionStart;
                                                                        var endPos = msgfield.selectionEnd;

                                                                        msgfield.value = msgfield.value.substring(0, startPos) + open + msgfield.value.substring(startPos, endPos) + close + msgfield.value.substring(endPos, msgfield.value.length);
                                                                        if (isSmiley == 'true') {
                    msgfield.selectionStart = msgfield.selectionEnd = endPos + open.length + close.length;
                  }
                  else {
                    msgfield.selectionStart = startPos;
                    msgfield.selectionEnd = endPos + open.length + close.length;
                  }
                                                                        msgfield.focus();
                                                                }

                                                                // Fallback support for other browsers
                                                                else
                                                                {
                                                                        msgfield.value += open + close;
                                                                        msgfield.focus();
                                                                }

                                                                return;
                                                        }
                                                -->
                                                </script>

После кода примерно этого:

<input type="button" value="Цитата" name="Quote" onclick="insert_text('[quote]','[/quote]
')" />

Вставляем код:

                                                  <select name='fcolor' onmouseover="hstat('color')" class='codebuttons' onchange="insert_text('[color=+(this.options[this.selectedIndex].value)+]','[/color]')" >
                            <option value='0'>Цвет</option>
                            <option value='blue' style='color:blue'  >Синий</option>
                            <option value='red' style='color:red'  >Красный</option>
                            <option value='purple' style='color:purple'  >Пурпур</option>
                            <option value='orange' style='color:orange'  >Оранжевый</option>
                            <option value='yellow' style='color:yellow'  >Жёлтый</option>
                            <option value='gray' style='color:gray'  >Серый</option>
                            <option value='green' style='color:green'  >Зелёный</option>
                          </select>

Работает в Интернет Эксплоре, Мозилле, Опере.

Редактировался Demo (2006-02-19 16:54:30)

#2 2006-03-08 22:12:32

Denis
Гость

Re: Делаем быстрый выбор цвета в моде BBCode

У меня примерно такое выводит
[color=+(this.options[this.selectedIndex].value)+]Привет всем[/color]

#3 2006-03-08 22:58:32

Demo
Гость

Re: Делаем быстрый выбор цвета в моде BBCode

а ты сам мод:  mod_easy_bbcode установил?

#4 2006-03-08 23:03:11

Denis
Гость

Re: Делаем быстрый выбор цвета в моде BBCode

Да установил. А куда бы я коды вводил?

#5 2006-03-08 23:35:04

Demo
Гость

Re: Делаем быстрый выбор цвета в моде BBCode

Denis пишет:

Да установил. А куда бы я коды вводил?

Рикардовский устанавливал?
Пробуй снова. с нуля поставить. где-то ошибся значит.

#6 2006-03-09 03:08:40

neutral
Гость

Re: Делаем быстрый выбор цвета в моде BBCode

Баг в том, что парсер бб-кода в пунББ как раз это +(this.options[this.selectedIndex].value)+ парсит криво и куда-то девает два апострофа. Посмотри на код, который ты вставил! wink
Я на своем форуме тоже пытался в код вставить (тоже для цвета с таким фрагментом, но по другому маленько) - тоже самое было smile

Что за скрипты ты там добавил? Я просто select'ом обошелся...

#7 2006-03-09 14:26:30

Demo
Гость

Re: Делаем быстрый выбор цвета в моде BBCode

не знаю у меня без проблем работает именно при этом варианте.
работает в 3-х основных браузерах.

#8 2006-03-09 19:59:41

Denis
Гость

Re: Делаем быстрый выбор цвета в моде BBCode

Demo, Риккардовский.

neutral, спасибо помогли. У меня тоже работает без java вставки. Дело в том, что  действительно в #1 в выражении  [color='+(this.options[this.selectedIndex].value)+'] отсутствуют два апострофа. Поэтому и не работало. Теперь всё нормально.


Возник другой вопрос.  Как сделать, чтобы последовательно покрасить в один цвет. Сейчас же, если вы что-либо покрасили, скажем, в крвсный, то покрасить ещё раз в красный цвет не получается. Нужно переходить к другому цвету, а после возвращаться к красному.

#9 2006-03-09 20:18:03

Demo
Гость

Re: Делаем быстрый выбор цвета в моде BBCode

Однако...
Но это точняк форум резанул. Потому что я засовывал с апострофами...
это уже второй случай когда замечаю что код режется форумом...

>Возник другой вопрос.  Как сделать, чтобы последовательно покрасить в один цвет. Сейчас же, если вы что-либо покрасили, скажем, в крвсный, то покрасить ещё раз в красный цвет не получается. Нужно переходить к другому цвету, а после возвращаться к красному.

Да есть такое дело... может neutral что посоветует...

#10 2006-03-10 01:04:58

neutral
Гость

Re: Делаем быстрый выбор цвета в моде BBCode

В строчке c select'ом в событии:
onchange="insert_text('[color=+(this.options[this.selectedIndex].value)+]','[/color]')"
нужно подписать ;this.selectedIndex=0; В итоге должно быть так:
onchange="insert_text('[color=+(this.options[this.selectedIndex].value)+]','[/color]');this.selectedIndex=0;"

Тогда в итоге выделенным будет всегда первый элемент. Если нужно предусмотреть, чтобы вставлялся такой же код как в первом элементе, то есть без значения цвета, можно добавить в конец списка еще один элемент, такой же как и первый, только с надписью "Другой..." или что-то в этом духе smile

Редактировался neutral (2006-03-10 10:03:47)

#11 2006-03-10 09:51:44

Demo
Гость

Re: Делаем быстрый выбор цвета в моде BBCode

отлично!

#12 2006-09-19 20:57:04

coordinator
Гость

Re: Делаем быстрый выбор цвета в моде BBCode

Хорошая модернизация, спасибо.
Только java лучше убрать.
У меня с ним IE ругается, как только подведешь курсор к выпадающему меню.
Удалил скрипт, все нормально. Тестировал в Firefox 2.0b2 и IE 6.

#13 2006-09-20 04:26:15

nuke
Гость

Re: Делаем быстрый выбор цвета в моде BBCode

Почему-то стал выводить такое сообщение... - [color=+(this.options[this.selectedIndex].value)+][/color]
строчка в .php такая - onchange="insert_text('[color=+(this.options[this.selectedIndex].value)+]','[/color]');this.selectedIndex=0;"

В чем проблема?

#14 2006-09-20 10:08:02

coordinator
Гость

Re: Делаем быстрый выбор цвета в моде BBCode

nuke, смотрите сообщение №8 темы.
Нет апострофа перед и после плюсов.

Редактировался coordinator (2006-09-20 10:08:35)

#15 2006-09-20 10:27:02

Veerpool
Гость

Re: Делаем быстрый выбор цвета в моде BBCode

а как их сделать в быстром ответе? чтобы весь bbcode отоброжался?

#16 2006-09-20 12:39:51

nuke
Гость

Re: Делаем быстрый выбор цвета в моде BBCode

coordinator,
Но в том проблема, что и с апострофами тоже самое!
Что делать подскажите??

#17 2006-09-20 13:18:04

Dexus
Гость

Re: Делаем быстрый выбор цвета в моде BBCode

nuke, всю строку где onchange приведи.

#18 2006-09-20 13:25:24

Veerpool
Гость

Re: Делаем быстрый выбор цвета в моде BBCode

nuke пишет:

coordinator,
Но в том проблема, что и с апострофами тоже самое!
Что делать подскажите??

[color='+(this.options[this.selectedIndex].value)+']

Редактировался Veerpool (2006-09-20 13:26:11)

#19 2006-09-20 13:52:39

coordinator
Гость

Re: Делаем быстрый выбор цвета в моде BBCode

А разрешение для для html админам и модерам не стоит случаем?
Сегодня попробовал от участника html воспользоваться, там же использовал быстрый цвет.
В результате ничего ни цвет ни HTML не работают. Даже после правки с удалением кода.

Написал новое сообщение без кода, только быстрый цвет, отображается.

#20 2006-09-20 17:24:41

nuke
Гость

Re: Делаем быстрый выбор цвета в моде BBCode

Dexus,
<select name='fcolor' onmouseover="hstat('color')" class='codebuttons' onchange="insert_text('[color=+(this.options[this.selectedIndex].value)+]','[/color]');this.selectedIndex=0;" >

Все нормально?

#21 2006-09-20 17:35:58

coordinator
Гость

Re: Делаем быстрый выбор цвета в моде BBCode

Demo пишет:

Но это точняк форум резанул. Потому что я засовывал с апострофами...
это уже второй случай когда замечаю что код режется форумом...

Не забывайте!

#22 2006-09-20 21:23:09

Dexus
Гость

Re: Делаем быстрый выбор цвета в моде BBCode

nuke, как и написал veerpool, должно быть:

<select name='fcolor' onmouseover="hstat('color')" class='codebuttons' onchange="insert_text('[color='+(this.options[this.selectedIndex].value)+']','[/color]');this.selectedIndex=0;" >

Как уже написали выше этот форум убивает одиночные кавычки из текста тегов типа [color=,
Это все происходит в preparse_bbcode();
Чтобы это чуть-чуть исправить надо:

В самом начале функции preparse_bbcode() добавляем:

    if (strpos($text, '[ code ]') !== false && strpos($text, '[ /code ]') !== false)
    {
        list($inside, $outside) = split_text($text, '[ code ]', '[ /code ]');
        $text = implode('['.chr(5).']', $outside);
    }

и перед return trim($text); добавляем

    if (isset($inside))
    {
        $outside = explode('['.chr(5).']', $text);
        $text = '';

        $num_tokens = count($outside);

        for ($i = 0; $i < $num_tokens; ++$i)
        {
            $text .= $outside[$i];
            if (isset($inside[$i]))
                $text .='[ code ]'.$inside[$i].'[ /code ]';
        }
    }

PS: в кодовых блоках убираем пробелы из тегов [ code ] и [ /code ]
И после этого парсер ВООБЩЕ не будет никак трогать то что заключено в кодовых тегах. Правда, при этом сами кодовые теги становятся "непечатными". но по крайней мере это лучше чем то что было.

Редактировался Dexus (2006-09-20 21:55:27)

#23 2006-09-21 09:32:34

Veerpool
Гость

Re: Делаем быстрый выбор цвета в моде BBCode

а где эти функции???

я нашел только preparse_bbcode() в post.php

сделал так

        $message = preparse_bbcode($message, $errors);
    if (strpos($text, '[ code ]') !== false && strpos($text, '[ /code ]') !== false)
    {
        list($inside, $outside) = split_text($text, '[ code ]', '[ /code ]');
        $text = implode('['.chr(5).']', $outside);
    }
}

а где return trim($text);???

подскажи плз

Редактировался Veerpool (2006-09-21 09:33:03)

Подвал доски

Под управлением FluxBB. Хостинг Hostens