Weitere ähnliche Inhalte Ähnlich wie Применение компонент-ориентированной архитектуры для написания Magento Extensions (20) Mehr von Magecom Ukraine (9) Применение компонент-ориентированной архитектуры для написания Magento Extensions2. INTRO Vitaly Korotun Associate Director, Professional Services, Kiev vitaly@magento.com Тема: Применение Компонентно-Ориентированой Архитектуры для написания расширений 5. Преимущества Компонентно-Ориентированной Архитектуры Независимость расширений Компоненты являются неделимыми единицами системы, компонентная модель предписывает, как именно они должны взаимодействовать, фреймворк регламентирует их архитектуру и предоставляет весь обслуживающий вспомогательный функционал. Улучшение предсказуемости системы Компонентная модель регламентирует правила проектирования, которые насильственного навязываются всем компонентам. Это означает, что единообразие различных глобальных свойств способствуют увеличению таких качественных показателей, как масштабируемость, безопасность, конфигурируемость и т.д. 24. Когда все пользовательские модули делают то, что они должны непосредственно внутри блоков или даже внутри шаблонов. 28. Если вы собираетесь изменить поведение во время какого-то пользовательского действия, лучше всего внедрить логику в контроллере. 29. Если вы собираетесь изменять данные, используйте перекрытия моделей или их вспомогательных спутников.Spy Games 36. Компонент-ориентированная разработка Magento Extension Перегрузка классов $product = Mage::getModel('catalog/product'); <config> /****/ <global> <models> <catalog> <!-- catalog models class group declaration--> <class>Mage_Catalog_Model</class> <!-- catalog resource models class group declaration--> <resourceModel>catalog_resource_eav_mysql4</resourceModel> </catalog> </models> </global> /****/ </config> 37. Компонент-ориентированная разработка Magento Extension Декларация новой группы классов class My_Module_Factory { public static function getPlugin($pluginClass = '', $arguments = array()) { $pluginClass = trim($pluginClass); if (strpos($pluginClass , '/')===false) { $className = $modelClass; } $className = Mage::getConfig()->getGroupedClassName('plugin', $pluginClass); if (class_exists($className)) { return new $className($arguments); } else { #throw Mage::exception('My_Module', ‘***’); return false; } } } $plugin = My_Module_Factory ::getPlugin(‘my_module/some_class'); 38. Компонент-ориентированная разработка Magento Extension Перехват/Переадресация вызовов <frontend> <routers> <checkout> <args> <modules> <custom_checkout before="Mage_Checkout">Custom_Checkout</custom_checkout> </modules> </args> </checkout> </routers> <layout> <updates> <custom_checkout module="Custom_Checkout"> <file>custom/checkout.xml</file> </custom_checkout> </updates> </layout> </frontend> app/code/local/Custom/Checkout/ ./controllers/OnepageController.php http://your-domain.com/checkout/onepage/billing http://your-domain.com/checkout/onepage/shipping http://your-domain.com/checkout/onepage/customstep 39. Компонент-ориентированная разработка Magento Extension Интернационализация (i18n) echo Mage::helper('catalog')->__('Text Message'); <frontend> ... <translate> <modules> <Mage_Catalog> <files> <default>Mage_Catalog.csv</default> </files> </Mage_Catalog> </modules> </translate> ... </frontend> design/[AREA]/[PACKAGE]/[THEME]/locale/[LOCALE_CODE] ./translate.csv 40. Компонент-ориентированная разработка Magento Extension Layout XML <layout> <default translate="label" module="page"> <block type="page/html" name="root" output="toHtml" template="page/3columns.phtml"> <block type="page/html_head" name="head" as="head"> ... </block> <block type="core/text_list" name="content" as="content" translate="label"> ... </block> <block type="page/html_footer" name="footer" as="footer" template="page/html/footer.phtml"> ... </block> </block> </default> ... </layout> <layout> ... <PRODUCT_TYPE_simple translate="label" module="catalog"> <label>Catalog Product View (Simple)</label> <reference name="product.info"> <block type="catalog/product_view_type_simple" name="product.info.simple" as="product_type_data" template="catalog/product/view/type/default.phtml"> <block type="core/text_list" name="product.info.simple.extra" as="product_type_data_extra" translate="label"> <label>Product Extra Info</label> </block> </block> </reference> </PRODUCT_TYPE_simple> ... </layout> <layout> ... <catalog_product_view translate="label"> <reference name="root"> <action method="setTemplate"><template>page/2columns-right.phtml</template></action> </reference> <reference name="head"> <action method="addJs"><script>varien/product.js</script></action> </reference> <reference name="content"> <block type="catalog/product_view" name="product.info" template="catalog/product/view.phtml"> </reference> </catalog_product_view> ... </layout>