Upload
snowdog
View
127
Download
2
Embed Size (px)
Citation preview
Magento 2.xSamo życieKamil Balwierz
● 17 listopad 2015
● 228 000 pobrań
● 800 sklepów online
Frontend
● minifikacja HTML
● jQuery
● RequireJS
● Knockout
● LESS
Bez Varnish
Varnish + ESI
Varnish + Knockout
HTML 500ms
HTML 350msHTML 50ms +
HTML 50ms
JSON 350ms(pobierz tylko raz)
Frontend
● minifikacja HTML
● jQuery
● RequireJS
● Knockout
● LESS
SnowdogApps/magento2-frontools
SnowdogApps/magento2-theme-blank-sass
Backend Magento 2 ● composer
● Magento Marketplace
● Zend Framework
● Zend Framework 2
● Symfony
● magento/framework
Service Contracts ● interface PHP
● @api
<?phpnamespace Magento\Catalog\Api;/** * @api */ interface ProductRepositoryInterface{ /** * Create product * * @param \Magento\Catalog\Api\Data\ProductInterface $product * @param bool $saveOptions * @return \Magento\Catalog\Api\Data\ProductInterface * @throws \Magento\Framework\Exception\InputException * @throws \Magento\Framework\Exception\StateException * @throws \Magento\Framework\Exception\CouldNotSaveException */ public function save(\Magento\Catalog\Api\Data\ProductInterface $product, $saveOptions = false); /** * Get info about product by product SKU * * @param string $sku * @param bool $editMode * @param int|null $storeId * @param bool $forceReload * @return \Magento\Catalog\Api\Data\ProductInterface * @throws \Magento\Framework\Exception\NoSuchEntityException */ public function get($sku, $editMode = false, $storeId = null, $forceReload = false); /** * Get info about product by product id * * @param int $productId * @param bool $editMode * @param null|int $storeId * @param bool $forceReload * @return \Magento\Catalog\Api\Data\ProductInterface * @throws \Magento\Framework\Exception\NoSuchEntityException */ public function getById($productId, $editMode = false, $storeId = null, $forceReload = false); /** * Delete product * * @param \Magento\Catalog\Api\Data\ProductInterface $product * @return bool Will returned True if deleted * @throws \Magento\Framework\Exception\StateException */ public function delete(\Magento\Catalog\Api\Data\ProductInterface $product);
<?phpnamespace Magento\Catalog\Api\Data;/** * @api */interface ProductInterface extends \Magento\Framework\Api\CustomAttributesDataInterface{ /** * Product id * * @return int|null */ public function getId(); /** * Product sku * * @return string */ public function getSku(); /** * Product name * * @return string|null */ public function getName(); /**
Dependency Injection ● wstrzyknięcie konstruktorem
● minimalna konfiguracja
<?phpnamespace Training\FlatIndexer\Model\ResourceModel\Flat;use Training\FlatIndexer\Model\ResourceModel\Context;use Training\FlatIndexer\Model\ResourceModel\Metadata;class TableBuilder{ /** * @var Metadata */ private $metadata; /** * @var Context */ private $context; /** * TableBuilder constructor. * @param Metadata $metadata * @param Context $context */ public function __construct(Metadata $metadata, Context $context) { $this->metadata = $metadata; $this->context = $context; } public function validateTable() { $this->validateTableByName($this->context->getIndexTable()); return $this; } public function switchTable() { $this->context->toggleTable(); return $this; }
Object Manager ● Interceptory
● klasy Proxy
● typy wirtualne
<?xml version="1.0"?><config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd"> <virtualType name="contextCategory" type="Training\FlatIndexer\Model\ResourceModel\Context"> <arguments> <argument name="indexerCode" xsi:type="string">training_flat_index_category</argument> <argument name="entity" xsi:type="string">catalog_category</argument> </arguments> </virtualType> <virtualType name="metadataCategory" type="Training\FlatIndexer\Model\ResourceModel\Metadata"> <arguments> <argument name="context" xsi:type="object">contextCategory</argument> <argument name="systemAttributeCodes" xsi:type="array"> <item name="path" xsi:type="string">path</item> <item name="parent_id" xsi:type="string">parent_id</item> </argument> </arguments> </virtualType> <virtualType name="tableBuilderCategory" type="Training\FlatIndexer\Model\ResourceModel\Flat\TableBuilder"> <arguments> <argument name="context" xsi:type="object">contextCategory</argument> <argument name="metadata" xsi:type="object">metadataCategory</argument> </arguments> </virtualType> <virtualType name="tablePopulatorCategory" type="Training\FlatIndexer\Model\ResourceModel\Flat\TablePopulator"> <arguments> <argument name="context" xsi:type="object">contextCategory</argument> <argument name="metadata" xsi:type="object">metadataCategory</argument> </arguments> </virtualType> <virtualType name="trainingFlatIndexerCategory" type="Training\FlatIndexer\Model\Indexer\Flat"> <arguments> <argument name="tableBuilder" xsi:type="object">tableBuilderCategory</argument> <argument name="tablePopulator" xsi:type="object">tablePopulatorCategory</argument> </arguments> </virtualType> <type name="Training\FlatIndexer\Model\ResourceModel\Metadata"> <arguments> <argument name="systemAttributeCodes" xsi:type="array"> <item name="status" xsi:type="string">status</item> <item name="visibility" xsi:type="string">visibility</item> <item name="type_id" xsi:type="string">type_id</item> <item name="attribute_set_id" xsi:type="string">attribute_set_id</item> <item name="required_options" xsi:type="string">required_options</item> </argument> </arguments> </type>
WebAPI ● REST
● swagger
● SOAP
● automatyczne WSDL
● AMPQ (RabbitMQ w Magento 2 Enterprise)
Alan Kent Główny architekt Magento
https://alankent.me/Alan Storm
Freelancer, konsultant, twórca CommerceBug
http://alanstorm.com/category/magento-2
Dokumentacja Magento 2
http://devdocs.magento.com/
Magento na StackExchange
http://magento.stackexchange.com/