/** * @param Mage_Core_Block_Template $parent * @param $items */ protected function _createChildBlocksRecursively($parent, $items) { foreach ($items as $key => $item) { $block = $this->getLayout()->createBlock('manapro_filtertree/item', $parent->getNameInLayout() . '_' . $key, array('item' => $item, 'filter' => $this, 'template' => 'manapro/filtertree/item.phtml', 'show_in_filter' => $this->getShowInFilter())); $parent->setChild($parent->getNameInLayout() . '_' . $key, $block); $this->_createChildBlocksRecursively($block, $item->getItems()); } }
/** * Get the active layout handles for this block and any child blocks * * This is probably kind of slow since it uses a bunch of xpath searches * but this was the easiest way to get the info needed. Should be a target * for future optimization * * There is an issue with encoding the used handles in the URL, if the used * handles change (ex customer logs in), the cached version of the page will * still have the old handles encoded in it's ESI url. This can lead to * weirdness like the "Log in" link displaying for already logged in * visitors on pages that were initially visited by not-logged-in visitors. * Not sure of a solution for this yet. * * Above problem is currently solved by EsiController::_swapCustomerHandles() * but it would be best to find a more general solution to this. * * @param Mage_Core_Block_Template $block * @return array */ protected function _getBlockLayoutHandles($block) { Varien_Profiler::start('turpentine::observer::esi::_getBlockLayoutHandles'); $layout = $block->getLayout(); $layoutXml = Mage::helper('turpentine/esi')->getLayoutXml(); $activeHandles = array(); // get the xml node representing the block we're working on (from the // default handle probably) $blockNode = current($layout->getNode()->xpath(sprintf('//block[@name=\'%s\']', $block->getNameInLayout()))); $childBlocks = Mage::helper('turpentine/data')->getChildBlockNames($blockNode); foreach ($childBlocks as $blockName) { foreach ($layout->getUpdate()->getHandles() as $handle) { // check if this handle has any block or reference tags that // refer to this block or a child block, unless the handle name // is blank if ($handle !== '' && $layoutXml->xpath(sprintf('//%s//*[@name=\'%s\']', $handle, $blockName))) { $activeHandles[] = $handle; } } } if (!$activeHandles) { $activeHandles[] = 'default'; } Varien_Profiler::stop('turpentine::observer::esi::_getBlockLayoutHandles'); return array_unique($activeHandles); }
/** * Check to see if the block is an add-to-cart block * * @param Mage_Core_Block_Template $oBlock * @return bool */ public function isBlockAddToCartBlock($oBlock) { $aAddToCartBlockClassNames = $this->getAddToCartBlockLayoutNames(); return in_array($oBlock->getNameInLayout(), $aAddToCartBlockClassNames); }