function parse($html = null, $blockName = 'document', $blockParams = null) { // set defaults $blockParams = (array) $blockParams; $blockParams += array('options' => array('fx' => 'backout'), 'menuClass' => 'lavaLampNoImage', 'domId' => Sl::uniqid(), 'recursive' => 0); $this->vars['domId'] = $id = $blockParams['domId']; // load & configure lavalamp $options = $blockParams['options'] ? json_encode($blockParams['options']) : ''; SlConfigure::write('Asset.css.lavalamp', 'lavalamp/lavalamp_test'); SlConfigure::write('Asset.js.footer.lavalamp', 'lavalamp/jquery.lavalamp.min'); SlConfigure::write("Asset.js.ready.{$id}", "\$('#{$id}').lavaLamp({$options});"); // custom fx easing effects if (!in_array($blockParams['options']['fx'], array('swing', 'linear'))) { SlConfigure::write('Asset.js.footer.easing', 'lavalamp/jquery.easing.min'); } unset($blockParams['options']); // construct DOM self::$parseCallStack[] = $this; $html = Pheme::init('Menu')->parse($html, $blockName, $blockParams); array_pop(self::$parseCallStack); return $html; }
function parse($html = null, $blockName = 'document', $blockParams = null) { // set defaults $blockParams = (array) $blockParams; $blockParams += array('type' => 'default', 'supersubs' => array('extraWidth' => 1.5), 'options' => array(), 'menuClass' => 'sf-menu', 'domId' => Sl::uniqid()); $id = $blockParams['domId']; $blockParams['menuClass'] .= " {$id}"; // load & configure supersubs if ($blockParams['supersubs']) { $ssOptions = json_encode($blockParams['supersubs']); $ssKey = "supersubs_{$id}"; SlConfigure::write("Asset.js.footer.supersubs", 'superfish/js/supersubs'); SlConfigure::write("Asset.js.ready.{$ssKey}", "\$('ul.{$id}').supersubs({$ssOptions});"); } // load & configure superfish $sfOptions = $blockParams['options'] ? json_encode($blockParams['options']) : ''; $sfKey = "superfish_{$id}"; SlConfigure::write("Asset.css.superfish", 'superfish/css/superfish'); SlConfigure::write("Asset.js.footer.superfish", 'superfish/js/superfish'); SlConfigure::write("Asset.js.ready.{$sfKey}", "\$('ul.{$id}').superfish({$sfOptions});"); // alternative styles switch ($blockParams['type']) { case 'vertical': $blockParams['menuClass'] .= " sf-vertical"; SlConfigure::write("Asset.css.superfishVertical", 'superfish/js/superfish-vertical'); break; case 'navbar': $blockParams['menuClass'] .= " sf-navbar"; SlConfigure::write("Asset.css.superfishNavbar", 'superfish/js/superfish-navbar'); break; } unset($blockParams['type']); unset($blockParams['supersubs']); unset($blockParams['options']); // construct DOM return Pheme::init('Menu')->parse($html, $blockName, $blockParams); }
function parse($html = null, $blockName = 'document', $blockParams = null) { $blockParams = (array) $blockParams; $blockParams += array('id' => false, 'skin' => null); if ($blockName === 'NodeIndex') { $skin = empty(SL::getInstance()->view->params['named']['skin']) ? Inflector::camelize($blockParams['skin']) : Inflector::camelize(SL::getInstance()->view->params['named']['skin']); $skin = $skin && Pheme::init("NodeIndex{$skin}") ? "NodeIndex{$skin}" : "NodeIndexDefault"; } else { $skin = $blockName; } $this->vars['ajaxId'] = SL::uniqid(); if ($blockParams['id'] === false) { $nodes = $this->_getVar('nodes'); } else { if ($blockParams['id'] === 0) { $blockParams['id'] = null; } $nodes = SlNode::find('all', array('conditions' => array('CmsNode.parent_id' => $blockParams['id'], 'CmsNode.visible' => true), 'order' => array('CmsNode.lft' => 'asc'), 'auth' => 'index')); } if ($nodes) { foreach ($nodes as &$node) { $node['href'] = h(SlNode::url($node)); } $this->blocks["loop"]->params[0] =& $nodes; if ($skin != $blockName) { PhemeParser::$parseCallStack[] = Pheme::get($skin); } PhemeParser::$parseCallStack[] = Pheme::get('NodeView'); $html = parent::parse($html, $skin); array_pop(PhemeParser::$parseCallStack); if ($skin != $blockName) { array_pop(PhemeParser::$parseCallStack); } return $html; } }
{loop} {if("var":"link")} {MenuLink}{$text}{/MenuLink} {else} {$text} {/if} {!sep:loop} | {/loop} <?php Pheme::init('Menu'); Pheme::registerOutputBuffer('SimpleMenu', 'Menu', true);
function parse($html = null, $blockName = 'document', $blockParams = null) { if ($blockName == 'NodeTeaser' || $blockName == 'NodeBody') { $skin = $this->_getVar('CmsNode.model'); if ($skin) { $plugin = $this->_getVar('CmsNode.plugin'); } if (!empty($plugin)) { $skin = Pheme::init("{$plugin}.{$blockName}{$skin}") ? "{$blockName}{$skin}" : "{$blockName}Default"; } else { $skin = $skin && Pheme::init("{$blockName}{$skin}") ? "{$blockName}{$skin}" : "{$blockName}Default"; } } else { $skin = $blockName; } if ($skin != $blockName) { PhemeParser::$parseCallStack[] = Pheme::get($skin); $result = parent::parse($html, $skin); array_pop(PhemeParser::$parseCallStack); return $result; } else { return parent::parse($html, $skin); } }
<?php /** * Contact form node body */ Pheme::init('Cms.NodeView'); ?> <div class="sl-node-body"> {if("var":"CmsNode.body")} {var}CmsNode.markdown_body{/var} {else} {ContactForm/} {/if} </div> <?php Pheme::registerOutputBuffer('NodeBodyCmsContactForm', new NodeBodyParser(), 'NodeView'); // ================================ ContactForm =================================== ?> <div class="sl-contact-form"> <form method="post" action="{$actionUrl}" id="{$domId}"> {loop} {$inputHtml} {/loop} <button>{t}Send{/t}</button> </form> </div> <?php class ContactFormParser extends PhemeParser { function __construct($rules = array(), $options = array()) {
function parse($html) { $items = explode(',', parent::parse($html)); foreach ($items as $item) { Pheme::init(trim($item)); } }
/** * Image ('link' => true, 'id' => null, 'index' => null, 'filter' => 'thumb', 'var' => 'Image', * 'width' => null, 'height' => null, 'method' => 'fitCrop', 'gravity' => 'center', 'rel' => 'prettyPhoto') * $href, $align, $title, $src * * ImageGallery ('link' => true, 'filter' => 'thumb', * 'width' => null, 'height' => null, 'method' => null) * loop -> GalleryImage * * The method param could be 'fitCrop', 'fitInside', 'fitOutside' or any other method of ImageMedium * * ----------------------------------------------------------------------------- * The image is a prettyPhoto-friendly div with an IMaGe that may be aligned as desired */ Pheme::init('JqueryColorbox'); ?> {JqueryColorbox/} <div class='sl-image {if("var":"align")}sl-align-{$align}{/if}'> {if("var":"href")} <a rel="{$rel}" href="{$href}" title="{$title}"> <img src="{webroot}{$src}{/webroot}" alt="{$title}" /> </a> {else} <img src="{$src}" alt="{$title}" /> {/if} </div> <?php /** * Show an image (from current node or any from DB) */
<?php /** * Columns */ Pheme::init('Blocks', 'SiteElements'); ?> {Column("id":"Left","width":"33.3")/} {Column("id":"Content","width":"33.4")/} {Column("id":"Right","width":"33.3")/} <div class="sl-clear"> </div> <?php class ColumnsParser extends PhemeParser { /** * Array of blocks, containing: ..., array($parsedHtml, $blockParams), ... * * @var array */ public $columns = array(); function parse($html = null, $blockName = 'document', $blockParams = null) { $blockParams = (array) $blockParams; $blockParams += array('showEmpty' => false, 'unit' => '%'); $html = parent::parse($html, $blockName); // span across empty columns $lastCol = null; $extraWidth = $extraColspan = 0; foreach ($this->columns as &$col) { $colHtml = trim($col[0]); if (empty($colHtml) && !$blockParams['showEmpty']) {