2009-10-12 7 views
1

PEAR 패키지 BBCodeParser http://pear.php.net/package/HTML_BBCodeParser/docs/latest/li_HTML_BBCodeParser.html에 추가 태그를 추가하려고합니다. \ php5.3.0 \ PEAR \ pear \ HTML \ BBCodeParser \ Filter에 Object.php를 넣고 호출해야한다고 생각합니다. addFilter.HTML_BBCodeParser_Filter를 확장하십시오.

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를 볼 때 나는 $의 parser-을 주석 처리하면 난 그냥이 오류

Strict Standards: Non-static method PEAR::getStaticProperty() should not be called statically, assuming $this from incompatible context in D:\wamp\bin\php\php5.3.0\PEAR\pear\HTML\BBCodeParser.php on line 169

를 얻을 수 > addFilter ('object'); 라인은 예상대로 작동합니다. 즉, 유효한 출력을 생성합니다. 또한 기존 필터를 지정할 수 있습니다, 즉, 나는 "필터 $를로드하지 못했습니다 얻을 Images.php

내가 잘못된 필터 AddFilter를 호출하면 (즉, 파일이 존재하지 않는)

Basic.php

$parser->addFilter('basic'); 
$parser->addFilter('images'); 
, 필터 "메시지가 표시됩니다.

누군가 내가 잘못하고있는 것을 발견 할 수 있습니까? Object.php가 포함되어 있지만 그 이상한 STRICT 메시지를 생성합니다. 그래서 내 문제는 그 파일과 분명히 같다. PEAR를 얻을 수 있었다 : 사람이이 클래스에 대한 경험 또는 오류 메시지가 올바른 방향으로 날 지점 수 있다면

, 나는

BBCodeParser.php 편집

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에서 작업 중이므로 다른 문제를 배제하여 질문을 단순화 할 수 있습니다.

+0

글쎄, 마침내 빈 화면보다는 오류 메시지를 다시 얻는 방법을 발견했습니다. error_reporting (E_STRICT); 엄격한 표준 : 비 정적 방법 PEAR :: getStaticProperty()는 D : \ wamp \ bin \ php \ php5.3.0 \ PEAR \ pear의 호환되지 않는 컨텍스트에서 $ this를 정적으로 호출해서는 안됩니다. \ HTML \ BBCodeParser.php on line 169 아이디어가 있으십니까? – aland

답변

1

필터를 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]"); 

공개는 : 코드가 클래스에 직접 태그를 넣어하는 동안 사용자 정의 태그 클래스는 실제 PEAR 소스 코드 (HTML_BBCodeParser :: AddFilter를)에서 찍은 here에서 촬영되었다.

+0

대단히 고마워요. 그리고이 대답을 받아들이는 데 영원히 걸렸습니다. – aland