Magento
Problemas exportando base de datos Magento desde phpmyadmin
0Es muy habitual exportar la base de datos de Magento de phpMyAdmin para hacer una migración.
Para esto habrá que tener muy en cuenta el acordarse de marcar la opción “Deshabilitar la revisión de las claves foráneasDocumentación”.
Para esto tendremos que hacer la exportanción de tipo personalizada.
En el caso de tener ya un fichero SQL que nos da error al importar, por no tener las foreign keys desactivadas, no hay problema. Habrá que editar el fichero con un editor de texto y añadir al principio
SET FOREIGN_KEY_CHECKS = 0;
y al final
SET FOREIGN_KEY_CHECKS = 1;
Magento borra los videos de Youtube en CMS
0Cuando se pega un iframe con un video de youtube el editor de las páginas CMS de magento borra estos videos.
Se se pega la forma antigua de embeber youtube esto no pasa, pero la mejor solución para que funcione con iframe es retocar el editor.
Para eso nos vamos a js/mage/adminhtml/wysiwyg/tiny_mce/setup.js y buscamos el bloque siguiente
var settings = { mode : (mode != undefined ? mode : 'none'), elements : this.id, theme : 'advanced', plugins : plugins, theme_advanced_buttons1 : magentoPlugins + 'magentowidget,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect,fontselect,fontsizeselect', theme_advanced_buttons2 : 'cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,|,forecolor,backcolor', theme_advanced_buttons3 : 'tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,iespell,media,advhr,|,ltr,rtl,|,fullscreen', theme_advanced_buttons4 : 'insertlayer,moveforward,movebackward,absolute,|,styleprops,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,nonbreaking,pagebreak', theme_advanced_toolbar_location : 'top', theme_advanced_toolbar_align : 'left', theme_advanced_statusbar_location : 'bottom', theme_advanced_resizing : true,
y le añadimos esto
extended_valid_elements : 'iframe[src|style|width|height|scrolling|marginwidth|marginheight|frameborder|allowTransparency],style,script',
Problema solucionado, con esto ya no se eliminarán lo videos
La busqueda de Magento no funciona.
3Parece ser que desde la versión 1.3.2.4 a la 1.5.1.0 Magento viene con un pequeño bug por el cual la búsqueda no funciona y no devuelve resultados.
El primer paso es reindexar todo por si esto lo solucionara (casi nunca lo soluciona)
Si esto no funciona, desafortunadamented la solución pasa por modificar un fichero del core.
El fichero que hay que editar es app/code/core/Mage/CatalogSearch/Block/Result.php
Descomentar la linea 149 y 150
$this->getListBlock() ->setCollection($this->_getProductCollection());
Modificar la linea 172
$this->_productCollection = $this->getListBlock()->getLoadedProductCollection();
por esta
$this->_productCollection = Mage::getSingleton('catalogsearch/layer')->getProductCollection();
Una vez está esto parcheado solo nos queda reindexar y la búsqueda debería volver a funcionar.
Como cambiar el conjunto de atributos de Magento
0Por defecto en Magento no se puede cambiar el conjunto de atributos asignados a un producto, pero con muy poquito esfuerzo podemos conseguirlo.
Para esto tendremos que tocar el core de Magento por lo que siempre es recomendable hacer una copia en code/local para no tener problema con las actualizaciones.
En primer lugar tendremos que cambiar el fichero app/code/core/Mage/Adminhtml/Block/Catalog/Product/Grid.php y sobre la linea 253 añadir
$sets = Mage::getResourceModel('eav/entity_attribute_set_collection') ->setEntityTypeFilter(Mage::getModel('catalog/product') ->getResource()->getTypeId())->load()->toOptionHash(); array_unshift($statuses, array('label'=>'', 'value'=>'')); $this->getMassactionBlock()->addItem('attribute_set', array( 'label'=> Mage::helper('catalog')->__('Change attribute set'), 'url' => $this->getUrl('*/*/massAttributeSet', array('_current'=>true)), 'additional' => array( 'visibility' => array( 'name' => 'attribute_set', 'type' => 'select', 'class' => 'required-entry', 'label' => Mage::helper('catalog')->__('Attribute Set'), 'values' => $sets ) ) ));
Luego en app/code/core/Mage/Adminhtml/controllers/Catalog/ProductController.php añadimos esta nueva función
public function massAttributeSetAction(){ $productIds = $this->getRequest()->getParam('product'); $storeId = (int)$this->getRequest()->getParam(‘store’, 0); if(!is_array($productIds)) { $this->_getSession()->addError($this->__('Please select product(s)')); } else { try { foreach ($productIds as $productId) { $product = Mage::getSingleton('catalog/product') ->unsetData() ->setStoreId($storeId) ->load($productId) ->setAttributeSetId($this->getRequest()->getParam('attribute_set')) ->setIsMassupdate(true) ->save(); } Mage::dispatchEvent('catalog_product_massupdate_after', array('products'=>$productIds)); $this->_getSession()->addSuccess( $this->__('Total of %d record(s) were successfully updated', count($productIds))); } catch (Exception $e) { $this->_getSession()->addError($e->getMessage()); } } $this->_redirect('*/*/', array('store'=>(int)$this->getRequest()->getParam('store', 0))); }
Con esto ya podemos acceder a los productos y desde la rejilla principal podremos cambiar el conjunto de atributos.
[/sourcecode]
Error 404 accediendo al backend de magento
0Con las últimas versiones de Magento ocurre que, tras mover la base de datos, el acceso al administrado da un error 404.
Si buscamos el error por los logs veremos que el error es este
Recoverable Error: Argument 1 passed to Mage_Core_Model_Store_Group::setWebsite() must be an instance of Mage_Core_Model_Website, null given, called
Esto se debe a que, no se muy bien porque, se desconfiguran las claves del grupo administrador, usuario etc.
Afortunadamente es tan fácil de solucionar como ejecutar este script SQL
SET FOREIGN_KEY_CHECKS=0; UPDATE `core_store` SET store_id = 0 WHERE code='admin'; UPDATE `core_store_group` SET group_id = 0 WHERE name='Default'; UPDATE `core_website` SET website_id = 0 WHERE code='admin'; UPDATE `customer_group` SET customer_group_id = 0 WHERE customer_group_code='NOT LOGGED IN'; SET FOREIGN_KEY_CHECKS=1;
No se pueden previsualizar los correos electronicos transaccionable de Magento
0Con la versión 1.6.1 se introdujo un bug nuevo en la previsualización de lo correos electrónicos transaccionables de Magento.
Si bien este error está reportado como bug en la versión 1.6.2 no está solucionado.
En el error se debe a la introducción de un htmlescape justo antes del renderizado.
Para solucionarlo no queda otra que modificar el core.
Nos vamos a app/code/core/Mage/Adminhtml/Block/System/Email/Template/Preview.php y comentamos la linea donde pone todo esto
$template->setTemplateText( $this->escapeHtml($template->getTemplateText()) );
Con el problema estará solucionado.
Esperemos que en próximas versiones lo dejen bien.
Magento: Añadir precio con 2 decimales en correo transaccional
0Ocurre a veces que en los correos que se le envía al cliente queremos poner cierta información diferente a la estándar.
En nuestro caso queriamos poner el precio total como parte de un texto.
En principio para esto era tan fácil como usar la variable
{{var order.getSubtotal()}}
El problema vino cuando se mostraba el importe con 4 decimales.
La solución, aunque no es muy elegante, es la siguiente:
1.- Crea el fichero totalemail.phtml en /app/design/frontend/default/TUPLANTILLA/template/email/order y pon lo siguiente
<?php $order = $this->getOrder(); if ($order) { echo Mage::helper('core')->currency($order->getGrandTotal(), true, false); } ?>
2.- Dentro de la plantilla del correo transaccionable escribe esto donde quieras mostrarlo
{{block type=’core/template’ area=’frontend’ template=’email/order/z.phtml’ order=$order}}
Magento: Access denied en system configuration
0En ocasiones ocurre que, despues de instalar una extension de magento manualmente, al intentar acceder a Sistema/Configuracion nos muestra un precioso texto que dice “Access denied”.
Si despues de establecer los permisos adecuados a las carpetas y ficheros nuevos (775 y usuario web) y de haber borrado la cache sigue sin funcionar la solución, por absurda que parezca, es ir a los roles de administración y al rol administrador los permisos de los recursos cambiarlo a “Personalizar” (OJO NO GUARDAR PORQUE PERDERIAMOS LOS PERMISOS) y luego volverlo a “Todos”. Ahora si que guardamos y todo vuelve a funcionar.
Magento: Como configurar múltiples tiendas y dominios
0Crear múltiples tiendas desde el administrador de Magento es fácil usando las vistas de tienda y los nombre de tienda.
El problema real viene cuando quieres configurar su acceso mediante otros dominios, subdominios o estructura URL.
A continuación comento varias maneras de hacerlo. Usaremos cada una dependiendo de la necesidad
FORMANDO LA ESTRUCTURA DE LA URL
Es algo muy personal y dependerá del escenario. Al final el objetivo es el mismo, mantener una única base de datos para todas las tiendas.
Podemos querer estructuras de lo siguientes tipos
http://www.midominio.com/tienda1 http://www.midominio.com/tienda2 htpp://www.tienda1 htpp://www.tienda2 http://www.midominio.com http://tienda1.midominio.com http://tienda2.midominio.com
SISTEMA MULTIDOMINIO
Se aplica cuando tenemos varios dominios, por ejemplo tienda1.com y tienda2.com.
Uno de ellos siempre actuará como principal, y el resto como secundarios.
La finalidad es hacer un enrutador que nos desvíe el dominio a la instacia que toca.
Para eso editaremos el fichero index.php buscado la linea con códio
Mage::run();
y lo sustituimos por
switch($_SERVER['HTTP_HOST']) { /* tienda1.com */ case 'tienda1.com': case 'www.tienda1.com': Mage::run('tienda1', 'website'); break; /* tienda2.com (default store)*/ default: Mage::run(); break; }
UN DOMINIO CON SUBDOMINIO
Si queremos hacer una tienda exclusiva dentro de nuestro dominio, esta se la opción.
Es cuando queremos algo como
http://www.midominio.com/tienda1
El primer paso será crear en el raiz del hosting tantas carpetas como subdominios.
Una vez lo tenemos, copiamos los ficheros index.php y .htaccess de la tienda principal y que ya está funcionando a estas nuevas carpetas.
Editamos el fichero index.php cambiando esta lineas
$mageFilename = 'app/Mage.php'; Mage::run();
por esto otro
$mageFilename = '../httpdocs/app/Mage.php'; Mage::run('tienda1', 'website');
Magento: Cambiar el estado de los pedidos
4Una de las peculiaridades que no me gusta de magento es el modo en el que trata el estado de las órdenes de pedido.
Hasta que no realizas el envio y la facturación no lo cambia de estado.
Esto puede llegar a ser un problema ya que, en muchos casos, la parte de facturación no interesa.
Para esto tendremos que modificar un fichero del core de magento para que nos permita seleccionar el cambio de estado en la orden de pedido.
Lo primero será buscar el fichero config.xml que se encuentra en app\code\core\Mage\Sales\etc\y buscaremos el siguiente bloque de código.
<states> <new translate="label"> <label>New</label> <statuses> <pending/> </statuses> </new> <processing translate="label"> <label>Processing</label> <statuses> <processing/> </statuses> </processing> <complete translate="label"> <label>Complete</label> <statuses> <complete/> </statuses> </complete> <closed translate="label"> <label>Closed</label> <statuses> <closed/> </statuses> </closed> <canceled translate="label"> <label>Canceled</label> <statuses> <canceled/> </statuses> </canceled> <holded translate="label"> <label>On Hold</label> <statuses> <holded/> </statuses> </holded> </states>
y lo sustituiremos por este
<states> <new translate="label"> <label>New</label> <statuses> <pending/> <processing/> <holded/> <complete/> <closed/> <canceled/> </statuses> </new> <pending translate="label"> <label>Pending</label> <statuses> <pending/> <processing/> <holded/> <complete/> <closed/> <canceled/> </statuses> </pending> <processing translate="label"> <label>Processing</label> <statuses> <pending/> <processing/> <holded/> <complete/> <closed/> <canceled/> </statuses> </processing> <complete translate="label"> <label>Complete</label> <statuses> <complete/> <pending/> <processing/> <holded/> <closed/> <canceled/> </statuses> </complete> <closed translate="label"> <label>Closed</label> <statuses> <pending/> <processing/> <holded/> <complete/> <closed/> <canceled/> </statuses> </closed> <canceled translate="label"> <label>Canceled</label> <statuses> <pending/> <processing/> <holded/> <complete/> <closed/> <canceled/> </statuses> </canceled> <holded translate="label"> <label>On Hold</label> <statuses> <pending/> <processing/> <holded/> <complete/> <closed/> <canceled/> </statuses> </holded> </states>
Refresca la cache y ya tendremos en el admin la opcion de cambiar el estado.
Como esto significa modificar el CORE de Magento, la mejor opción será duplicar este fichero en la carpeta app/code/local para no sufrir perdidas en caso de actualizar.