Um das hier beschriebene Pushing und Stacking ohne die Blade Syntax umsetzen zu können, nutze ich in Magento folgenden Helper:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
<?php class Myvendor_Core_Helper_Data extends Mage_Core_Helper_Abstract { /** * push string to session to send it to the browser at a later moment * @see laravel blade template 'stacking' * @see self::endStack() * @see self::getStack() * @see self::unStack() * * */ public function startStack() { ob_start(); } public function endStack($key) { $buffer = ob_get_contents(); ob_end_clean(); $session = Mage::getSingleton("core/session"); $key = 'stack-' . $key; if (!$session->getData($key)) { $data = [$buffer]; } else { $data = $session->getData($key); $data[] = $buffer; } $session->setData($key, $data); } public function hasStack($key) { return Mage::getSingleton("core/session")->getData('stack-' . $key) ? true : false; } public function unStack($key) { $session = Mage::getSingleton("core/session"); $key = 'stack-' . $key; $output = $session->getData($key); $session->unsetData($key); echo implode("", $output); return; } /** * end of stacking functions here * * */ } |
Im Template angewendet sieht das dann so aus. Dies kann beliebig oft wiederholt werden, die Einträge werden alle in der Session zwischengespeichert, um diese dann in der korrekten Reihenfolge am Ende des Dokuments wieder auszuliefern. Zu diesem Zeitpunkt sollten dann alle nötigen Bibliotheken bereits geladen sein.
1 2 3 |
<?php $this->helper('myvendor_core')->startStack(); ?> jshelpers.responsiveTabs("#product-tabs"); <?php $this->helper('myvendor_core')->endStack('footerjs'); ?> |
In der zweiten Zeile steht JavaScript ohne <script> Tags? Diese werden erst beim Stacking im footer außenherum gewrappt:
1 2 3 4 5 6 7 8 |
<?php /* js that has beed stacked during layout rendering will be output here */ ?> <?php if ($this->helper('myvendor_core')->hasStack('footerjs')): ?> <script type="text/javascript"> jQuery(function() { <?php $this->helper('myvendor_core')->unStack('footerjs') ?> }); </script> <?php endif ?> |