Интернет, компьютеры, софт и прочий Hi-Tech

Подписаться через RSS2Email.ru

Всего: 4028 комментариев

11.10.2007 21:13:18 на странице "Предложить фичу"
Opera Гость ZigFreeD
Это нужно для того чтобы я мог тупо присоединить стили bbcode не заботясь о том что они могут испортить вид моей странички.
11.10.2007 21:12:00 на странице "Предложить фичу"
Opera Гость ZigFreeD
Еще предложение, теперь по css.
В следующей версии сделай чтобы стили исползуемые в bbcode входили в другие стили...
т.е. чтобы было не:
CSS
var {
    color: blue; font-style: normal; font-family: monospace;
}
li {
    padding-bottom: 2px;
}

а было:
CSS
.bbcode var {
    color: blue; font-style: normal; font-family: monospace;
}
.bbcode li {
    padding-bottom: 2px;
}

Соответственно во все div, span и прочие блоки, используемые у тебя вставлять класс "bbcode"... ну ты в общем сам знаешь...
Просто у меня свои стили используются для многих тегов... и не хотелось бы в коде все править... а мои стили не подойдут к стилям bbcode... все таки они не для оформления комментов и прочего,а для оформления странички писались.
11.10.2007 19:54:56 на странице "Предложить фичу"
Opera Гость ZigFreeD
Удали потом мои левые сообщения чтобы они не захламляли этот топик
11.10.2007 19:53:23 на странице "Предложить фичу"
Opera Гость ZigFreeD
dima
Мог бы ты дать мне свой JS и HTML-код, чтобы я мог лучше въехать в проблему? (желательно на мыло)
К сожалению не получится... копии не осталось Not so Короче говоря там было примерно то же самое что я тебе показал выше.
Т.е. просто при попытке отправки вызывается функция JS которая формирует строку запроса и вызывает функцию AJAX. В общем если у тебя получилось бы добыть русского языка в том запросе который я показал выше то у меня не было бы проблем Not so
А так я получаю в PHP POST данные а дальше оба параметра конвертирую в cp1251
PHP
iconv('utf-8', 'cp1251', $_POST["test"]);
вот в общем то и все Not so
11.10.2007 15:31:57 на странице "Предложить фичу"
Internet Explorer Гость Ага
На счет "разнести", я только за. Т.к. спрятал xbb подальше, а чтобы заработало и не сильно лазить, пришлось делать две копии некоторых каталогов Not so одни для ядра, другие для едитора.
11.10.2007 14:56:27 на странице "Предложить фичу"
Opera Гость ZigFreeD
Блин... писал писал... в итоге не проршел тест на антибота и потерял все что написано Not so
 
Код могу выслать вечерком... как домой приду..
А вообещ после того как у меня перестало получаться конвертирвоать utf-8 в cp1251 я решил проверить что получаю вообще в JavaScript перед отправкой... И как вышло получаю каракули.
 
проверял вот так:
Javascript

function test()
{
alert(document.getElementById('testN_id').value);
alert(document.getElementById('my_textarea_id').value);
}
 

HTML
<form method="post" action="" onsubmit="test();return false;">
<input type="text" name="testN" id="testN_id">
<textarea name="my_textarea" id="my_textarea_id">
Какой-то [i]BBCode[/i]
</textarea>
<input type="submit" value="Отправить" onclick="test();return false;" />
</form>

В итоге получаю из input все отлично - по русски. а из textarea - каракули!
11.10.2007 14:25:46 на странице "Предложить фичу"
Mozilla Firefox dima
Первое...
В итоге получится четыре:
1 и 2 - только xBB под PHP4 и PHP5;
3 и 4 - xBB+xBBEditor под PHP4 и PHP5.
А может лучше вообще их разнести? Потому что некоторые граждане помещают xBB вне public_html.
 
Второе...
Кодировки пофиксю. С получением содержимого textarea средствами JS надо поэкспериментровать. С ходу не могу сообразить, какая там может быть проблема.
 
Мог бы ты дать мне свой JS и HTML-код, чтобы я мог лучше въехать в проблему? (желательно на мыло)
11.10.2007 11:03:00 на странице "Предложить фичу"
Opera Гость ZigFreeD
Итак... Похоже я буду первым...
Первое...
В следующей версии хотелось бы увидеть два архива...
первый - только xBB и второй - xBB+xBBEditor
 
Второе...
Заметил пару... "недороботок" в плане кодировок... в preview.php по умолчаниб стоит utf-8 и все тексты написаны на ней же! И чтобы это поменять придится редактировать файл ручками... помимо того что менять кодировку нужно еще и файл сохранить в другой кодировке...
И вторая недороботка... или просто я ступил под вечер вчера... когда я пытаюсь получить содержимое textarea в JS то получаю весь текст в странной кодировке... мог бы предположить что в UTF-8... что мне совершенно не нужно... т.к. я работаю в windows-1251! Врмени разбираться с этим вчера не было, так что мне пришлось полностью удалить xBBEditor из проекта Not so

Хочу заметить что проблема с кодировкой была бы не столько важна, если б у меня весь сайт не был на AJAX... а как известно AJAX все тексты русские передает в UTF-8. И что странно после передачи содержимого в textarea (всех тех каракуль) мне не удается их декодировать в cp1251.
Хочу заметить что я с этим разбирался всего минут 15, потом плюнул... голова уже не хотела работать под вечер, так что возможно это была и моя ошибка... но то что кодировка не верна это точно Not so
08.10.2007 14:01:42 на странице "PHP-библиотека xBB 0.29 для работы с BBCode. Общие сведения"
Mozilla Firefox dima
Сам я этим занятся не могу, так как 35 баксов помешают мне заработать 350 на более сложных задачах. А просить 350 за простую установку скрипта, все равно что отказать.
 
Но я был бы очень рад, если бы нашелся человек/люди, которые взялись бы за этот заработок.
 
Для себя я не попрошу ничего, и буду переадресовывать к такому человеку/людям всех нуждающихся товарищей.
 
Согласен даже создать на xBB страницу с контактами разработчиков, оказывающих платные услуги по установке/настройке/доработке xBB.
 
Если кому приглянется это приглашение - отписывайтесь мне на мыло.
08.10.2007 10:00:03 на странице "PHP-библиотека xBB 0.29 для работы с BBCode. Общие сведения"
Internet Explorer Гость Sukhov
Для dima - предлагаю в таких стучаях поступать как обычно в случае открытого кода - "пользуйтесь на здоровье, а потдержка - 35$ на WM" Well (цена от фонаря)
08.10.2007 00:25:06 на странице "PHP-библиотека xBB 0.29 для работы с BBCode. Общие сведения"
Mozilla Firefox dima
Уважаемый Jon. У меня этот класс нормально работает на четырех серверах. Тестировался под PHP4 и PHP5, под Apache 1.3 и 2.2, под Linux и под Windows.
 
Поэтому у меня нет никакого желания бросать свои дела, чтобы выяснять, почему у кого то где то этот класс не работает.
 
И уж во всяком случае я не возьмусь это делать только на основании абсолютно неинформативного утверждения: "на локалке данный класс работает, а когда выкидываю на сервак то нет".
 
Поверьте, что этому классу совершенно безразлично, используете вы его локально или нет.
 
Перечитайте еще раз документацию по созданию тегов; вспомните, что такого вы делали на локалке, чего не сделали на сервере; выясните чем ваша локалка отличается от сервера и какие это может иметь последствия для ваших скриптов...
 
В конце концов, если вы - программист, то должны знать, что такое отладка и с чем ее едят.
 
А я вам ничем не обязан. Поэтому позвольте мне не делать за вас вашу работу.
07.10.2007 22:49:51 на странице "PHP-библиотека xBB 0.29 для работы с BBCode. Общие сведения"
Opera Гость Jon
dima

class Xbb_Tags_Html extends bbcode
{
   var $behaviour = 'code';
 
   function Xbb_Tags_Html()
   {
   }
 
   // Выдаем HTML
   function get_html($tree = null)
   {
       $this->parse($this->tree);
       return $this->text;
   }
}

Почему на локалке данный класс работает, а когда выкидываю на сервак то нет Not so
05.10.2007 01:56:27 на странице "Установка xBBEditora на страницу сайта"
Mozilla Firefox dima
Заплатка на скорую руку:
  1. Откройте файл xbb.php. Найдите в нем строчку echo "var bb = new bbcode('');";. Замените на:
    PHP
    echo "var bb = new bbcode('');"
        . "bb.transportDiv=parent.document.getElementById('xbb_transport_div"
        . (isset($_GET['textarea']) ? htmlspecialchars($_GET['textarea']) : '') . "');";

  2. Содержимое файла xbb.js.php замените на:
     
    PHP
    <?php
     
    /******************************************************************************
    бла-бла-бла
    ******************************************************************************/

     
    header('Content-type: application/x-javascript; charset=utf-8');
    require_once './config/editor.config.php';
    $xbb = new Xbb;
     
    ?>
    if (typeof XBB == "undefined") { var XBB = {}; }
    <?php
    // Умолчальные значения настроек:
    echo  "XBB.path = '{$xbb->path}';"
        . "XBB.textarea_id = '{$xbb->textarea_id}';"
        . "XBB.area_width = '{$xbb->area_width}';"
        . "XBB.area_height = '{$xbb->area_height}';"
        . "XBB.state = '{$xbb->state}';"
        . "XBB.lang = '{$xbb->lang}';"
        . "XBB.iframe_id = 'xbb_editor';";
     
    ?>
    XBB.init = function() {
        // Проверяем, возможна ли подсветка синтаксиса
        if (! document.execCommand) {
            this.state = 'plain';
        }
        // Textarea, с которой будем работать.
        var textarea = document.getElementById(this.textarea_id);
        if (! textarea) { return null; }
        // Если iframe уже создан, ничего не делаем, завершаем инициализацию.
        if (document.getElementById(this.iframe_id)) { return null; }
        var parent_textarea = textarea.parentNode;
        // Create a invisible div is accessible from iframe for a transport text
        var div = document.createElement('div');
        div.setAttribute('id', 'xbb_transport_div' + this.textarea_id);
        parent_textarea.appendChild(div);
        if (document.body.textContent) {
            div.textContent = textarea.value;
        } else {
            div.innerText = textarea.value;
        }
        div.style.display = 'none';
        // Создаем iframe.
        var iframe = document.createElement('iframe');
        iframe.id = this.iframe_id;
        iframe.frameBorder = 0;
        var src = this.path + '/xbb.php?state=' + this.state + '&textarea='
            + this.textarea_id;
        if (this.lang) { src += '&lang=' + this.lang; }
        iframe.src = src;
        parent_textarea.insertBefore(iframe, textarea);
        iframe.style.width = this.area_width;
        iframe.style.height = this.area_height;
        iframe.style.border = '1px solid #a9b8c2';
        // Скрываем textarea
        textarea.style.display = 'none';
        // Назначаем функцию, срабатывающую при сабмите
        //textarea.form.onsubmit = function(ev) { this.form_submit(); }
        return true;
    }
     
    XBB.form_submit = function() {
        var iframe = document.getElementById(this.iframe_id).contentWindow;
        var state = iframe.document.forms.xbb.xbb_state.value;
        var textarea = document.getElementById(this.textarea_id);
        if ('highlight' == state) {
            var xbb_iframe = iframe.document.getElementById('xbb_iframe').contentWindow;
            try {
                textarea.value = this.innerText(xbb_iframe.document.body);
            } catch(e) {
                setTimeout("this.form_submit()", 0)
            }
        } else {
            textarea.value = iframe.document.forms.xbb.xbb_textarea.value;
        }
    }
     
    /*
    Текстовое содержимое узла с заменой <br /> на разрыв строки и окрыжением
    <p> разрывами строк.
    */

    XBB.innerText = function(node) {
        if (node.innerText) {
            return node.innerText;
        }
        if (node.textContent) {
            for (var t = [], l = (c = node.childNodes).length, p, i = 0; i < l; i++) {
                t[t.length] =
                    'p' == (p = c[i].nodeName.toLowerCase())
                        ? '\n' + c[i].textContent + '\n'
                        : 'br' == p ? '\n' : c[i].textContent;
            }
            return t.join('');
        }
        return '';
    }

  3. Отредактируйте свою хтмл-ную форму соответственно примеру:
     
    HTML
    <script type="text/javascript" src='./bbcode/xbb.js.php'></script>
    <script type="text/javascript">
    function clone(object)
    {
        if (typeof(object) != "object") return object;
        var newObject = object.constructor();
        for (objectItem in object) {
            newObject[objectItem] = clone(object[objectItem]);
        }
        return newObject;
    }
     
    XBB.path = './bbcode';
    XBB.textarea_id = 'test_1'; // идентификатор textarea
    XBB.area_width = '700px';
    XBB.area_height = '400px';
    XBB.state = 'plain'; // 'plain' or 'highlight'
    XBB.lang = 'ru_utf8'; // локализация
     
    XbbCopy = clone(XBB);
    XbbCopy.textarea_id = 'test_2';
    XbbCopy.iframe_id = 'xbb_editor2';
    </script>
     
    <form action="my_action.php" name="test" method="post">
    <textarea name="textarea1" id="test_1">текст 1</textarea>
     
    <textarea name="textarea2" id="test_2">текст 2</textarea>
     
    <input type="submit" value="Send" />
    </form>
     
    <script type="text/javascript">
    document.test.onsubmit = function(ev) {
        XBB.form_submit();
        XbbCopy.form_submit();
    }
    XBB.init();
    XbbCopy.init();
    </script>

Тестил в ФФ - работает
04.10.2007 23:47:31 на странице "Установка xBBEditora на страницу сайта"
Opera Гость Jon
А подскажите плиз как конкретнее создать 2 редактора одновременно Not so
а то я создал класс с CopyXBB и чтото не работает (
04.10.2007 11:00:50 на странице "PHP-библиотека xBB 0.29 для работы с BBCode. Общие сведения"
Opera Гость ZigFreeD
И добавил бы ты сессию чтобы свой ответ можно было бы отредактировать... хотя бы пока сессия не закончится Well Так хотя бы минут 15 будет возможность редактировать ответ... иногда это полезно... А то получается куча ответов Not so
04.10.2007 10:57:57 на странице "PHP-библиотека xBB 0.29 для работы с BBCode. Общие сведения"
Opera Гость ZigFreeD
Ты меня опередил пока я искал коммент и писал ответ Well
04.10.2007 10:56:25 на странице "PHP-библиотека xBB 0.29 для работы с BBCode. Общие сведения"
Opera Гость ZigFreeD
Jon
этот вопрос уже поднимался в другой теме... посмотри вот здесь в комментариях!

Дим... ты бы еще вынес, как и "Сообщить об ошибке", "Вопросы и предложения"... чтобы все было в одной теме... а то как видишь народ начинает повторяться... и я их понимаю... мне бы тоже было лень лазить по всем комментам и читать их Well Да если често я бы даже не подумал об этом Well
04.10.2007 10:50:26 на странице "PHP-библиотека xBB 0.29 для работы с BBCode. Общие сведения"
Mozilla Firefox dima
dima
Такого я не предусматривал. Попробуйте создать копию объекта XBB (например, - CopyXBB) в коде JavaScript, переопределить ее свойства соответственно другой textarea и вызвать метод CopyXBB.init();.
 
Если возьметесь это делать, то, пожалуста, отпишитесь о результатах. Независимо от успеха.

Что именно вам непонятно?
Редактор - это объект XBB в коде JavaScript. Чтобы вывести два редактора, нужно создать два таких объекта.
04.10.2007 00:30:09 на странице "PHP-библиотека xBB 0.29 для работы с BBCode. Общие сведения"
Internet Explorer Гость Jon
Чтото я не понял, а как вставить несколько редакторов, скажем в админке для краткого и полного описание новости Oops!
02.10.2007 14:33:05 на странице "PHP-библиотека xBB 0.29 для работы с BBCode. Общие сведения"
Mozilla Firefox dima
Вот здесь: http://pc.uz/documents/text/1591.html
Можно скачать устаревшие версии xBB 0.24 и 0.25 с вложенной документацией в одном большом файле.
02.10.2007 12:59:18 на странице "PHP-библиотека xBB 0.29 для работы с BBCode. Общие сведения"
Opera Гость ZigFreeD
Либо как когда то на форуме предлагалось сделать две графы... в одной хранить пропарсенный html код, а в другой bb-код для редактирование... после сохраннения сообщение парсится и сохраняется вместе с оргиналом в базе!
 
Кстати... Дим, а ты по приколу выложи тот тестовый пример, который шел раньше до 0,26 версии... где там более 2000 тегов и 8 уровень вложенности... чтобы народ мог тестировать производительность.. а то я найти его не могу в нете... дома то он у меня есть... и иногда приходтится его юзать Well
Только сделай пару кодировок помимо utf-8... хотябы koi-8 и cp1251
02.10.2007 12:06:53 на странице "PHP-библиотека xBB 0.29 для работы с BBCode. Общие сведения"
Mozilla Firefox dima
В phpBB очень простой BBCode. В свое время я не сумел от него добиться безглючной поддержки тегов [table], [tr], [td].
 
Парсинг постов в нем осуществляется в два этапа:
  1. При сохранении поста он преобразуется в некоторый "полуфабрикат", удобный как для дальнейшего парсинга, так и для восстановления исходного BBCode.
     
  2. При выводе поста он конвертится в HTML из сохраненного "полуфабриката". При редактировании поста он восстанавливается из сохраненного "полуфабриката".

В случае с xBB таким "полуфабрикатом" может служить $bb->syntax (см. http://xbb.uz/docs/properties.bb)
02.10.2007 03:58:40 на странице "PHP-библиотека xBB 0.29 для работы с BBCode. Общие сведения"
Opera Гость Smile
Прошу прощения за недостоверную инфу. В vBulletin какраз есть кэш постов. А вот в пхпбб нет! И выполняется всё очень быстро Well
02.10.2007 03:45:58 на странице "PHP-библиотека xBB 0.29 для работы с BBCode. Общие сведения"
Opera Гость Smile
В общем немного изменил preview.php из стандартного пакета вашей библиотеки, добавил цикл.
PHP

$bb = new bbcode;
$i = 0;
while ($i < 30)
{
$bb->parse($text);
echo '<b>'.($i+1).'.</b>'.$bb->get_html().'<br />';
$i++;
}
 

и передал в скрипт текст: [COLOR="Indigo"](здесь 100 слов "ТЕСТ")[/COLOR]
 
Это выполнилось за 1.8 секунды. Для сравнения, 30 постов, с большей вложенностью тегов в форуме VBulletin, выполнилось за 0.8 секунд Well Там нет никакого кэша, ббкоды парсятся при выводе. Почему такая разница?
02.10.2007 03:12:23 на странице "PHP-библиотека xBB 0.29 для работы с BBCode. Общие сведения"
Mozilla Firefox dima
Пример обработки ББКода без инициализации объекта при каждой итерации цикла:
 
PHP
$bb = new bbcode;
foreach ($messages as $message) {
    $bb->parse($message);
    echo $bb->get_html();
}

Кэширование:
  • При создании или редактировании поста генерируем его в HTML.
  • При выводе постов выводим заранее сгенерированный HTML.
  • Для редактировании поста выводим сохраненный BBCode.
02.10.2007 01:29:15 на странице "PHP-библиотека xBB 0.29 для работы с BBCode. Общие сведения"
Opera Гость Smile
dima
1 секунда - тоже чересчур много. На xBB.uz большие и сложные тексты BBCode отдаются посетителю практически мгновенно  (уж незнаю, как принимаются )
 
Все дело - в кэшировании. Нет смысла генерировать один и тот же текст каждый раз, как его запросят.
 
Но даже и без кэширования 12 сек. - это чересчур. Приведите, пожалуйста, характеристики вашего сервера и код, который выводит посты.
Тесты производились на локалке. Винда XP, проц 1.2, 256 оперативы. Конечно на хосте будет раза в 2 быстрей, но это не меняет ситуации. Посты выводятся простым циклом. и при каждом проходе цикла вызывается :
PHP

$bb = new bbcode;
$bb->parse($message);
 

А как это всё закэшировать или как правильно сделать?
01.10.2007 22:05:47 на странице "PHP-библиотека xBB 0.29 для работы с BBCode. Общие сведения"
Mozilla Firefox dima
В целях безопасности xBB преобразует весь HTML в мнемоники.
Чтобы делать вставки HTML, вам следует создать специальный тег, который можно назвать [html], и в котором не будет производиться преобразование кода HTML.
 
Инструкцию по созданию собственных тегов можно найти здесь: http://xbb.uz/docs/add_tag.bb.
 
Класс обработчик для тега [html] должен быть, приблизительно, таким:
 
PHP
class Xbb_Tags_Html extends bbcode
{
    var $behaviour = 'code';
 
    function Xbb_Tags_Html()
    {
    }
 
    // Выдаем HTML
    function get_html($tree = null)
    {
        $this->parse($this->tree);
        return $this->text;
    }
}
01.10.2007 15:07:40 на странице "PHP-библиотека xBB 0.29 для работы с BBCode. Общие сведения"
Opera Гость Jon
А подскажите плиз как в текст можно вставить исходный текс, т.е. в текст добавить скажем свой <div class="aaaa"><h3>лялля</h3></div>
01.10.2007 09:50:13 на странице "PHP-библиотека xBB 0.29 для работы с BBCode. Общие сведения"
Internet Explorer Гость Sukhov
Угу. У меня тоже на форуме стоит. гогда на странице 30-50 постов, то и без кеширования уходят десятки милисекунд, но не как не секунды.
30.09.2007 23:32:25 на странице "PHP-библиотека xBB 0.29 для работы с BBCode. Общие сведения"
Mozilla Firefox dima
1 секунда - тоже чересчур много. На xBB.uz большие и сложные тексты BBCode отдаются посетителю практически мгновенно Well (уж незнаю, как принимаются Not so)
 
Все дело - в кэшировании. Нет смысла генерировать один и тот же текст каждый раз, как его запросят.
 
Но даже и без кэширования 12 сек. - это чересчур. Приведите, пожалуйста, характеристики вашего сервера и код, который выводит посты.
Биржа долевых инвестиций SIMEX.

© 2007-2018, Дмитрий Скоробогатов.
Разрешается воспроизводить, распространять и/или изменять материалы сайта
в соответствии с условиями GNU Free Documentation License,
версии 1.2 или любой более поздней версии, опубликованной FSF,
если только иное не указано в самих материалах.