2009-10-12 8 views
1

Je suis en train d'ajouter des balises supplémentaires au package PEAR BBCodeParser http://pear.php.net/package/HTML_BBCodeParser/docs/latest/li_HTML_BBCodeParser.html, pour cela, je crois que je dois placer Object.php dans \ php5.3.0 \ PEAR \ pear \ HTML \ BBCodeParser \ Filtrer et appeler addFilter.Étendre 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; 
?> 

Quand je regarde extbbcode.php Je viens d'obtenir cette erreur

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

Si je commente le parser- de $ > addFilter ('objet'); ligne puis il fonctionne comme prévu, c'est à dire, produit une sortie valide. Je peux également spécifier un filtre existant, à savoir

$parser->addFilter('basic'); 
$parser->addFilter('images'); 

Basic.php, Images.php

Si je l'appelle addFilter avec un filtre non valide (c.-à, le fichier n'existe pas) je suis le « Impossible de charger le filtre $ filtre "message.

Quelqu'un peut-il repérer ce que je fais mal? Il me semble que Object.php est inclus, mais produit ces messages STRICT étranges. Donc, mon problème est définitivement avec ce fichier.

Si quelqu'un a une expérience avec cette classe ou ce message d'erreur et peut me diriger dans la bonne direction, je serais très heureux :)

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 
     ); 
    } 
} 

edit: a réussi à obtenir PEAR travailler sur mon WAMP local, donc je peux simplifier la question en écartant un autre problème que j'avais.

+0

Eh bien, j'ai finalement découvert comment récupérer un message d'erreur, plutôt que d'un écran vide. error_reporting (E_STRICT); Maintenant, je vois cette erreur: Strict Standards: Méthode non statique PEAR :: getStaticProperty() ne devrait pas être appelée statiquement, en supposant $ this du contexte incompatible dans D: \ wamp \ bin \ php \ php5.3.0 \ PEAR \ pear \ HTML \ BBCodeParser.php en ligne 169 Des idées? – aland

Répondre

1

Vous pouvez ajouter votre filtre directement à la classe 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]"); 

Divulgation: Les balises personnalisées de classe ont été prises à partir here tandis que le code pour mettre les balises directement dans la classe ont été prises à partir du code source de PEAR réelle (HTML_BBCodeParser :: addFilter).

+0

Merci beaucoup et désolé, il m'a fallu une éternité pour accepter cette réponse! – aland

Questions connexes