Быстрый лёгкий надёжный форумный движок
Вы не вошли.
Страницы 1
Тема закрыта
Делаем быстрый выбор цвета в моде 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)
У меня примерно такое выводит
[color=+(this.options[this.selectedIndex].value)+]Привет всем[/color]
а ты сам мод: mod_easy_bbcode установил?
Да установил. А куда бы я коды вводил?
Да установил. А куда бы я коды вводил?
Рикардовский устанавливал?
Пробуй снова. с нуля поставить. где-то ошибся значит.
Баг в том, что парсер бб-кода в пунББ как раз это +(this.options[this.selectedIndex].value)+ парсит криво и куда-то девает два апострофа. Посмотри на код, который ты вставил!
Я на своем форуме тоже пытался в код вставить (тоже для цвета с таким фрагментом, но по другому маленько) - тоже самое было
Что за скрипты ты там добавил? Я просто select'ом обошелся...
не знаю у меня без проблем работает именно при этом варианте.
работает в 3-х основных браузерах.
Demo, Риккардовский.
neutral, спасибо помогли. У меня тоже работает без java вставки. Дело в том, что действительно в #1 в выражении [color='+(this.options[this.selectedIndex].value)+'] отсутствуют два апострофа. Поэтому и не работало. Теперь всё нормально.
Возник другой вопрос. Как сделать, чтобы последовательно покрасить в один цвет. Сейчас же, если вы что-либо покрасили, скажем, в крвсный, то покрасить ещё раз в красный цвет не получается. Нужно переходить к другому цвету, а после возвращаться к красному.
Однако...
Но это точняк форум резанул. Потому что я засовывал с апострофами...
это уже второй случай когда замечаю что код режется форумом...
>Возник другой вопрос. Как сделать, чтобы последовательно покрасить в один цвет. Сейчас же, если вы что-либо покрасили, скажем, в крвсный, то покрасить ещё раз в красный цвет не получается. Нужно переходить к другому цвету, а после возвращаться к красному.
Да есть такое дело... может neutral что посоветует...
В строчке 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;"
Тогда в итоге выделенным будет всегда первый элемент. Если нужно предусмотреть, чтобы вставлялся такой же код как в первом элементе, то есть без значения цвета, можно добавить в конец списка еще один элемент, такой же как и первый, только с надписью "Другой..." или что-то в этом духе
Редактировался neutral (2006-03-10 10:03:47)
отлично!
Хорошая модернизация, спасибо.
Только java лучше убрать.
У меня с ним IE ругается, как только подведешь курсор к выпадающему меню.
Удалил скрипт, все нормально. Тестировал в Firefox 2.0b2 и IE 6.
Почему-то стал выводить такое сообщение... - [color=+(this.options[this.selectedIndex].value)+][/color]
строчка в .php такая - onchange="insert_text('[color=+(this.options[this.selectedIndex].value)+]','[/color]');this.selectedIndex=0;"
В чем проблема?
nuke, смотрите сообщение №8 темы.
Нет апострофа перед и после плюсов.
Редактировался coordinator (2006-09-20 10:08:35)
а как их сделать в быстром ответе? чтобы весь bbcode отоброжался?
coordinator,
Но в том проблема, что и с апострофами тоже самое!
Что делать подскажите??
nuke, всю строку где onchange приведи.
coordinator,
Но в том проблема, что и с апострофами тоже самое!
Что делать подскажите??
[color='+(this.options[this.selectedIndex].value)+']
Редактировался Veerpool (2006-09-20 13:26:11)
А разрешение для для html админам и модерам не стоит случаем?
Сегодня попробовал от участника html воспользоваться, там же использовал быстрый цвет.
В результате ничего ни цвет ни HTML не работают. Даже после правки с удалением кода.
Написал новое сообщение без кода, только быстрый цвет, отображается.
Dexus,
<select name='fcolor' onmouseover="hstat('color')" class='codebuttons' onchange="insert_text('[color=+(this.options[this.selectedIndex].value)+]','[/color]');this.selectedIndex=0;" >
Все нормально?
Demo пишет:
Но это точняк форум резанул. Потому что я засовывал с апострофами...
это уже второй случай когда замечаю что код режется форумом...
Не забывайте!
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)
а где эти функции???
я нашел только 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)
Страницы 1
Тема закрыта