تمديد html_bbcodeparser_filter
-
20-09-2019 - |
سؤال
أحاول إضافة علامات إضافية إلى Pear Package BBCodeParser http://pear.php.net/package/html_bbcodeparser/docs/latest/li_html_bbcodeparser.html, للقيام بذلك ، أعتقد أنني بحاجة إلى وضع كائن.
Object.php
<?php
/*
New filter
@todo Lots
*/
require_once 'HTML/BBCodeParser/Filter.php';
class HTML_BB_CodeParser_Filter_Object extends HTML_BBCodeParser_Filter {
var $_definedTags = array( 'object' => array ( 'htmlopen' => 'object',
'htmlclose' => 'object',
'allowed' => 'all',
'attributes' => array()
)
)
}
?>
extbbcode.php
<?php
/*
The test display page
*/
error_reporting(E_STRICT);
require_once('HTML/BBCodeParser.php');
$parser = new HTML_BBCodeParser();
$parser->addFilter('object');
$parser->setText('[b]bold[/b] [object]test[/object]');
$parser->parse();
$parsed = $parser->getParsed();
echo htmlentities($parsed, ENT_QUOTES). ' | ';
echo $parsed;
?>
عندما أقوم بعرض extbbcode.php أحصل على هذا الخطأ فقط
معايير صارمة: لا ينبغي أن يطلق على الطريقة غير المستقلة Pear :: GetStaticProperty () بشكل ثابت ، على افتراض أن هذا من السياق غير المتوافق في D: wamp bin php php5.3.0 pear html bbcodeparser.php on line 169
إذا قمت بتعليق $ arser-> addFilter ('Object') ؛ الخط ثم يعمل كما هو متوقع ، أي ينتج إخراج صالح. يمكنني أيضًا تحديد مرشح موجود ، أي
$parser->addFilter('basic');
$parser->addFilter('images');
إذا قمت بالاتصال بـ AddFilter باستخدام مرشح غير صالح (أي ، فإن الملف غير موجود) أحصل على رسالة "فشل تحميل مرشح $".
هل يمكن لأحد أن يكتشف ما أفعله خطأ؟ يبدو لي أن الكائن. لذا فإن مشكلتي هي بالتأكيد مع هذا الملف.
إذا كان لدى أي شخص خبرة مع هذه الفئة أو رسالة الخطأ هذه ويمكنني توجيهني في الاتجاه الصحيح ، سأكون سعيدًا جدًا :)
function addFilter($filter)
{
$filter = ucfirst($filter);
if (!array_key_exists($filter, $this->_filters)) {
$class = 'HTML_BBCodeParser_Filter_'.$filter;
@include_once 'HTML/BBCodeParser/Filter/'.$filter.'.php';
if (!class_exists($class)) {
PEAR::raiseError("Failed to load filter $filter", null, PEAR_ERROR_DIE);
}
$this->_filters[$filter] = new $class;
$this->_definedTags = array_merge(
$this->_definedTags,
$this->_filters[$filter]->_definedTags
);
}
}
تحرير: تمكنت من تشغيل الكمثرى على wamp المحلي الخاص بي ، حتى أتمكن من تبسيط السؤال عن طريق استبعاد مشكلة أخرى كنت أواجهها.
المحلول
يمكنك إضافة مرشحك مباشرة إلى فئة BBCode.
class HTML_BBCodeParser_Custom_Filter extends HTML_BBCodeParser
{
var $_definedTags =
array('block' => array( 'htmlopen' => 'blockquote',
'htmlclose' => 'blockquote',
'allowed' => 'all',
'attributes'=> array()
),
'line' => array( 'htmlopen' => 'hr',
'htmlclose' => '',
'allowed' => 'all',
'attributes'=> array()
),
);
}
$BBCodeParser = new HTML_BBCodeParser();
$FilterName = 'Custom_Filter';
$BBCodeParser->_filters[$FilterName] = new HTML_BBCodeParser_Custom_Filter();
$BBCodeParser->_definedTags = array_merge(
$BBCodeParser->_definedTags,
$BBCodeParser->_filters[$FilterName]->_definedTags);
echo $BBCodeParser->qparse("[block]This is a blockquote. [line][/block]");
الكشف: تم أخذ فئة العلامات المخصصة من هنا بينما تم أخذ الكود لوضع العلامات مباشرة في الفصل من رمز مصدر الكمثرى الفعلي (HTML_BBCODEPARSER :: addFilter).