Jorge

Jorge

This user hasn't shared any profile information

Posts by Jorge

Cambiar posición del simbolo de moneda en Magento

0

Para cambiar el símbolo de moneda en Magento tenemos que cambiar un fichero de ZEND donde se define esto.

Iremos a la carpeta lib/Zend/Locale/data. Aquí están todos los fichero de definición de cada idioma.
Para es español editaremos fichero es.xml

Buscaremos la cadena

<pattern>¤ #,##0.00</pattern>

, mas o menos por la linea 2509 y la sustituiremos por

<pattern>#,##0.00 ¤</pattern>

Al cambiar esto puede que no veamos los cambios. Para esto no vale solo con quitar la cache de Magento también tendremos que borrar
/var/cache
/var/locks
/var/report

Si no borramos esto puede que incluso nos de errores para entrar al administrador.

Si con esto no vale, también habrá que borrar todas las caches del navegador.

Especificar en Magento la cantidad minima en el carrito

1

Es común que la gente al comprar ponga cantidades a 0 o vacias.
También es normal en Magento, por parte del administrador poner la cantidad mínima de producto en el carro.
Es recomendable y necesario especificar un mínimo de producto en el carrito para evitar problemas.

Hay várias manera de hacerlo.

1.- ESPECIFICARLO EN EL PRODUCTO
El los parámetros de inventario del producto hay un parámetro que se llama “Cantidad mínima permitida en el carrito de compras”. Ahí se le puede especificar la cantidad mínima, que por defecto suele venir 0.
Si seleccionamos “Usar las configuraciones de Config”, la opción mas habitual, cogerá la configuración global (ver punto 2).

2.- ESPECIFICACIÓN GLOBAL
Para especificar el valor global por defecto tendremos que

  • Ir al Sistema -> Configuracion -> Inventario-> Opciones de los productos en existencia
  • Hacer click en el botón Add Minimum Qty
  • Seleccionar el grupo de clientes. ALL GROUPS es lo mas normal para aplicarlo a todos los clientes
  • Escribe 1 o la cantidad que quieras como Minimum Qty
  • Guarda la configuración

3.- RETOCANDO EL TEMPLATE
El la forma menos elegante y recomendada pero la pongo por si a alguién le es útil en algún escenario.
Para esto hay que buscar la carpeta
app\design\frontend\default\TUDISEÑO\template\catalog\product\view

Abre el fichero y sobre la linea 35 busca esto:

<input name=”qty” type=”text” id=”qty” maxlength=”12″ value=”<?php echo $this->getMinimalQty($_product) ?>” /></span>

y cambialo por este código

<input name=”qty” type=”text” id=”qty” maxlength=”12″ value=”<?php echo $this->getMinimalQty($_product)== null?1:$this->getMinimalQty($_product) ?>” /></span>

Problemas indexando Magento. Index process is working now

0

El tipiquísimo problema con la indexación “Index process is working now. Please try run this process later.” de Magento se suele resolver borrando o asignado permisos 775 o 777 a los ficheors lock y a la carpeta lock que encontramos en var/locks.

Aun así nos han surgido casos, muy pocos, en los que esto no lo resuelve y no hemos sido capaces de solucionarlo.
Ante esto existe la posibilidad de ejecutar un script por ssh pero, como desgraciadamente, en la mayoría de los casos no hay acceso SSH al servidor no suele ser muy útil.
Por eso optamos, aunque poco elegante, por quitar la comprobación de fichero bloqueado y que ejecute la indexación incondicionalmente.

Para esto hay que editar el fichero Process.php que se encuentra en:
app\core\Mage\Index\Model\Process.php

Sobre la linea 132 existe la funcion reindexAll()
Comentamos la comprobación quedando la función así

 public function reindexAll()
    {
       // if ($this->isLocked()) {
         //   Mage::throwException(Mage::helper('index')->__('%s Index process is working now. Please try run this process later.', $this->getIndexer()->getName()));
//        }
        $this->_getResource()->startProcess($this);
        $this->lock();
        $this->getIndexer()->reindexAll();
        $this->unlock();
        $this->_getResource()->endProcess($this);
    }

Quitar tasa mayor de 0 en los tipos Fixed Product Tax de magento

0

Magento tiene un tipo de atributo para los productos llamado Fixed Product Tax.
Este tipo de tasa se invento para las ecotasas (por eso las tablas y el componente se llama weee “waste of electrical and electronical equipment”) que son tasa de importe fijo para el producto.
El tiempo y la necesidad ha hecho que este tipo de atributo se use para otras cosas.

Nosotros por ejemplo lo hemos tenido que usar para una situación especial en la que un producto de precio único lleva diferentes tipos de I.V.A.
Para mas lio, y dado que el I.V.A. es solo para la peninsula, se tuvieron que crear excepciones.
Inicialmente creamos el impuesto con * para toda España. Luego creamos la excepcion, p.e. CEUTA, con importe 0.
Al guardar resulta que este campo tenía que ser mayor de 0.

Para quitar la obligatoriedad de mayor de 0 es tan facil como retocar el template de administracion de weee.
El fichero se encuentra en app/design/adminhtml/default/default/template/weee/renderer/tax.phtml

En este fichero, mas o menos por la linea 68, tenemos que quitar la validacion “validate-greater-than-zero” dejando solo required-entry.
Antes

 <td>
    <input disabled="no-template" class="<?php echo $_htmlClass ?> required-entry validate-greater-than-zero" type="text" name="<?php echo $_htmlName ?>[__index__][price]" value="'#{price}'" />
 </td>

Despues

 <td>
   <input disabled="no-template" class="<?php echo $_htmlClass ?> required-entry" type="text" name="<?php echo $_htmlName ?>[__index__][price]" value="'#{price}'" />
 </td>

Eliminar pedidos desde el Backend de Magento

0

Magento no dispone de un sistema para eliminar los pedidos. Permite cambiarles es estado a “Cancelar” pero no borrarlos.

Para eso existen componentes que no permiten hacerlo.
Hemos probado la siguiente con resultados satisfactorios

http://www.magentocommerce.com/magento-connect/seamless-delete-order.html

Una vez instalado añade una nueva opción el las acciones de los pedidos.

Eliminar pedidos de prueba y clientes de prueba de Magento

0

Con Magento es normal hacer pruebas en una tienda que luego se pasa a producción.
Al haber configurado multiples parametros (metodos de envio, metodos de pago….) es indispensable pasar la base de datos de test a producción pasando también todas las pruebas.

Magento no lleva de serie un sistema para borrar pedidos. Aun así la manera mas fácil sería borrarlos de golpe mediante SQL.

Aquí tenemos el script necesario para eliminar los pedidos de prueba de Magento. Para las ordenes elegiremos el que necesitemos según nuestra base de datos

/* reset orders 1 */
TRUNCATE `sales_order`;
TRUNCATE `sales_order_datetime`;
TRUNCATE `sales_order_decimal`;
TRUNCATE `sales_order_entity`;
TRUNCATE `sales_order_entity_datetime`;
TRUNCATE `sales_order_entity_decimal`;
TRUNCATE `sales_order_entity_int`;
TRUNCATE `sales_order_entity_text`;
TRUNCATE `sales_order_entity_varchar`;
TRUNCATE `sales_order_int`;
TRUNCATE `sales_order_text`;
TRUNCATE `sales_order_varchar`;
TRUNCATE `sales_quote`;
TRUNCATE `sales_quote_address`;
TRUNCATE `sales_quote_address_decimal`;
TRUNCATE `sales_quote_address_int`;
TRUNCATE `sales_quote_address_text`;
TRUNCATE `sales_quote_address_varchar`;
TRUNCATE `sales_quote_decimal`;
TRUNCATE `sales_quote_entity`;
TRUNCATE `sales_quote_entity_datetime`;
TRUNCATE `sales_quote_entity_decimal`;
TRUNCATE `sales_quote_entity_int`;
TRUNCATE `sales_quote_entity_text`;
TRUNCATE `sales_quote_entity_varchar`;
TRUNCATE `sales_quote_int`;
TRUNCATE `sales_quote_item`;
TRUNCATE `sales_quote_item_decimal`;
TRUNCATE `sales_quote_item_int`;
TRUNCATE `sales_quote_item_text`;
TRUNCATE `sales_quote_item_varchar`;
TRUNCATE `sales_quote_rule`;
TRUNCATE `sales_quote_text`;
TRUNCATE `sales_quote_varchar`;
TRUNCATE `sendfriend_log`;
TRUNCATE `tag`;
TRUNCATE `tag_relation`;
TRUNCATE `tag_summary`;
TRUNCATE `wishlist`;
TRUNCATE `log_quote`;
TRUNCATE `report_event`;

ALTER TABLE `sales_order` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_datetime` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_decimal` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_entity` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_entity_datetime` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_entity_decimal` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_entity_int` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_entity_text` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_entity_varchar` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_int` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_text` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_varchar` AUTO_INCREMENT=1;
ALTER TABLE `sales_quote` AUTO_INCREMENT=1;
ALTER TABLE `sales_quote_address` AUTO_INCREMENT=1;
ALTER TABLE `sales_quote_address_decimal` AUTO_INCREMENT=1;
ALTER TABLE `sales_quote_address_int` AUTO_INCREMENT=1;
ALTER TABLE `sales_quote_address_text` AUTO_INCREMENT=1;
ALTER TABLE `sales_quote_address_varchar` AUTO_INCREMENT=1;
ALTER TABLE `sales_quote_decimal` AUTO_INCREMENT=1;
ALTER TABLE `sales_quote_entity` AUTO_INCREMENT=1;
ALTER TABLE `sales_quote_entity_datetime` AUTO_INCREMENT=1;
ALTER TABLE `sales_quote_entity_decimal` AUTO_INCREMENT=1;
ALTER TABLE `sales_quote_entity_int` AUTO_INCREMENT=1;
ALTER TABLE `sales_quote_entity_text` AUTO_INCREMENT=1;
ALTER TABLE `sales_quote_entity_varchar` AUTO_INCREMENT=1;
ALTER TABLE `sales_quote_int` AUTO_INCREMENT=1;
ALTER TABLE `sales_quote_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_quote_item_decimal` AUTO_INCREMENT=1;
ALTER TABLE `sales_quote_item_int` AUTO_INCREMENT=1;
ALTER TABLE `sales_quote_item_text` AUTO_INCREMENT=1;
ALTER TABLE `sales_quote_item_varchar` AUTO_INCREMENT=1;
ALTER TABLE `sales_quote_rule` AUTO_INCREMENT=1;
ALTER TABLE `sales_quote_text` AUTO_INCREMENT=1;
ALTER TABLE `sales_quote_varchar` AUTO_INCREMENT=1;
ALTER TABLE `sendfriend_log` AUTO_INCREMENT=1;
ALTER TABLE `tag` AUTO_INCREMENT=1;
ALTER TABLE `tag_relation` AUTO_INCREMENT=1;
ALTER TABLE `tag_summary` AUTO_INCREMENT=1;
ALTER TABLE `wishlist` AUTO_INCREMENT=1;
ALTER TABLE `log_quote` AUTO_INCREMENT=1;
ALTER TABLE `report_event` AUTO_INCREMENT=1;

/* reset orders 2*/
SET FOREIGN_KEY_CHECKS=0;

TRUNCATE `sales_flat_creditmemo`;
TRUNCATE `sales_flat_creditmemo_comment`;
TRUNCATE `sales_flat_creditmemo_grid`;
TRUNCATE `sales_flat_creditmemo_item`;
TRUNCATE `sales_flat_invoice`;
TRUNCATE `sales_flat_invoice_comment`;
TRUNCATE `sales_flat_invoice_grid`;
TRUNCATE `sales_flat_invoice_item`;
TRUNCATE `sales_flat_order`;
TRUNCATE `sales_flat_order_address`;
TRUNCATE `sales_flat_order_grid`;
TRUNCATE `sales_flat_order_item`;
TRUNCATE `sales_flat_order_payment`;
TRUNCATE `sales_flat_order_status_history`;
TRUNCATE `sales_flat_quote`;
TRUNCATE `sales_flat_quote_address`;
TRUNCATE `sales_flat_quote_address_item`;
TRUNCATE `sales_flat_quote_item`;
TRUNCATE `sales_flat_quote_item_option`;
TRUNCATE `sales_flat_quote_payment`;
TRUNCATE `sales_flat_quote_shipping_rate`;
TRUNCATE `sales_flat_shipment`;
TRUNCATE `sales_flat_shipment_comment`;
TRUNCATE `sales_flat_shipment_grid`;
TRUNCATE `sales_flat_shipment_item`;
TRUNCATE `sales_flat_shipment_track`;
TRUNCATE `sales_invoiced_aggregated`;            # ??
TRUNCATE `sales_invoiced_aggregated_order`;        # ??
TRUNCATE `log_quote`;
 
ALTER TABLE `sales_flat_creditmemo_comment` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_creditmemo_grid` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_creditmemo_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_invoice` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_invoice_comment` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_invoice_grid` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_invoice_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_address` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_grid` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_payment` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_status_history` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_address` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_address_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_item_option` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_payment` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_shipping_rate` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_shipment` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_shipment_comment` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_shipment_grid` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_shipment_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_shipment_track` AUTO_INCREMENT=1;
ALTER TABLE `sales_invoiced_aggregated` AUTO_INCREMENT=1;
ALTER TABLE `sales_invoiced_aggregated_order` AUTO_INCREMENT=1;
ALTER TABLE `log_quote` AUTO_INCREMENT=1;

/* reset customers */
TRUNCATE `customer_address_entity`;
TRUNCATE `customer_address_entity_datetime`;
TRUNCATE `customer_address_entity_decimal`;
TRUNCATE `customer_address_entity_int`;
TRUNCATE `customer_address_entity_text`;
TRUNCATE `customer_address_entity_varchar`;
TRUNCATE `customer_entity`;
TRUNCATE `customer_entity_datetime`;
TRUNCATE `customer_entity_decimal`;
TRUNCATE `customer_entity_int`;
TRUNCATE `customer_entity_text`;
TRUNCATE `customer_entity_varchar`;
TRUNCATE `log_customer`;
TRUNCATE `log_visitor`;
TRUNCATE `log_visitor_info`;

ALTER TABLE `customer_address_entity` AUTO_INCREMENT=1;
ALTER TABLE `customer_address_entity_datetime` AUTO_INCREMENT=1;
ALTER TABLE `customer_address_entity_decimal` AUTO_INCREMENT=1;
ALTER TABLE `customer_address_entity_int` AUTO_INCREMENT=1;
ALTER TABLE `customer_address_entity_text` AUTO_INCREMENT=1;
ALTER TABLE `customer_address_entity_varchar` AUTO_INCREMENT=1;
ALTER TABLE `customer_entity` AUTO_INCREMENT=1;
ALTER TABLE `customer_entity_datetime` AUTO_INCREMENT=1;
ALTER TABLE `customer_entity_decimal` AUTO_INCREMENT=1;
ALTER TABLE `customer_entity_int` AUTO_INCREMENT=1;
ALTER TABLE `customer_entity_text` AUTO_INCREMENT=1;
ALTER TABLE `customer_entity_varchar` AUTO_INCREMENT=1;
ALTER TABLE `log_customer` AUTO_INCREMENT=1;
ALTER TABLE `log_visitor` AUTO_INCREMENT=1;
ALTER TABLE `log_visitor_info` AUTO_INCREMENT=1;

-- Reset all ID counters
TRUNCATE `eav_entity_store`;
ALTER TABLE  `eav_entity_store` AUTO_INCREMENT=1;

Tienda multi idioma con Magento

6

Si una tienda quiere ser realmente competitiva en internet es recomendable que sea multi-idioma con, como minimo, el idioma nativo e inglés.

Magento trae de serí un fantastico sistema de traducción.
Lo primero es tener claro el concepto “Vista de una tienda”. Mediante las vistas de una tienda se puede controlar lo que se muestra según la vista, pudiendo por ejemplo mostrar unos productos u otros según la opción. De todos modos el potencial y su uso real suele ser para las traducciones.

Para generar una nueva vista los pasos son

  1. Ir al menú Sistema/Configuración de tiendas
  2. Pulsar sobre el botón “Crear una vista de tienda”

Al pulsar sobre esta opción seremos redirigidos a una nueva ventana donde se nos pedira:

  1. Tienda: Magento es también multi-tieda. Tendremos que seleccionar la tienda sobre la que queremos hacer la vista. Lo normal es tener solo una
  2. Nombre: Nombre de la vista. Es lo que se mostrará en el desplegable de idiomas. Para nuestro ejemplo pondremos English.
  3. Código: Codigo interno para saber en que vista estamos. Está bien seguir una nomenclatura tipo nombretienda_idioma (p.e. tienda_en)
  4. Estado: Indica si se activa o no esa vista en el frontend
  5. Ordenar: Es el orden el que se quiere mostrar en el combo de idiomas

 

Una vez completado guardamos los cambios.

Ya tenemos creada la vista pero ¡no le hemos dicho nada del idioma!,  ¿donde se especifica?

Para especificar el idioma de la vista hay que hacer lo siguiente:

  1. Ir al menú Sistema/Configuración
  2. En el combo “Alcance de la configuración actual” situado a la izquierda, seleccionar la vista que queremos
  3. En el menu de la izquierda “General/General” seleccionar la opción “Locale Options” y cambiar el idioma en la opción “Local”. Por defecto hereda la de la tienda. Habra que quitar el check “Use Website” y cambiar al deseado.

Este mismo paso lo podemos realizar para cualquier otra configuración, como por ejemplo para el pais por defecto.

Solo nos queda guardar los cambios y si todo está habilitado nos aparecerá el nuevo idioma en el frontend.

 

Comentar que para traducir tanto, productos, como categorias, como CMS todo se basa en la elección de la vista.

 

Añadir toplink personalizado en Magento

0

Los toplinks son los menús que normalmente aparecen en la cabecera de toda tienda Magento.
Este menu es generado automáticamente a partir de las definiciones de los diferentes layouts.
Es desde los ficheros de layout desde donde habilitaremos o deshabilitaresmos estas opciones.

Partiendo de esto la manera mas elegante para añadir un nuevo item de menu es añadirlo manualmente en un fichero de layout. Lo normal es ponerlo en page.xml dentro del block root, aunque se puede poner en cualquiera según las necesidades.

Para poner un item nuevo se escribiría lo siguiente

<reference name="top.links">
	   <action method="addLink" translate="label title">
                    <label>Condiciones de compra</label>
                    <url>condiciones-compra-cestas-lotes-navidad</url>  <!-- can use full url also -->
                    <title>Condiciones de compra</title>
                    <prepare>true</prepare> <!-- set true if adding base url param -->
                    <urlParams helper="core/url/getHomeUrl"/> <!-- base url - thanks @Russ! -->
                    <!-- there are a few param you can send to do different things in <urlParams> 
                             dig into app/code/core/Mage/Core/Model/Url.php, around line 803 -->                   
 
                    <!-- below adds #add-fragment to the end of your url -->
                    <!-- <urlParams><_fragment>add-fragment</_fragment></urlParams> -->
 
                    <!-- below adds ?add-query to the end of your url -->
                    <!-- <urlParams><_query>add-fragment</_query></urlParams> -->
 
                    <!-- below gives you a new session id (i think...)-->
                    <!-- <urlParams><_nosid>true</_nosid></urlParams> -->
 
                    <!-- below replaces double quotes, single quotes, greater than, and less than signs 
                             to their respective url escaped replacements (%22, %27, %3E, %3C) -->
                    <!-- <urlParams><_escape>i'm-a-blog-url</_escape></urlParams> -->
 
                    <position>100</position>
                    <liParams/>
                    <aParams>class=""</aParams>
                    <beforeText></beforeText>
                    <afterText></afterText>
                </action>
 </reference>

Cambiar estado del pedido en magento

0

Desde magento no se puede cambiar el estado del pendido directamente.
Mientras busco una extensión he tenido que cambiar a mano las tablas
magentosales_flat_order
magentosales_flat_order_status_history
magentosales_flat_order_grid

En teoria con cambiar magentosales_flat_order es suficiente pero cambiamos tambien el resto para dejarlo bonito, sobre todo la última tabla ya que es lo que se muestra en la rejilla.

Un ejemplo para cambiar los estado de un producto con id 307 sería

update magentosales_flat_order set status=’processing’ where entity_id in
(Select order_id from magentosales_flat_order_item where product_id=307) and status=’pending’

update magentosales_flat_order_status_history set status=’processing’ where parent_id in
(Select order_id from magentosales_flat_order_item where product_id=307) and status=’pending’

update magentosales_flat_order_grid set status=’processing’ where entity_id in
(Select order_id from magentosales_flat_order_item where product_id=307) and status=’pending’

Quitar paises y ciudades de Magento

0

Para quitar ciudades que no quieres que se muestren en lo combobox de Magento es tan facil como irse a

Sistema/Configuracion

El menu de la izquierda ir a la opcion “General” y en la opcion “country options” seleccionar solo los paises que se quieren.

Ciudades en Magento

Esto se complica cuando lo que quieres es quitar solo algunas ciudades.
En este caso hay que tocar el core de Magento realizando los siguientes cambios

Copiar el fichero /app/code/core/Mage/Directory/Model/Mysql4/Region/Collection.php a la carpeta local /app/code/local/Mage/Directory/Model/Mysql4/Region/Collection.php
cambiando la siguiente linea de codigo (mas o menos la 50):

$this-&gt;_select-&gt;from(array('region'=&gt;$this-&gt;_regionTable),
    array('region_id'=&gt;'region_id', 'country_id'=&gt;'country_id', 'code'=&gt;'code', 'default_name'=&gt;'default_name')
);

y sustituirlo por

$exclude_regions = array ('AS','AK','AA','AC','AE','AK','AM','AP','FM','GU','HI','MH','MP','PW','PR','VI','AF');
 
$this-&gt;_select-&gt;from(array('region'=&gt;$this-&gt;_regionTable),
    array('region_id'=&gt;'region_id', 'country_id'=&gt;'country_id', 'code'=&gt;'code', 'default_name'=&gt;'default_name')
)
-&gt;where('code NOT IN (?)', $exclude_regions);

Otra solución sería borralo de la BD pero no es recomendable ni elegante

Jorge's RSS Feed
Go to Top