Moteur de vue perso pour vues laravel

Il est possible d’ajouter un,des moteurs dans le système de Vues de Blade. Quoi c’est un moteur ?

Une classe qui générera une sortie en fonction d’un fichier source; normalement un fichier blade en fichier html mais pourquoi pas du bbcode ou xml vers du html ; ou du html vers du xml ?
Pour faire simple, un moteur n’est qu’une classe qui implémente l’interface
EngineInterface->get( $path, array $data = array() );
Lorsque que l’on fait le rapprochement avec la commande blade :
@include ( ‘arbre::code’ , array(‘attr’=>1)  )
c’est limpide, je vais écrire mon propre moteur :)

Je suis programmateur php! donc j’ai besoin d’afficher du code dans mon site web; écrire des vues blade du type :

<b>Regardez</b> mon code super génial :
@include ( 'code.php.bonjour' )

Notre super! moteur(PhpSourceEngine) qui transforme du code php en html :

<?php namespace papajoker\Viewphp;

use Illuminate\View\Engines\EngineInterface;

class PhpSourceEngine implements EngineInterface
{
   public function get($path, array $data = array()) {
	return "<style>code.php,code.php * {background-color:#eee}</style>\n".
	'<code class="php">'.highlight_file( $path , true).'</code>';
   }
}

Dernière étape, la plus facile,  déclarer notre moteur dans View, et l’attacher a une extension (ici .phps). ViewphpServiceProvider.php a été généré automatiquement par la commande artisan workbench :)

<?php namespace Papajoker\Viewphp;

use Illuminate\Support\ServiceProvider;

class ViewphpServiceProvider extends ServiceProvider {

	protected $defer = false;

	public function register()
	{
		list($app, $view) = array($this->app, $this->app['view']);

		$view->addExtension('phps', 'phpsources', function() use ($app) {
			return new PhpSourceEngine();
		});

		$app->singleton('markdown', 'Papajoker\Viewphp\MarkdownExtra');
		$view->addExtension('md', 'markdown', function() use ($app) {
			return new MarkdownEngine($app['markdown']);
		});
	}

}

Pour faire un peu sérieux ( PhpSourceEngine ;) ), j’ai déclaré une autre extension « md » attachée au moteur  MarkdownEngine; voici /views/testarray.md, très parlant.

#tableaux en php
---------
## mon array :

<?php
  $a=array('a','b');
  print_r($a);
?>

dans ma vue blade, je fait un simple include ( sans préciser l’extension) :

@include ( 'testarray' )

Nous avons du code php interprété dans notre fichier markdown ! magique ? En faut non il suffit de surcharger PhpEngine :

<?php namespace papajoker\Viewphp;

use Illuminate\View\Engines\PhpEngine;

class MarkdownEngine extends PhpEngine {

	protected $parser;

	public function __construct($parser) {
		$this->parser = $parser;
	}

	public function get($path, array $data = array()) 	{
		$contents = $this->evaluatePath($path, $data);
		return $this->parser->transform( $contents );
		/* ou return sans traitement php
		return $this->parser->transform( \File::get($path) );
		*/
	}
}

Désolé ci je ne vous fourni pas le parseur MD :-P (MarkdownExtra.php).

Vous désirez écrire votre site en BBcode ? :-o faites votre BbEngine
Ecrire en Xml ? faites vous un XsltEngine 8-)

 

 

 

Share Button

Vous devriez aimer...