/** * @param Mage_Widget_Model_Widget_Instance $model * @depends testGetWidgetConfig */ public function testGenerateLayoutUpdateXml(Mage_Widget_Model_Widget_Instance $model) { $this->assertEquals('', $model->generateLayoutUpdateXml('content')); $model->setId('test_id')->setPackageTheme('default/default'); $result = $model->generateLayoutUpdateXml('content'); $this->assertContains('<reference name="content">', $result); $this->assertContains('<block type="' . $model->getType() . '"', $result); }
/** * Generate layout update xml * * @param string $blockReference * @param string $position * @return string */ public function generateLayoutUpdateXml($blockReference, $templatePath = '') { $xml = parent::generateLayoutUpdateXml($blockReference, $templatePath); if ($xml && $this->getSortOrder() == 0 && strpos($xml, 'before=') === false) { $xml = str_replace('<block ', '<block before="-" ', $xml); } return $xml; }
/** * Prepare and save layout updates data * * @param Mage_Widget_Model_Widget_Instance $widgetInstance * @param array $pageGroupData * @return array of inserted layout updates ids */ protected function _saveLayoutUpdates($widgetInstance, $pageGroupData) { $write = $this->_getWriteAdapter(); $pageLayoutUpdateIds = array(); $storeIds = $this->_prepareStoreIds($widgetInstance->getStoreIds()); foreach ($pageGroupData['layout_handle_updates'] as $handle) { $this->_getWriteAdapter()->insert($this->getTable('core/layout_update'), array('handle' => $handle, 'xml' => $widgetInstance->generateLayoutUpdateXml($pageGroupData['block_reference'], $pageGroupData['template']), 'sort_order' => $widgetInstance->getSortOrder())); $layoutUpdateId = $this->_getWriteAdapter()->lastInsertId(); $pageLayoutUpdateIds[] = $layoutUpdateId; foreach ($storeIds as $storeId) { $this->_getWriteAdapter()->insert($this->getTable('core/layout_link'), array('store_id' => $storeId, 'area' => $widgetInstance->getArea(), 'package' => $widgetInstance->getPackage(), 'theme' => $widgetInstance->getTheme(), 'layout_update_id' => $layoutUpdateId)); } } return $pageLayoutUpdateIds; }
/** * Prepare and save layout updates data * * @param Mage_Widget_Model_Widget_Instance $widgetInstance * @param array $pageGroupData * @return array of inserted layout updates ids */ protected function _saveLayoutUpdates($widgetInstance, $pageGroupData) { $writeAdapter = $this->_getWriteAdapter(); $pageLayoutUpdateIds = array(); $storeIds = $this->_prepareStoreIds($widgetInstance->getStoreIds()); $layoutUpdateTable = $this->getTable('core/layout_update'); $layoutUpdateLinkTable = $this->getTable('core/layout_link'); foreach ($pageGroupData['layout_handle_updates'] as $handle) { $xml = $widgetInstance->generateLayoutUpdateXml($pageGroupData['block_reference'], $pageGroupData['template']); $insert = array('handle' => $handle, 'xml' => $xml); if (strlen($widgetInstance->getSortOrder())) { $insert['sort_order'] = $widgetInstance->getSortOrder(); } $writeAdapter->insert($layoutUpdateTable, $insert); $layoutUpdateId = $writeAdapter->lastInsertId($layoutUpdateTable); $pageLayoutUpdateIds[] = $layoutUpdateId; $data = array(); foreach ($storeIds as $storeId) { $data[] = array('store_id' => $storeId, 'area' => $widgetInstance->getArea(), 'package' => $widgetInstance->getPackage(), 'theme' => $widgetInstance->getTheme(), 'layout_update_id' => $layoutUpdateId); } $writeAdapter->insertMultiple($layoutUpdateLinkTable, $data); } return $pageLayoutUpdateIds; }