Oui 
Je dois laisser mes utilisateurs saisir des textes avec un peu de mise en page. je suis parti sur le bbcode. Le parser bbcode livré avec le ZF fait le boulot correctement.
Maintenant, je veux laisser mes utilisateurs insérer des liens internes et externes. Là pour les liens externes, le bbcode est assez limité niveau lien car on ne peut pas indiquer d'attribut 'target'.
Pour les liens internes, j'aurais voulu un tag du type
[route label="mon lien interne"]module/controller/action[/route]
dont le rendu serait :
<a href="module/controller/action">mon lien interne</a>
J'y suis arrivé avec un parser bbcode mais maintenant que je me redirige vers un texte en HTML, mon tag bbcode ne fonctionnera pas (car le parser bbcode échappe les tags HTML trouvés).
donc la situation actuelle:
- mon texte sera de l'HTML
- je cherche à faire la même chose que précédemment mais avec un tag HTML 'route' qui ferait la même chose
1 2 3 4 5
| <route label="mon lien interne">module/controller/action</route>
vers
<a href="module/controller/action">mon lien interne</a> |
mais je ne trouve pas avec le ZF la même possibilité d'ajouter un tag à un parseur HTML ou XML, un code qui s'apparenterait à cela :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
class TOTO_Markup_Renderer_Html_Route extends Zend_Markup_Renderer_Html_Url
{
public function convert(Zend_Markup_Token $token, $text)
{
if($token->hasAttribute('label')) $label = $token->getAttribute('label');
else $label = $text;
list($module, $controller, $action) = explode('/', $text);
$urlHelper = Zend_Controller_Action_HelperBroker::getStaticHelper('url');
return '<a href="'.$urlHelper->url(array('module' => $module , 'controller' => $controller , 'action' => $action) , null , true).'">'.$label.'</a>';
}
}
et dans mon view helper
$parser = Zend_Markup::factory('html'); //ou xml
$parser->addMarkup( 'route' , Zend_Markup_Renderer_Html::TYPE_CALLBACK ,
array('callback' => new TOTO_Markup_Renderer_Html_Route,
'group' => 'inline'
)
);
return $parser->render($mystring); |
voila, j'espère avoir été plus clair et merci à ceux qui se pencheront là-dessus.
S'il y a une autre méthode que le zend_markup, je suis preneur aussi.
Partager