Magento Best Practices
Upcoming SlideShare
Loading in...5
×
 

Magento Best Practices

on

  • 345 views

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

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

Statistics

Views

Total Views
345
Views on SlideShare
342
Embed Views
3

Actions

Likes
0
Downloads
19
Comments
0

1 Embed 3

http://www.slideee.com 3

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-ShareAlike LicenseCC Attribution-ShareAlike License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Magento Best Practices Magento Best Practices Presentation Transcript

  • 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
  • Why Magento?
  • Día 1: Magento Admin Día 2: Magento Design Día 3: Magento Development
  • ¿Descansos?
  • ©nicmcphee at Flickr
  • Magento Admin Día 1:
  • http://www.on4u.es/docs/doc/ManualMagento.pdf Manual de Magento
  • Let's go!
  • Checklist (I) ✔ Instalación ✔ Permisos ✔ GIT ✔ Compilación ✔ Gestión de divisas ✔ Emails transaccionales ✔ Permisos ✔ Magento Connect ✔ Caches e índices
  • 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
  • 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
  • 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
  • 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.
  • Magento Design Día 2:
  • La vista
  • MVC? Prácticamente sí, pero no.
  • CONSECUENCIAS 1. Bloques y plantillas 2. Un bloque Una plantilla→ 3. Objeto $this
  • app/design/frontend/base/default/template/page/1column.phtml Anidamiento de bloques
  • Aquí falta algo... 1. ¿Cómo le digo qué bloques quiero utilizar? 2. ¿Cómo especifico un bloque hijo?
  • Layout (XML)
  • 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
  • Handles(manejadores) - Elementos de primer nivel del nodo <layout> - Cada uno representa un actualización del layout - [nombre_modulo][nombre_controller][nombre_accion]
  • Ejemplo contacs.xml
  • 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">
  • 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.
  • Ejemplo customer.xml
  • local.xml HERENCIA
  • Proceso de renderizado
  • - 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
  • Bloques
  • Tipos de bloques 1. Bloques estructurales 2. Bloques dinámicos 3. Bloques dinámicos con datos personalizados 4. Bloques estáticos
  • Tipos de bloques 1. Bloques estructurales 2. Bloques dinámicos 3. Bloques dinámicos con datos personalizados 4. Bloques estáticos
  • 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)
  • 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 –
  • 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)
  • 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
  • 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
  • ¿Y tú que eres? Yo soy explorador de Magento Rutas en plantilla Sistema -> Configuración -> Developer -> Depurar
  • Frontend de Magento
  • Paquetes y temas
  • 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.
  • Tema App/design Archivos que controlan como se representan las plantillas. Skin Archivos que controlan el aspecto visual del tema (css, javascript).
  • 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.
  • Tema por defecto Todos los paquetes tiene el tema por defecto “default”.
  • 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
  • A practicar (crear nuestro tema)
  • Admin CMS
  • Páginas (CMS Pages) Bloques estáticos (Static blocks) Aplicaciones (Widgets)
  • Tareas comunes en Magento
  • - Añadir/quitar archivos/librerías - Añadir/quitar enlaces a bloques En plantilla
  • - Cambiar parámetros de los bloques - Diferentes acciones para logueados/no-logueados - Añadir imágenes En plantilla
  • - 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
  • Snippets
  • 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; ?>
  • 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');
  • La práctica
  • 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
  • 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/
  • Magento Development Día 3:
  • ¿Herramientas?
  • Herencia Local Community Core→ →
  • Crear un módulo app/code/local/On4u/Holamundo/etc/config.xml app/etc/modules/On4u_Holamundo.xml
  • Registro de Helpers, Bloques y Modelos (I) app/code/local/On4u/Holamundo/etc/config.xml
  • 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”);
  • 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/
  • app/code/local/On4u/Holamundo/etc/config.xml ~/layout/holamundo.xml ~/controllers/IndexController.php Cargar layout
  • 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”);
  • 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
  • app/code/local/On4u/Holamundo/etc/config.xml app/code/local/On4u/Holamundo/Model/Catalog/Product.php Reescribir una clase del core
  • +350 tablas 2 tipos de entidades (flat y EAV) Convención de nombres
  • Algunas tablas de core
  • Tablas FLAT
  • Conectar con BD de Magento Conectar con otra BD externa
  • Trabajando con SQL Querys Trabajando con Colecciones (Mejor opción)
  • 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
  • Tablas EAV
  • Tipos de entidades: catalog_category catalog_product creditmemo customer customer_address invoice order shipment Tipos de atributos: Datetime Decimal Int Varchar Text
  • Tablas EAV para productos
  • Tablas Flat para entidades EAV Ventajas: Rendimiento Desventajas: Sincronización entre tablas (Magento Index) Crece el tamaño del a base de datos
  • app/code/local/On4u/Holamundo/etc/config.xml Scripts de instalación (core_resource)
  • app/code/local/On4u/Holamundo/sql/holamundo_setup/install­0.0.1.php
  • Crear tablas flat desde el modelo app/code/local/On4u/Holamundo/etc/config.xml
  • Crear tablas flat desde el modelo (II)
  • Crear tablas flat desde el modelo (III)
  • Crear tablas flat desde el modelo (IV)
  • 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
  • Crear tablas flat desde el modelo (V) app/code/local/On4u/Holamundo/controllers/IndexControllers.php
  • 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())
  • 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
  • Backend Menu
  • Backend ACL Mage::getSingleton('admin/session')­>isAllowed('all')
  • Configuración del sistema Mage::getStoreConfig('<path>')
  • app/code/local/On4u/Holamundo/controllers/Adminhtml/Holamundo/SubscriptionController.php Datagrid app/code/local/On4u/Holamundo/Block/Adminhtml/Subscription.php
  • Datagrid (II) app/code/local/On4u/Holamundo/Block/Adminhtml/Subscription/Grid.php
  • Datagrid (III)
  • Datagrid (IV)
  • Clientes app/code/local/On4u/Holamundo/sql/holamundo_setup/upgrade­0.0.2­0.0.3.php
  • Source models
  • Eventos (crear) app/code/local/On4u/Holamundo/controllers/IndexController.php
  • Eventos (observer) app/code/local/On4u/Holamundo/etc/config.xml app/code/local/On4u/Holamundo/Model/Observer.php
  • Eventos (observer) app/code/local/On4u/Holamundo/etc/config.xml app/code/local/On4u/Holamundo/Model/Observer.php
  • Cronjobs app/code/local/On4u/Holamundo/etc/config.xml app/code/local/On4u/Holamundo/Model/Observer.php
  • 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
  • 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
  • REST vs SOAP
  • Seguridad ● Oauth ● Basic ● Tokens (!= sesiones, pero la misma idea) ● Por oscuridad (NO USAR)
  • 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.
  • 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
  • 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
  • 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
  • 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
  • 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
  • Config (api2.xml) app/code/core/Mage/CatalogInventory/etc/api2.xml
  • Resource (Stock/Item.php) app/code/core/Mage/CatalogInventory/Model/Api2/Stock/Item.php
  • app/code/core/Mage/CatalogInventory/Model/Api2/Stock/Item/Rest.php GET _retrieve→ POST _create→ PUT _update→ DELETE _delete→
  • app/code/.../CatalogInventory/Model/Api2/Stock/Item/Rest/Admin/V1.php
  • 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
  • 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
  • Gracias ;)
  • www.on4u.es