tashkentchi
Новичок
Упс... Это моя неакуратность. Замени все вызовы getmicrotime() в bbcode.lib.php на $this -> getmicrotime() в строках 118, 997 и 1049. Метод я добавил, а вот вызовы не все поправил.
проблема в том что именно эта клиенская часть мне и нужнаАвтор оригинала: boombick
Надо прикрутить к библиотеке tashkentchi клиентскую часть
+1Автор оригинала: ZigFreeD
boombick
Да! Это было бы вообще супер особенно если вы совместите усилия и сделаете это в одном пакете
Под фразой "совместите усилия" я подразумеваю то, чтоб этот скрипт был в перую очередь оптимизирован для этого парсера А уж для других это их проблемы будет
Приколько Супер!Автор оригинала: tashkentchi
2. Улучшены автоматические ссылки. Теперь обрабатываются любые протоколы.
3. Добавлена настройка preg_autolinks, позволяющая, "на лету" изменять автоматические ссылки.
Жду не дождусь Скорей бы ужеАвтор оригинала: boombick
Я думаю, что на следующей неделе опубликую расширенный xBB с генератором JavaScript-кода и набора кнопок для удобного добавления к проектам
$bb -> preg_autolinks['pattern'][2] = "'([\w]+[\w\-\.]+)@([\w\-\.]+\.[\w]+)'si";
$bb -> preg_autolinks['replacement'][2] = '$1(at)$2';
$bb -> tags['url'] = 'my_url';
/* Никакие открывающие теги BBCode не должны приводить к автоматическому
закрытию этого тега */
var $ends = array();
/* Перечисляем теги, которые должны быть автоматически закрыты при
открытии этого тега */
var $stop = array(
'a','abbr','acronym','anchor','b','color','email','font','google','h1',
'h2','h3','i','img','s','size','strike','sub','sup','tt','u','url'
);
/* Никакие теги BBCode не могут быть вложены в данный тег */
var $children = array();
/* Перечисляем теги BBCode, непосредственно в которые разрешено вкладывать данный тег */
var $parent = array(
'*','address','align','center','justify','left','quote','right','td','th'
);
/* Разрешить использовать тег в корне дерева элементов BBCode. */
var $top_level = true;
function get_html() {
/* Отключить автоматические ссылки */
$this -> autolinks = false;
/* Не обрабатывать смайлики */
$this -> mnemonics = array();
/* Заменяем мнемоники */
$text = parent::get_html($this -> tree);
$text = str_replace('<', '<', $text);
$text = str_replace('>', '>', $text);
$text = str_replace('"', '"', $text);
$text = str_replace('&amp;', '&', $text);
/* Возвращаем HTML-код */
return $text;
}
// Класс для тегов [a], [anchor] и [url] (+стили)
class url_style extends bbcode {
var $ends = array(
'*','align','center','h1','h2','h3','hr','justify','left','list','php',
'quote','right','table','td','th','tr'
);
var $children = array(
'abbr','acronym','b','bbcode','code','color','font','i','img','nobb',
's','size','strike','sub','sup','tt','u'
);
function get_html() {
$this -> autolinks = false;
$text = '';
foreach ($this -> tree as $val) {
if ('text' == $val['type']) { $text .= $val['str']; }
}
$href = '';
if (isset($this -> attrib['url'])) {
$href = $this -> attrib['url'];
}
if (! $href && isset($this -> attrib['a'])) {
$href = $this -> attrib['a'];
}
if (! $href && isset($this -> attrib['href'])) {
$href = $this -> attrib['href'];
}
if (! $href && ! isset($this -> attrib['anchor'])) { $href = $text; }
$protocols = array(
'ftp://', 'file://', 'http://', 'https://', 'mailto:', 'svn://',
'#', '/', '?', './', '../'
);
$is_http = false;
foreach ($protocols as $val) {
if ($val == substr($href, 0, strlen($val))) {
$is_http = true;
break;
}
}
if ($href && ! $is_http) { $href = 'http://'.$href; }
if (isset($this -> attrib['class']))
{
$target = $this -> attrib['class'];
$attr = ' class='.$target;
}
else
$attr = 'class="bb"';
if ($href) {
$attr .= ' href="'.htmlspecialchars($href).'"';
}
if (isset($this -> attrib['title'])) {
$title = $this -> attrib['title'];
$attr .= ' title="'.htmlspecialchars($title).'"';
}
$id = '';
if (isset($this -> attrib['id'])) {
$id = $this -> attrib['id'];
}
if (! $id && isset($this -> attrib['name'])) {
$id = $this -> attrib['name'];
}
if (! $id && isset($this -> attrib['anchor'])) {
$id = $this -> attrib['anchor'];
if (! $id) { $id = $text; }
}
if ($id) {
if ($id{0} < 'A' || $id{0} > 'z') { $id = 'bb'.$id; }
$attr .= ' id="'.htmlspecialchars($id).'"';
}
if (isset($this -> attrib['target'])) {
$target = $this -> attrib['target'];
$attr .= ' target="'.htmlspecialchars($target).'"';
}
return '<a '.$attr.'>'.parent::get_html($this -> tree).'</a>';
}
}
$text = '
[url]Тут класс BB[/url]
[a]И тут класс BB[/a]
[url class=two]А тут класс two[/url]
[a class=two]И тут класс two[/a]
';
# BB-парсер
require_once 'bbcode/bbcode.lib.php';
$bb = new bbcode($text);
$bb -> tags['url'] = 'url_style';
$bb -> tags['a'] = 'url_style';
$text = $bb->get_html();
echo $text;
var $tags = array(
'*' => 'bb_li',
'a' => 'bb_a',
'abbr' => 'bb_abbr',
'acronym' => 'bb_acronym',
'address' => 'bb_address',
'align' => 'bb_align',
'anchor' => 'bb_a',
'b' => 'bb_strong',
'bbcode' => 'bb_bbcode',
'caption' => 'bb_caption',
'center' => 'bb_align',
'code' => 'bb_code',
'color' => 'bb_color',
'email' => 'bb_email',
'font' => 'bb_font',
'google' => 'bb_google',
'h1' => 'bb_h1',
'h2' => 'bb_h2',
'h3' => 'bb_h3',
'html' => 'html_yes',
'hr' => 'bb_hr',
'i' => 'bb_i',
'img' => 'bb_img',
'justify' => 'bb_align',
'left' => 'bb_align',
'list' => 'bb_list',
'nobb' => 'bb_nobb',
'php' => 'bb_php',
'quote' => 'bb_quote',
'right' => 'bb_align',
's' => 'bb_del',
'size' => 'bb_size',
'strike' => 'bb_del',
'sub' => 'bb_sub',
'sup' => 'bb_sup',
'table' => 'bb_table',
'td' => 'bb_td',
'th' => 'bb_th',
'tr' => 'bb_tr',
'tt' => 'bb_tt',
'u' => 'bb_u',
'url' => 'bb_a'
);
// Класс для тега [html], в котором BB теги не транслируются
// зато работает HTML и JavaScript
class html_yes extends bbcode {
/* Никакие открывающие теги BBCode не должны приводить к автоматическому
закрытию этого тега */
var $ends = array();
/* Никакие теги BBCode не могут быть вложены в данный тег */
var $children = array();
/* Перечисляем теги, которые должны быть автоматически закрыты при
открытии этого тега */
var $stop = array(
'a','abbr','acronym','anchor','b','color','email','font','google','h1',
'h2','h3','i','img','s','size','strike','sub','sup','tt','u','url'
);
/* Перечисляем теги BBCode, непосредственно в которые разрешено вкладывать данный тег */
var $parent = array(
'*','address','align','center','justify','left','quote','right','td','th'
);
/* Разрешить использовать тег в корне дерева элементов BBCode. */
var $top_level = true;
function get_html() {
/* Отключить автоматические ссылки */
$this -> autolinks = false;
/* Не обрабатывать смайлики */
$this -> mnemonics = array();
/* Заменяем мнемоники */
$text = parent::get_html($this -> tree);
$text = str_replace('<', '<', $text);
$text = str_replace('>', '>', $text);
$text = str_replace('"', '"', $text);
$text = str_replace('&', '&', $text);
/* Возвращаем HTML-код */
return $text;
}
}
$text = "
[html]
<script>alert('YES!');</script>
[/html]
";
# BB-парсер
require_once 'bbcode/bbcode.lib.php';
$bb = new bbcode($text);
# Тег HTML
$bb -> tags['html'] = 'html_yes';
$text = $bb->get_html();
echo $text;
Думаю, что такие специфические классы следует помещать в отдельный файл, подключаемый с помощью "require", если нужно. И включать соответствующие им теги на лету, в зависимости от прав текущего посетителя.Автор оригинала: ZigFreeD
tashkentchi
Слушай, а ты не хочешь включить в основной модуль функции предложенные D.Lans? Я имею ввиду те которые он написал на форуме выше..
просто это действительно может пригодиться... для админки... а чтобы небыло пробелмы с безопасностью сделать еще какой то параметр, типа admin=True; а если параметр не передан, то чтобы функции не работали... Просто такие функции на самом деле могут пригодиться... возможность добавлять любые свои class и писать в чистом html коде...
+1К сожалению, у меня нет физической возможности реализовать сколько нибудь значительную их часть. Поэтому вам следует реализовывать их самостоятельно. Разумеется, я согласен помочь вам советами.
При загрузке индексной страницы, не работает изначально под пхп5.
Код:Fatal error: Declaration of bb_a::get_html() must be compatible with that of bbcode::get_html() in D:\server\web\www\htdocs\temporary\temp\bbcode\bbcode.lib.php on line 1129
Не совместимы определения функций с родительским классом. Правится просто заменой
function get_html()
на
function get_html($elems = false)
(если нет подводных камней в самих функция )
Код:Strict Standards: Assigning the return value of new by reference is deprecated in D:\server\web\www\htdocs\temporary\temp\bbcode\bbcode.lib.php on line 1033
В 5м php =& new не используется, хотя в 4м это было верно.