Skip to content

Instantly share code, notes, and snippets.

@woodworker
Created September 23, 2013 20:19
Show Gist options
  • Select an option

  • Save woodworker/6676307 to your computer and use it in GitHub Desktop.

Select an option

Save woodworker/6676307 to your computer and use it in GitHub Desktop.
Rendering Infrastructure
<?php
namespace p2ee\PartletPageSystem\Render;
use p2ee\Partlets\Partlet;
abstract class AbstractRenderer {
abstract function render(Partlet $partlet);
protected function resolveContext($data){
$context = [];
foreach ($data as $key => $item) {
if ($item instanceof Partlet) {
$context[$key] = $this->render($item);
} else if( is_array($item) ) {
$context[$key] = $this->resolveContext($item);
} else {
$context[$key] = $item;
}
}
return $context;
}
}
<?php
namespace p2ee\PartletPageSystem\Render\Renderer;
use p2ee\Partlets\Partlet;
use p2ee\PartletPageSystem\Render\AbstractRenderer;
/**
* @service
*/
class JsonRenderer extends AbstractRenderer {
public function render(Partlet $partlet) {
$data = $partlet->getData();
$renderData = $this->resolveContext($data);
$file = $partlet->getRootFolder() . $partlet->getTemplate();
$content = file_get_contents($file);
return [
'partletId' => $partlet->getId(),
'data' => $renderData,
'template' => $content,
'view' => $partlet->getView(),
'style' => $partlet->getStyle(),
];
}
}
<?php
namespace p2ee\PartletPageSystem\Render\Renderer;
use p2ee\PartletPageSystem\Render\AbstractRenderer;
use p2ee\PartletPageSystem\Render\AssetManager;
use p2ee\Partlets\Partlet;
use p2ee\Preparables\Preparer;
use rg\injektor\DependencyInjectionContainer;
/**
* @service
*/
class MustacheRenderer extends AbstractRenderer {
/**
* @var \p2ee\PartletPageSystem\Render\AssetManager
*/
protected $assetManager;
/**
* @var \Mustache_Engine
*/
protected $mustacheEngine;
/**
* @var \p2ee\Preparables\Preparer
*/
protected $preparer;
/**
* @inject
* @param \Mustache_Engine $mustacheEngine
* @param AssetManager $assetManager
* @param Preparer $preparer
*/
public function __construct(\Mustache_Engine $mustacheEngine, AssetManager $assetManager, Preparer $preparer) {
$this->assetManager = $assetManager;
$this->mustacheEngine = $mustacheEngine;
$this->preparer = $preparer;
}
public function render(Partlet $partlet) {
if($partlet->isDeactivated()){
$template = '<div style="display: none" class="partlet-error">';
$template.= ' <div>{{partletId}} was deactivated:</div>';
$template.= ' {{#deactivationInfo}}';
$template.= ' <div class="error-msg">{{.}}</div>';
$template.= ' {{/deactivationInfo}}';
$template.= '</div>';
$errorContext = [];
$errorContext['deactivationInfo'] = $partlet->getDeactivationInfo();
$errorContext['partletId'] = $partlet->getId();
return $this->mustacheEngine->render($template, $errorContext);
}
$data = $partlet->getData();
$mustacheContext = $this->resolveContext($data);
$mustacheContext['partletId'] = $partlet->getId();
if ($partlet->getView()) {
$this->assetManager->registerView($partlet->getView(), $partlet->getId(), $mustacheContext);
}
if ($partlet->getStyle()) {
$this->assetManager->registerStyle($partlet->getStyle());
}
$file = $partlet->getRootFolder() . $partlet->getTemplate();
$templateContent = file_get_contents($file);
return $this->mustacheEngine->render($templateContent, $mustacheContext);
}
}
<?php
namespace p2ee\PartletPageSystem\Render\Renderer;
use p2ee\Partlets\Partlet;
use p2ee\PartletPageSystem\Render\AbstractRenderer;
/**
* @service
*/
class JsonRenderer extends AbstractRenderer {
public function render(Partlet $partlet) {
$data = $partlet->getData();
$renderData = $this->resolveContext($data);
$file = $partlet->getRootFolder() . $partlet->getTemplate();
$content = file_get_contents($file);
return [
'partletId' => $partlet->getId(),
'data' => $renderData,
'template' => $content,
'view' => $partlet->getView(),
'style' => $partlet->getStyle(),
];
}
}
<?php
namespace p2ee\PartletPageSystem\Render\Renderer;
use p2ee\PartletPageSystem\Render\AbstractRenderer;
use p2ee\PartletPageSystem\Render\AssetManager;
use p2ee\Partlets\Partlet;
use p2ee\Preparables\Preparer;
use rg\injektor\DependencyInjectionContainer;
/**
* @service
*/
class MustacheRenderer extends AbstractRenderer {
/**
* @var \p2ee\PartletPageSystem\Render\AssetManager
*/
protected $assetManager;
/**
* @var \Mustache_Engine
*/
protected $mustacheEngine;
/**
* @var \p2ee\Preparables\Preparer
*/
protected $preparer;
/**
* @inject
* @param \Mustache_Engine $mustacheEngine
* @param AssetManager $assetManager
* @param Preparer $preparer
*/
public function __construct(\Mustache_Engine $mustacheEngine, AssetManager $assetManager, Preparer $preparer) {
$this->assetManager = $assetManager;
$this->mustacheEngine = $mustacheEngine;
$this->preparer = $preparer;
}
public function render(Partlet $partlet) {
if($partlet->isDeactivated()){
$template = '<div style="display: none" class="partlet-error">';
$template.= ' <div>{{partletId}} was deactivated:</div>';
$template.= ' {{#deactivationInfo}}';
$template.= ' <div class="error-msg">{{.}}</div>';
$template.= ' {{/deactivationInfo}}';
$template.= '</div>';
$errorContext = [];
$errorContext['deactivationInfo'] = $partlet->getDeactivationInfo();
$errorContext['partletId'] = $partlet->getId();
return $this->mustacheEngine->render($template, $errorContext);
}
$data = $partlet->getData();
$mustacheContext = $this->resolveContext($data);
$mustacheContext['partletId'] = $partlet->getId();
if ($partlet->getView()) {
$this->assetManager->registerView($partlet->getView(), $partlet->getId(), $mustacheContext);
}
if ($partlet->getStyle()) {
$this->assetManager->registerStyle($partlet->getStyle());
}
$file = $partlet->getRootFolder() . $partlet->getTemplate();
$templateContent = file_get_contents($file);
return $this->mustacheEngine->render($templateContent, $mustacheContext);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment