Magento Best Practices

1,431 views
1,283 views

Published on

Curso de Magento que aborda la administración, el diseño de frontend y el desarrollo de módulos.

Published in: Software
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,431
On SlideShare
0
From Embeds
0
Number of Embeds
33
Actions
Shares
0
Downloads
62
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Magento Best Practices

  1. 1. Magento Best Practices Angel Villa ashiak@on4u.es @ashiak Olmo González olmox@on4u.es @olmox Mikel Ruiz mikel@on4u.es @mkruiz Alberto Goya agoya@on4u.es @aGoya www.on4u.es
  2. 2. Why Magento?
  3. 3. Día 1: Magento Admin Día 2: Magento Design Día 3: Magento Development
  4. 4. ¿Descansos?
  5. 5. ©nicmcphee at Flickr
  6. 6. Magento Admin Día 1:
  7. 7. http://www.on4u.es/docs/doc/ManualMagento.pdf Manual de Magento
  8. 8. Let's go!
  9. 9. Checklist (I) ✔ Instalación ✔ Permisos ✔ GIT ✔ Compilación ✔ Gestión de divisas ✔ Emails transaccionales ✔ Permisos ✔ Magento Connect ✔ Caches e índices
  10. 10. Checklist (II) ✔ Gestionar tiendas. ✔ Configuración [scope] ✔ Conf>Web: urls y usar CDN. Certificados SSL. ✔ Conf>Diseño>Encabezado-> Robots.txt ✔ Conf>Catálogo>SEO ✔ Configuración de divisas, precios (global o website) ✔ Conf->WYSIWYG ✔ Conf->Catálogo (tablas flat) ✔ Buscador y Términos de búsqueda ✔ Inventario
  11. 11. Checklist (III) ✔ Clientes-> Scope, impuestos, asignaciones a grupos ✔ Clientes->Carrito persistente ✔ Ventas->Impuestos, FPT ✔ Checkout->Métodos de envío ✔ Checkout->Métodos de pago ✔ Avanzado->Desarrollador ✔ Estados de pedidos ✔ Conjunto de atributos ✔ Categorías ✔ Poner el CRON de Magento
  12. 12. Recursos útiles Guía de uso de GIT con Magento https://www.sonassi.com/knowledge-base/our-magento-git-guide-and-work-flow/ Mejorar buscador http://magento.stackexchange.com/questions/1137/search-type-like-full-text-or-combined http://www.magentocommerce.com/magento-connect/catalog-search-refinement-free.html Robots.txt para Magento http://turnkeye.com/blog/optimize-robots-txt-for-magento/ Workflow de pedidos http://go.magento.com/support/kb/entry/name/order-workflow Cron en Magento http://www.magentocommerce.com/wiki/1_-_installation_and_configuration/how_to_setup_a_cron_job
  13. 13. Caso práctico Distribuciones Exclusivas de Vinos de La Rioja, S.A (a.k.a. DEVILAR) está orientada al mercado Europeo, por lo que tendrá 2 tiendas: España en castellano y Reino Unido en inglés. Algún producto sólo se puede vender en UK. La de UK en libras con tasa de cambio fija (1GBP = 1,2349 EUR) Los clientes con CIF válido entran al grupo de Clientes VIP. Clientes VIP con precios especiales en algunos producto. Para el producto Oferton de día, si te gastas más de 120€, dicho producto tiene un 80% de descuento. Filtros por: precio, graduación, municipio, añada. Buscador busca en nombre, descripción y municipio. El catálogo se muestra con IVA del 21% incluido. El email de creación de pedido para usuarios registrados y no registrados es el mismo y pone sólo “PEDIDO REGISTRADO”. Crear sitemap.xml para es y uk. Envío gratis para España con pedidos de >100€ y el resto 10€ de gastos. Optimizar rendimiento para puesta en producción. Aceptar Condiciones de compra al hacer el pedido y cumplir con EU Cookie.
  14. 14. Magento Design Día 2:
  15. 15. La vista
  16. 16. MVC? Prácticamente sí, pero no.
  17. 17. CONSECUENCIAS 1. Bloques y plantillas 2. Un bloque Una plantilla→ 3. Objeto $this
  18. 18. app/design/frontend/base/default/template/page/1column.phtml Anidamiento de bloques
  19. 19. Aquí falta algo... 1. ¿Cómo le digo qué bloques quiero utilizar? 2. ¿Cómo especifico un bloque hijo?
  20. 20. Layout (XML)
  21. 21. Comprendiendo el Layout XML - Etiquetas XML - Añaden/modifican/eliminan relaciones entre bloques - Relacionan bloques estructurales con bloques de contenido - Controlar funciones y añadir contenido HTML - En app/design/frontend/[package]/[theme]/layout - Un archivo XML de Layout por cada módulo Magento
  22. 22. Handles(manejadores) - Elementos de primer nivel del nodo <layout> - Cada uno representa un actualización del layout - [nombre_modulo][nombre_controller][nombre_accion]
  23. 23. Ejemplo contacs.xml
  24. 24. Elementos del Layout Reference - Referenciar un bloque ya definido. - Debe coincidir con el atributo name del bloque Block - Define un nuevo bloque - Obligatorios los campos name y type - <block type="page/html" template="example/view.phtml">
  25. 25. Elementos del Layout Remove Action - Define una acción a ejecutar - Puede ser colocado dentro de reference o block Update - Carga un handle dentro de otro. Actualiza un bloque con el contenido de otro.
  26. 26. Ejemplo customer.xml
  27. 27. local.xml HERENCIA
  28. 28. Proceso de renderizado
  29. 29. - Se instancian los bloques. - Solo los bloques de tipo output son añadidos al response. - Page.xml. - Bloque raíz (root) - Los bloques hijos se renderizan con la llamada getChildHtml() - Proceso recursivo
  30. 30. Bloques
  31. 31. Tipos de bloques 1. Bloques estructurales 2. Bloques dinámicos 3. Bloques dinámicos con datos personalizados 4. Bloques estáticos
  32. 32. Tipos de bloques 1. Bloques estructurales 2. Bloques dinámicos 3. Bloques dinámicos con datos personalizados 4. Bloques estáticos
  33. 33. Bloques estructurales - Encapsulan los bloques de contenido organizando visualmente los bloques. - Se pueden crear bloques estructurales personalizados - Todos los bloques hijos de uno estructural se muestran automáticamente sin tener que usar el método getChildHtml() para cada uno de ellos. (Ejemplo: newreference.phtml)
  34. 34. Bloques dinámicos (phtml) - Bloques Magento ( categoría, carrito, usuario,...) - Representan el contenido y las funcionalidades 1. Vía layout XML (Ejemplo: review_form) 2. Desde el CMS 3. Desde la plantilla –
  35. 35. Bloques dinámicos personalizados 1. Vía layout XML - Bloques personalizados - Creamos un bloque y una plantilla asociada a este personalizada. 2. Desde el CMS (Ejemplo: bestsellers)
  36. 36. Bloques estáticos (CMS Blocks) - Se crean desde el admin. CMS Bloques estáticos→ - Útil para que los clientes. 1. Vía layout XML 2. Desde el CMS 3. Desde la plantilla
  37. 37. Tipos de bloque (Layout XML) 1. page/html 2. page/html_head 3. page/html_header 4. page/html_wrapper 5. page/html_breadcrumbs 6. page/html_footer 7. page/template_links 8. page/switch 9. core/messages 10. core/text_list 11. core/proofiler 12. page/html_noticies
  38. 38. ¿Y tú que eres? Yo soy explorador de Magento Rutas en plantilla Sistema -> Configuración -> Developer -> Depurar
  39. 39. Frontend de Magento
  40. 40. Paquetes y temas
  41. 41. Paquete 1. Colección de temas relacionados. 2. En Magento por defecto es “base”. Tema 1. Varios por paquete. 2. Determina el contenido visual de nuestra tienda. 3. Solo puede pertenecer a un paquete.
  42. 42. Tema App/design Archivos que controlan como se representan las plantillas. Skin Archivos que controlan el aspecto visual del tema (css, javascript).
  43. 43. App/design Layout Contiene los archivos básicos XML que definen la estructura de bloque para diferentes páginas. Template Archivos que contienen el PHP y el XHTML necesario para la representación visual. Locale Contiene los CSV de traducción organizados por lenguaje.
  44. 44. Tema por defecto Todos los paquetes tiene el tema por defecto “default”.
  45. 45. Directorios Creando un nuevo tema 1. /app/design/frontend/new_package/new_theme/ 2. /app/design/frontend/new_package/new_theme/layout 3. /app/design/frontend/new_package/new_theme/template 4. /skin/frontend/new_package/new_theme/ 5. /skin/frontend/new_package/new_theme/css/ 6. /skin/frontend/new_package/new_theme/images/ Archivos 1. /app/design/frontend/new_package/new_theme/layout/local.xml 2. /skin/frontend/new_package/new_theme/css/local.css
  46. 46. A practicar (crear nuestro tema)
  47. 47. Admin CMS
  48. 48. Páginas (CMS Pages) Bloques estáticos (Static blocks) Aplicaciones (Widgets)
  49. 49. Tareas comunes en Magento
  50. 50. - Añadir/quitar archivos/librerías - Añadir/quitar enlaces a bloques En plantilla
  51. 51. - Cambiar parámetros de los bloques - Diferentes acciones para logueados/no-logueados - Añadir imágenes En plantilla
  52. 52. - Diseño personalizable por categoría Navegación por capas : Display settings Is Anchor→ → yes Incluir texto estático o imágenes. - Navegación por capas Ocultar/Mostrar atributos. Atributos filtrables con/sin resultados - Página de producto Layout de la página de producto Galería de imágenes En el administrador
  53. 53. Snippets
  54. 54. Url de la página <?php echo $this->getUrl('mypage'); ?> Url de la imagen <?php echo $this->getSkinUrl('images/button.gif'); ?> Url del producto <?php echo $this->getProductData()->getProductUrl(); ?> Nombre del producto <?php echo $this->htmlEscape($this->getProductData()->getName()); ?> Mostrar todos los productos de una categoría $categories = $_product->getCategoryIds(); foreach($categories as $k => $_category_id): $_category = Mage::getModel('catalog/category')->load($_category_id); <a href="<?php echo $_category->getUrl() ?>"><?php echo $_category->getName() ?> <?php endforeach; ?>
  55. 55. Comprobar si un usuario esta logueado $logged_in = Mage::getSingleton('customer/session')->isLoggedIn(); Cargar producto según su SKU $_product = Mage::getModel('catalog/product')->loadByAttribute('sku', $product_sku); Cargar producto según su ID $_product = Mage::getModel('catalog/product')->load($product_id); Cargar categoría según su ID $_category = Mage::getModel('catalog/category')->load($category_id); Obtener categoría actual $_category = Mage::getModel('catalog/layer')->getCurrentCategory(); Obtener literal (para traducciones) $text = $this->__('Content');
  56. 56. La práctica
  57. 57. 1- Añadir enlace de Twitter en el apartado “Company” del pie. 2- Crear página “Condiciones de compra” y añadirla en los enlaces de la cabecera “Mi Cuenta”. 3- Añadir un bloque estructural encima del pie donde aparezca un eslogan 4- Añadir un imagen (Enpresa Digitala) y que sea un enlace que lleve a su web en la columna de la izquierda de la vista de categoría 5- Añadir una imagen/slider en nuestra “home”. 6- Modificar el valor “nofollow” al Meta tag robots
  58. 58. Recursos útiles Oficial Magento designer guide http://www.magentocommerce.com/resources/magento-user-guide Magento: The right way http://magentotherightway.com/ Magento Cheat Sheet http://www.richdynamix.com/mcheat/
  59. 59. Magento Development Día 3:
  60. 60. ¿Herramientas?
  61. 61. Herencia Local Community Core→ →
  62. 62. Crear un módulo app/code/local/On4u/Holamundo/etc/config.xml app/etc/modules/On4u_Holamundo.xml
  63. 63. Registro de Helpers, Bloques y Modelos (I) app/code/local/On4u/Holamundo/etc/config.xml
  64. 64. Registro de Helpers, Bloques y Modelos (II) app/code/local/On4u/Holamundo/Helper/Data.php Lo mismo para: app/code/local/On4u/Holamundo/Block app/code/local/On4u/Holamundo/Model La nomenclatura sigue la convención: <Vendor namespace>_<Modulename>_<Objecttype>_<Classname> Y para cargarlos: Mage::getModel(“holamundo/ejemplo”); Mage::helper(“holamundo/data”);
  65. 65. Crear página app/code/local/On4u/Holamundo/etc/config.xml app/code/local/On4u/Holamundo/controllers/IndexController.php http://mi-magento.com/holamundo/index/hola/
  66. 66. app/code/local/On4u/Holamundo/etc/config.xml ~/layout/holamundo.xml ~/controllers/IndexController.php Cargar layout
  67. 67. app/code/local/On4u/Holamundo/etc/config.xml Traducciones Creamos el fichero app/locale/xx_XX/On4u_Holamundo.csv con las traducciones: “Literal”, “Traducción” Y para utilizarlo: echo $this­>__(“Literal a traducir”);
  68. 68. app/design/frontend/mitema/default/template/holamundo/newproducts.html app/design/frontend/mitema/default/layout/holamundo.xml app/code/local/On4u/Holamundo/Block/Newproducts.php Bloques
  69. 69. app/code/local/On4u/Holamundo/etc/config.xml app/code/local/On4u/Holamundo/Model/Catalog/Product.php Reescribir una clase del core
  70. 70. +350 tablas 2 tipos de entidades (flat y EAV) Convención de nombres
  71. 71. Algunas tablas de core
  72. 72. Tablas FLAT
  73. 73. Conectar con BD de Magento Conectar con otra BD externa
  74. 74. Trabajando con SQL Querys Trabajando con Colecciones (Mejor opción)
  75. 75. Las entidades flat La tabla de la base de datos El objeto Model (lógica negocio) El objeto Resource Model (conecta con BD p.e. save()) El objeto Resource Collection
  76. 76. Tablas EAV
  77. 77. Tipos de entidades: catalog_category catalog_product creditmemo customer customer_address invoice order shipment Tipos de atributos: Datetime Decimal Int Varchar Text
  78. 78. Tablas EAV para productos
  79. 79. Tablas Flat para entidades EAV Ventajas: Rendimiento Desventajas: Sincronización entre tablas (Magento Index) Crece el tamaño del a base de datos
  80. 80. app/code/local/On4u/Holamundo/etc/config.xml Scripts de instalación (core_resource)
  81. 81. app/code/local/On4u/Holamundo/sql/holamundo_setup/install­0.0.1.php
  82. 82. Crear tablas flat desde el modelo app/code/local/On4u/Holamundo/etc/config.xml
  83. 83. Crear tablas flat desde el modelo (II)
  84. 84. Crear tablas flat desde el modelo (III)
  85. 85. Crear tablas flat desde el modelo (IV)
  86. 86. Crear tablas flat desde el modelo (V) app/code/local/On4u/Holamundo/Model/Resource/Subscription/Collection.php app/code/local/On4u/Holamundo/Model/Resource/Subscription.php app/code/local/On4u/Holamundo/Model/Subscription.php
  87. 87. Crear tablas flat desde el modelo (V) app/code/local/On4u/Holamundo/controllers/IndexControllers.php
  88. 88. Colecciones app/code/local/On4u/Holamundo/controllers/IndexControllers.php Filtros ­>addAttributeToFilter('entity_id', array ('in' => array(1, 7, 11))) ­>addAttributeToFilter('name', array ('like' => '%Oxford%')) Mostrar la Query $productCollection­>load(); Echo $productCollection­>getSelect()­>__toString(); Modificar datos $productCollection­>setDataToAll('price', 20);  (al hacer save())
  89. 89. Backend app/code/local/On4u/Holamundo/etc/config.xml app/code/local/On4u/Holamundo/controllers/Adminhtml/Holamundo/IndexController.php http://mimagento.com/index.php/admin/holamundo_index
  90. 90. Backend Menu
  91. 91. Backend ACL Mage::getSingleton('admin/session')­>isAllowed('all')
  92. 92. Configuración del sistema Mage::getStoreConfig('<path>')
  93. 93. app/code/local/On4u/Holamundo/controllers/Adminhtml/Holamundo/SubscriptionController.php Datagrid app/code/local/On4u/Holamundo/Block/Adminhtml/Subscription.php
  94. 94. Datagrid (II) app/code/local/On4u/Holamundo/Block/Adminhtml/Subscription/Grid.php
  95. 95. Datagrid (III)
  96. 96. Datagrid (IV)
  97. 97. Clientes app/code/local/On4u/Holamundo/sql/holamundo_setup/upgrade­0.0.2­0.0.3.php
  98. 98. Source models
  99. 99. Eventos (crear) app/code/local/On4u/Holamundo/controllers/IndexController.php
  100. 100. Eventos (observer) app/code/local/On4u/Holamundo/etc/config.xml app/code/local/On4u/Holamundo/Model/Observer.php
  101. 101. Eventos (observer) app/code/local/On4u/Holamundo/etc/config.xml app/code/local/On4u/Holamundo/Model/Observer.php
  102. 102. Cronjobs app/code/local/On4u/Holamundo/etc/config.xml app/code/local/On4u/Holamundo/Model/Observer.php
  103. 103. Para qué sirve un API Interconectar sistemas para que se entiendan entre ellos (internet of things) Aplicaciones distribuidas. El servidor ofrece unos servicios y el cliente envía peticiones. Interfaz abstracta reusable Marshalling / Unmarshalling
  104. 104. REST vs SOAP ● SOAP – Pros ● Fácil de automatizar (sobre todo Java y cía) ● Wsdl – Contras ● Implementaciones anti-interoperabilidad ● Demasiado verboso ● REST – Pros: ● Ubicuo ● Estándar ● Caching ● Statleeess (escalabilidad) ● JSON o XML o lo que sea. – Contras ● Herramientas ● Autodocumentación / Autogeneracion ● Verbos limitados
  105. 105. REST vs SOAP
  106. 106. Seguridad ● Oauth ● Basic ● Tokens (!= sesiones, pero la misma idea) ● Por oscuridad (NO USAR)
  107. 107. API+ ● Acceso granular (recuperar sólo lo necesario) y filtrado ● Tipos bien definidos ● “Desnormalizar” (reducir nº de peticiones) ● Multiformato ● Documentación y buenos errores * ● Versionado ● Disponibilidad y velocidad * *Qué bueno es que haya niños Magentos para echarles la culpa.
  108. 108. API REST Magento ● http(s)://magentohost/api/rest ● Clientes, productos, inventario, pedidos(lectura) ● OAuth1.0a ● Métodos: GET, POST, PUT, DELETE ● Filtros: page, order, dir, limit, etc. ● ACL (admin, customer, guest) + roles +attributes ● JSON + XML
  109. 109. Elementos del API REST ● Módulo: Mage_Api2 – API SOAP v1 → API SOAP v2 (1.3) != API REST – No se trata de extenderlo sino de usarlo ● Request Interpreters y response renderers – URL query, json y xml ● Auth Adapters – Oauth ● User Types – Guest, customer, admin ● Route – entity / collection ● Request → Dispatcher → Response
  110. 110. Elementos del API REST ● ACL: – Global y filter – Deciden qué roles acceden a qué atributos. Se usa también como “filtro” para eliminar campos. ● Validator – Comprueba que los parámetros de entrada sean correctos. ● Resource – Implementa la lógica de cada recurso
  111. 111. Extendiendo un recurso ● La implementación está en cada módulo – Model/Api2/ ● {Resourcename}.php ● {Resourcename}/ – Rest.php – Rest/{Admin|Guest|Customer}/ ● V{n}.php – P.ej “CatalogInventory/Model/Api2/Stock” ● Item.php ● Item/Rest.php ● Item/Rest/Admin/V1.php ● Item/Validator/Item.php
  112. 112. api2.xml ● El pegamento que une todas las partes ● En /etc de cada módulo – Resources (modelos) – Atributos y roles (ACL) – Rutas – Validators – Versiones disponibles
  113. 113. Config (api2.xml) app/code/core/Mage/CatalogInventory/etc/api2.xml
  114. 114. Resource (Stock/Item.php) app/code/core/Mage/CatalogInventory/Model/Api2/Stock/Item.php
  115. 115. app/code/core/Mage/CatalogInventory/Model/Api2/Stock/Item/Rest.php GET _retrieve→ POST _create→ PUT _update→ DELETE _delete→
  116. 116. app/code/.../CatalogInventory/Model/Api2/Stock/Item/Rest/Admin/V1.php
  117. 117. Recursos útiles Guía de uso de GIT con Magento https://www.sonassi.com/knowledge-base/our-magento-git-guide-and-work-flow/ Scripts para administrar Magento desde consola https://github.com/classyllama/Wiz Herramienta para reparar la Base de datos de Magento http://www.magentocommerce.com/wiki/1_-_installation_and_configuration/db-repair-tool Trabajar con colecciones http://www.magentocommerce.com/wiki/1_-_installation_and_configuration/using_collections_in_magento
  118. 118. Caso práctico ● Hola Mundo por pantalla ● Hola Mundo en un bloque con traducciones ● Crear bloque de nuevos productos ● Reescribir model de Product para poner CURSO delante del nombre ● Instalador que cree un atributo a producto ● Actualización que cree tabla de suscriptores ● Colección que muestre los productos que tiene una 'A' ● Acceso en menú de backend ● ACL de permisos ● Gestión de configuración ● Actualización que cree atributo a cliente
  119. 119. Gracias ;)
  120. 120. www.on4u.es

×