![]() Интернет, компьютеры, софт и прочий Hi-Tech | ||||||||||||||
Избранные докиМетки (все метки)hi tech, internet, it, software, интернет, информационные технологии, ит, по, программное обеспечение, софт
Подписаться через RSS2Email.ru
|
APIКак создать тегЧтобы добавить еще один или несколько тегов, нужно, во-первых, написать дочерний класс к классу bbcode, реализующий специфику этих тегов, и, во-вторых, добавить имена ваших тегов и соответствющего им класса в массив tags. В примерах ниже будет продемонстрировано практически все, что может вам понадобиться при описании нового тега(ов). В этих примерах предполагается PHP5. Чтобы они работали в PHP4, нужно все объявления public и private заменить на var. Класс для тега [hr] class Xbb_Tags_Hr extends bbcode { // Флаг, является ли тег всегда закрытым. В данном случае "да". public $is_close = true; // Число разрывов строк, которые должны быть проигнорированы после тега public $rbr = 1; // Указываем "модель поведения" таегов. 'hr' означает, что тег может // содержаться только в элементах блочного типа и не может содержать каких // либо дочерних элементов public $behaviour = 'hr'; // Конструктор класса ничего не делает function Xbb_Tags_Hr() { } // Описываем конвертацию в HTML. // Строчка '$tree = null' нужна для нормальной работы в режиме E_STRICT. function get_html($tree = null) { return '<hr class="bb" />'; } } Класс для тега [p] и тегов [h1], [h2], [h3], [h4], [h5], [h6] class Xbb_Tags_P extends bbcode { // Число разрывов строк, которые должны быть проигнорированы перед тегами public $lbr = 2; // После тега игнорировать 2 переноса строки public $rbr = 2; // Указываем "модель поведения" таегов. 'p' - означает, что обрабатываемые // теги создают блочные элементы, которые могут содержать только линейные // элементы и картинки. public $behaviour = 'p'; // Конструктор класса function Xbb_Tags_P() { } // Описываем конвертацию в HTML. function get_html($tree = null) { // $this->tag - имя текущего тега. Всегда доступно. $str = "\n<" . $this->tag . ' class="bb"'; // $this->attrib - массив значений атрибутов. Всегда доступен. // Имеет структуру: 'имя_атрибута' => значение атрибута $align = isset($this->attrib['align']) ? $this->attrib['align'] : ''; if ($align) { $str .= ' align="' . htmlspecialchars($align) . '"'; } // parent::get_html() - Возвращает HTML, сгенерированный из // содержимого тега. return $str . '>' . parent::get_html() . '</' . $this->tag . ">\n"; } } Класс для тега [bbcode] class Xbb_Tags_Bbcode extends bbcode { // Модель поведения 'code' означает, что тег является линейним и не может // содержать в себе дочерних public $behaviour = 'code'; // Специфичное для данного класса свойство private $_bb; // В конструкторе инициализируем свойство $this->_bb function Xbb_Tags_Bbcode() { $this->_bb = new bbcode(); } // Выдаем HTML function get_html($tree = null) { // Находим текстовое содержимое тега $str = ''; foreach ($this->tree as $item) { if ('item' == $item['type']) { continue; } $str .= $item['str']; } // Обрабатываем текст // $this->tags - Массив имен поддерживаемых тегов $this->_bb->tags = $this->tags; // $this->mnemonics - Массив мнемоник (смайликов) $this->_bb->mnemonics = $this->mnemonics; // $this->autolinks - флаг, включающий/отключающий автоматические ссылки $this->_bb->autolinks = $this->autolinks; $this->_bb->parse($str); return '<code class="bb_code">' . $this->_bb->highlight() . '</code>'; } } Написав класс и позаботившись, чтобы он был "в зоне видимости" вашего скрипта, можно пользоваться описанным тегом(ами): PHP $text = 'Код:[bbcode][h1]Красота - [i]великая[/i] сила![/h1][/bbcode] [hr] Результат: [h1]Красота - [i]великая[/i] сила![/h1]'; $bb = new bbcode; $bb->tags['bbcode'] = 'Xbb_Tags_Bbcode'; $bb->tags['h1'] = 'Xbb_Tags_P' ; $bb->tags['h2'] = 'Xbb_Tags_P' ; $bb->tags['h3'] = 'Xbb_Tags_P' ; $bb->tags['h4'] = 'Xbb_Tags_P' ; $bb->tags['h5'] = 'Xbb_Tags_P' ; $bb->tags['h6'] = 'Xbb_Tags_P' ; $bb->tags['hr'] = 'Xbb_Tags_Hr' ; $bb->tags['p'] = 'Xbb_Tags_P' ; // Тестируем: $bb->parse($text); echo $bb->get_html(); Еще несколько замечаний:
Последнее редактирование: 2007-08-23 17:23:12 Метки материала: BBCode, xBB, HTML, тег, PHP, API, класс 33 комментарияПоследние десять комментариев:
Поцы подорити плиз тегу |
16.03.2012 19:43:52 | # |
16.03.2012 18:20:41 | # |
15.03.2012 19:35:14 | # |
15.03.2012 18:13:28 | # |
01.02.2012 23:15:07 | # |
© 2007-2019, Дмитрий Скоробогатов.
Разрешается воспроизводить, распространять и/или изменять материалы сайта
в соответствии с условиями GNU Free Documentation License,
версии 1.2 или любой более поздней версии, опубликованной FSF,
если только иное не указано в самих материалах.