Last active
August 29, 2015 13:58
-
-
Save rmarscher/10020347 to your computer and use it in GitHub Desktop.
Joomla! Template Module Positions In Lithium PHP
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// app/views/layouts/default.html.php | |
<!doctype html> | |
<html> | |
<head> | |
<?php echo $this->html->charset();?> | |
<title><?php echo $this->title(); ?></title> | |
</head> | |
<body> | |
<?php echo $this->modules->top(); ?> | |
<?php echo $this->content(); ?> | |
<?php echo $this->modules->bottom(); ?> | |
</body> | |
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// app/views/pages/home.html.php | |
<?=$this->_render("element", "elementTest"); ?> | |
<?php $this->modules->top("element", 'topTest'); ?> | |
<?php $this->modules->bottom("element", 'bottomTest'); ?> | |
<h1>Hi there. I'm the main content.</h1> | |
<?php $this->modules->top("simple", "<p>Maybe we can just put some html in there...</p>"); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace app\extensions\helper; | |
use lithium\core\Libraries; | |
use lithium\template\view\TemplateException; | |
use lithium\template\View; | |
/** | |
* An implementation of Joomla! template module positions for Lithium. | |
* | |
* Here is how you can render to a module position from one of your inner templates: | |
* {{{ | |
* $this->modules->bottom("element", 'bottomTest'); | |
* $this->modules->top("simple", "<p>Maybe we can just put some html in there...</p>"); | |
* }}} | |
* | |
* To do the same from inside another helper, use `$this->_context->modules()`. | |
* | |
* Then in your layout file, output the module in the desired location: | |
* {{{ | |
* <body> | |
* <?php echo $this->modules->top(); ?> | |
* <?php echo $this->content(); ?> | |
* <?php echo $this->modules->bottom(); ?> | |
* </body> | |
* }}} | |
* | |
* @see http://docs.joomla.org/Creating_a_basic_Joomla!_template#Body_Section | |
*/ | |
class Modules extends \lithium\template\Helper { | |
protected $_rendered = array(); | |
protected $_simpleView = null; | |
public function __call($name, $params) { | |
return $this->position($name, $params); | |
} | |
public function position($name, $params) { | |
if (empty($this->_rendered[$name])) { | |
$this->_rendered[$name] = ""; | |
} | |
switch (count($params)) { | |
case 0: | |
return $this->_rendered[$name]; | |
case 1: | |
return $this->_rendered[$name] .= $this->render($params[0]); | |
case 2: | |
return $this->_rendered[$name] .= $this->render($params[0], $params[1]); | |
case 3: | |
return $this->_rendered[$name] .= $this->render($params[0], $params[1], $params[2]); | |
case 4: | |
return $this->_rendered[$name] .= $this->render($params[0], $params[1], $params[2], $params[3]); | |
case 5: | |
return $this->_rendered[$name] .= $this->render($params[0], $params[1], $params[2], $params[3], $params[4]); | |
default: | |
return $this->_rendered[$name] .= call_user_func_array(array(&$this, $method), $params); | |
} | |
} | |
/** | |
* Shortcut method used to render elements and other nested templates for named module blocks. | |
* | |
* @see lithium\template\View::render() | |
* @param string $type The type of template to render, usually either `'element'` or | |
* `'template'`. Indicates the process used to render the content. See | |
* `lithium\template\View::$_processes` for more info. | |
* There's an additional special option here for the Modules helper. | |
* Use `"simple"` to render a string template rather than from a file. | |
* @param string $template The template file name. For example, if `'header'` is passed, and | |
* `$type` is set to `'element'`, then the template rendered will be | |
* `views/elements/header.html.php` (assuming the default configuration). | |
* If `$type === 'simple'`, this should be the template content. | |
* @param array $data An array of any other local variables that should be injected into the | |
* template. By default, only the values used to render the current template will | |
* be sent. If `$data` is non-empty, both sets of variables will be merged. | |
* @param array $options Any options accepted by `template\View::render()`. | |
* @return string Returns a the rendered template content as a string. | |
*/ | |
public function render($type, $template, array $data = array(), array $options = array()) { | |
$view = $this->_context->view(); | |
if ($type !== "simple") { | |
return $view->render($type, $data, compact('template') + $options); | |
} | |
if (!$this->_simpleView) { | |
$this->_simpleView = new View(array('loader' => 'Simple', 'renderer' => 'Simple')); | |
} | |
$element = $template; | |
return $this->_simpleView->render('element', $data, compact('element') + $options); | |
} | |
} | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment