Está en la página 1de 61

ndice de contenidos

Cambiar Enlaces rpidos de horizontal a vertical............................................................................................... 4


Quitar el mensaje de bienvenida de la cabecera................................................................................................ 4
Cambiar el texto del campo de Bsqueda.......................................................................................................... 4
Cambiar Top Links a columna derecha............................................................................................................... 4
Quitar Quick Access de la Cabecera (header).................................................................................................... 5
Aadir una imagen en el lugar que ocupaban los Quick Access........................................................................6
Poner el formulario de bsqueda en la Barra de navegacin de categoras.......................................................7
Cambiar la posicin de los bloques en la columna derecha (Enlaces, Carrito de compra, Comparar Productos)
............................................................................................................................................................................ 7
Eliminar del pie el texto Aydenos a mantener sano a Magento......................................................................... 8
Pasar la suscripcin del Boletn al lado derecho y Quitarlo del lado izquierdo en el Dashboard de la Cuenta de
usuario................................................................................................................................................................ 8
Quitar el enlace en el men Mi cuenta (Dashboard) "Mis productos Descargables..........................................9
Quitar el enlace Mi Lista de Deseos de los Top Links......................................................................................... 9
Quitar el enlace Mi Cuenta de los Top Links....................................................................................................... 9
Cmo incluir enlace a formulario de Registro en el bloque Top Links...............................................................10
Como incluir un botn de registro en el formulario mini.login.phtml..................................................................10
Cambiar de Derecha a zquierda el carrito de compra...................................................................................... 11
Cambiar de Derecha a zquierda el bloque de comparacin de productos.......................................................11
Crear un bloque de contenido con los Top Links.............................................................................................. 12
Productos Configurables................................................................................................................................... 14
Extensin imprescindible.................................................................................................................................. 14
Cmo quitar la doble seleccin de atributo en productos configurables...........................................................14
Traducir la etiqueta "Price from........................................................................................................................ 16
Solucionando el problema con el cdigo HTML en el precio en informacin adicional.....................................16
Solucionando problema. El precio en la caja de aadir al carrito cuando se selecciona el atributo no cambia.
.......................................................................................................................................................................... 17
Cambiar posicin del smbolo de la moneda.................................................................................................... 18
Problema Panel de Administracin "Currency USD not found......................................................................... 18
Hacer que las imgenes cambien ms rpido en SCP..................................................................................... 18
mplementando los mpuesto............................................................................................................................ 19
Cmo ordenar el orden de aparicin de las Categoras.................................................................................... 19
Cmo ordenar el orden de aparacin de los productos.................................................................................... 20
Cmo ordenar el orden de aparicin de los atributos en los productos configurables......................................20
Modificando Magento (Ver. 1.0 octubre 2010) 1 / 61 VALENTN LPEZ MENESES
Establecer el nmero de niveles de categoras que se muestran en el men de navegacin..........................20
Mostrar las categoras listadas en una pgina.................................................................................................. 20
Modificacin en el listado de subcategoras. Mostrando a dos columnas.........................................................43
Eliminar el filtro de Categoras en Comprar Por (Shop By)...............................................................................44
Eliminar la opcin de Ordenar por en la vista de listado de productos.............................................................46
Eliminar el Bloque Comparar Productos........................................................................................................... 46
Cmo modificar las plantillas de correo............................................................................................................ 46
Quitar suscripcin a las Newsletter................................................................................................................... 47
Cambiar de Posicin el Bloque Productos Vistos Recientemente....................................................................47
Colocando Banners en Magento...................................................................................................................... 48
Creando Enlaces a Archivos PDF en pginas html........................................................................................... 49
ncrementando la seguridad de la carpeta que contiene los PDF.....................................................................49
Traducir el valor del atributo Gender................................................................................................................. 50
Traducir la etiqueta Availability: en la pgina de producto................................................................................50
Habilitando el pago por transferencia y cambiando los textos..........................................................................50
Resolviendo Problema en el Progreso de Compra: "Card Verification Please verify the card with the issuer
bank................................................................................................................................................................. 51
Eliminando del Panel de Control de Mi Cuenta los enlaces Billing Agreements y Recurring Profiles...............52
(Pendiente finalizar) Extensin Auguria Sponsorship....................................................................................... 52
El mdulo se compone de:............................................................................................................................... 52
Sobre la interfaz de administracin................................................................................................................... 53
(Pendiente) Como crear un nuevo Banner lateral............................................................................................. 54
Cambiando la fisonoma del Panel de Control del Cliente................................................................................ 54
Traduciendo "There are X items in your cart de carrito de compra de la columna...........................................56
mplementando el mdulo de pago Servired.................................................................................................... 57
Quitar el Callout del "perrito............................................................................................................................. 59
ncluir un texto en el formulario de Bsqueda Avanzada..................................................................................59
Borrando y Reiniciando Pedidos, Facturas, etc................................................................................................ 60
Hacer convivir el Envo Gratis con la Tarifa Plana de envo.............................................................................. 62
Configurando el mtodo de envo Table Rate................................................................................................... 63
Una curiosidad: Ajustando el reloj en Centos mediante comando....................................................................64
ncluir enlaces en el pie de pgina.................................................................................................................... 65
Feed RSS para el total del Catlogo................................................................................................................. 65
Extensin: aheadWorks Blog Extension........................................................................................................... 66
Corrigiendo un bug de la versin 1.0.21........................................................................................................... 66
Modificando Magento (Ver. 1.0 octubre 2010) 2 / 61 VALENTN LPEZ MENESES
Dando formato al Blog...................................................................................................................................... 66
Usando las Reglas de Promocin..................................................................................................................... 67
Migrando Magento de un Servidor a otro.......................................................................................................... 67
Actualizar Magento........................................................................................................................................... 68
Mostrar las categoras listadas en una pgina Modificacin despus de actualizar a Magento 1.5..............69
Modificando Magento (Ver. 1.0 octubre 2010) 3 / 61 VALENTN LPEZ MENESES
Modificando Magento
Todos estos cambios se realizan sobre la plantilla Default de Magento 1.4.1
Versin 1.0 del Documento (octubre de 2010)
Modificado por actualizacin de Magento en febrero de 2011.
Cambiar Enlaces rpidos de horizontal a vertical
En la hoja de estilos de la plantilla que utilicemos (en nuestro caso Default), comentamos las siguientes
lneas:
En la seccin de estilos de cabecera (HEADER)
/*.header .links li { float:left; font-size:11px; background:url(../images/bkg_pipe1.gif)
100% 60% no-repeat; padding:0 8px 0 7px; }*/
En la seccin de Estilos MSC
/*.links li { display:inline; }*/
Y el men de enlaces rpidos se despliega en vertical.
Quitar el mensaje de bienvenida de la cabecera
Buscamos en el archivo /app/design/frontend/default/mi_tema/template/page/html/header.phtml, y
localizamos el siguiente bloque:
<div class="quick-access">
<?php echo $this->getChildHtml('topSearch') ?>
<p class="welcome-msg"><?php echo $this->getWelcome()?></p>
<?php echo $this->getChildHtml('topLinks') ?>
<?php echo $this->getChildHtml('store_language') ?>
</div>
Eliminamos la lnea:
<p class="welcome-msg"><?php echo $this->getWelcome()?></p>
Cambiar el texto del campo de Bsueda
Abrimos el fichero //app/locale/es_ES/Mage_Core.csv
Bscamos el texto: Buscar en toda la tienda y lo cambiamos por el que deseemos.
Existe otro fichero en esta misma ruta Mage_CatalogSearch.csv que tambin contiene este texto, como de momento no
sabemos a que corresponde lo cambiaremos tambin por el mismo texto que hayamos cambiado en el archivo anterior.
Cambiar !op "in#s a columna derecha
Del enlace: http://www.magentocommerce.com/boards/viewthread/20267/
Abrimos el archivo /app/design/frontend/default/mi_tema/layout/page.xml Buscamos la referencia a los Top
Links que se encuentran en la siguiente lnea de cdigo:
<block type="page/template_links" name="top.links" as="topLinks"/>
Y lo ubicamos en el lugar donde se referencia la columna derecha quedando el cdigo como sigue:
<block type="core/text_list" name="right" as="right" translate="label">
<label>Right Column</label>
Modificando Magento (Ver. 1.0 octubre 2010) 4 / 61 VALENTN LPEZ MENESES
<block type="page/template_links" name="top.links" as="topLinks"/>
</block>
Por si acaso:
Fmula para cambiar posicin encontrada en el enlace:
http://www.magentocommerce.com/boards/viewthread/19748/
<?=$this->getLayout()->getBlock('top.links')->toHtml()?>
Ahora hay que darle el estilo para la columna derecha.
Quitar Quic# $ccess de la Cabecera %header&
Editamos el archivo app/design/frontend/default/mi_tema/template/page/html/header.phtml y bscamos el
siguiente cdigo:
<div class="header-container">
<div class="header">
<?php if ($this->getIsHomePage()):?>
<h1 class="logo"><strong><?php echo $this->getLogoAlt() ?></strong><a
href="<?php echo $this->getUrl('') ?>" title="<?php echo $this-
>getLogoAlt() ?>" class="logo"><img src="<?php echo $this->getLogoSrc() ?>"
alt="<?php echo $this->getLogoAlt() ?>" /></a></h1>
<?php else:?>
<a href="<?php echo $this->getUrl('') ?>" title="<?php echo $this-
>getLogoAlt() ?>" class="logo"><strong><?php echo $this->getLogoAlt() ?
></strong><img src="<?php echo $this->getLogoSrc() ?>" alt="<?php echo $this-
>getLogoAlt() ?>" /></a>
<?php endif?>
<div class="quick-access">
<?php echo $this->getChildHtml('topSearch') ?>
<?php echo $this->getChildHtml('topLinks') ?
<?php echo $this->getChildHtml('store_language') ?>
</div>
<?php echo $this->getChildHtml('topContainer'); ?>
</div>
</div>
Eliminamos las lneas que hacen referencia a la divisin quick access, que son esta:
<div class="quick-access">
<?php echo $this->getChildHtml('topSearch') ?>
<?php echo $this->getChildHtml('topLinks') ?
<?php echo $this->getChildHtml('store_language') ?>
</div>
con lo que el cdigo nos quedara del siguiente modo:
<div class="header">
<?php if ($this->getIsHomePage()):?>
<h1 class="logo"><strong><?php echo $this->getLogoAlt() ?></strong><a
href="<?php echo $this->getUrl('') ?>" title="<?php echo $this-
>getLogoAlt() ?>" class="logo"><img src="<?php echo $this->getLogoSrc() ?>"
alt="<?php echo $this->getLogoAlt() ?>" /></a></h1>
<?php else:?>
<a href="<?php echo $this->getUrl('') ?>" title="<?php echo $this-
>getLogoAlt() ?>" class="logo"><strong><?php echo $this->getLogoAlt() ?
></strong><img src="<?php echo $this->getLogoSrc() ?>" alt="<?php echo $this-
>getLogoAlt() ?>" /></a>
<?php endif?>
<?php echo $this->getChildHtml('topContainer'); ?>
</div>
Modificando Magento (Ver. 1.0 octubre 2010) 5 / 61 VALENTN LPEZ MENESES
$'adir una imagen en el lugar ue ocupaban los Quic# $ccess
Me ayud el enlace: http://www.magentocommerce.com/boards/viewthread/51564/
Podemos hacerlo incluyendo una imagen que abarque el tamao necesario que va desde donde acaba el
logo hasta el final derecho de la cabecera, pero esto nos presentar el problema de los ajustes cuando varan
los tamaos de pantalla.
La mejor forma de hacerlo es incluyendo una imagen ms que se posicione en el lado derecho de la
cabecera (lugar que ocupaban los quick access). Para ello editamos el archivo:
app/design/frontend/default/mi_tema/template/page/html/header.phtml, y aadimos una etiqueta div del
siguiente modo (justo en el lugar que ocupanban los quick access:
<div class="logoright">
<img src="<?php echo $this->getSkinUrl('images/cabecera.gif') ?>"
alt="Alimentos de calidad" />
</div>
Bien la imagen incluida se llama en el ejemplo cabecera.gif, y adems le hemos asignado un estilo de la hoja
de estilo que se llama logoright. De este modo tambin podremos controlar determinados aspectos sobre
como se muestra la imagen en la misma hoja de estilos. En el ejemplo el cdigo lo hemos incluido en la
plantilla Default en la seccin HEADER, justo entre el estilo .header h1.logo y el estilo .header .quick-access.
La lnea que hemos incluido es tal y como sigue:
.header .logoright { float:right; margin:40px 0 3px 3px; }
Con lo que en el contexto el cdigo de este archivo queda como sigue
<div class="header-container">
<div class="header">
<?php if ($this->getIsHomePage()):?>
<h1 class="logo"><strong><?php echo $this->getLogoAlt() ?></strong><a
href="<?php echo $this->getUrl('') ?>" title="<?php echo $this-
>getLogoAlt() ?>" class="logo"><img src="<?php echo $this->getLogoSrc() ?>"
alt="<?php echo $this->getLogoAlt() ?>" /></a></h1>
<?php else:?>
<a href="<?php echo $this->getUrl('') ?>" title="<?php echo $this-
>getLogoAlt() ?>" class="logo"><strong><?php echo $this->getLogoAlt() ?
></strong><img src="<?php echo $this->getLogoSrc() ?>" alt="<?php echo $this-
>getLogoAlt() ?>" /></a>
<?php endif?>
<div class="logoright">
<img src="<?php echo $this->getSkinUrl('images/cabecera.gif') ?>"
alt="Alimentos de calidad" />
</div>
<?php echo $this->getChildHtml('topContainer'); ?>
</div>
</div>
<?php echo $this->getChildHtml('topMenu') ?>
(oner el formulario de bsueda en la Barra de navegaci)n de
categor*as
Tenemos que incluir la lnea de cdigo siguiente:
<?=$this->getLayout()->getBlock('top.search')->toHtml()?>
En el archivo: /app/design/frontend/default/mi_tema/template/catalog/navigation/top.phtml
Lo haremos de tal modo que el archivo mencionado quede as:
<div class="nav-container">
<ul id="nav">
<?php echo $_menu; ?>
<li class="mini-search"><?=$this->getLayout()->getBlock('top.search')-
>toHtml()?></li>
Modificando Magento (Ver. 1.0 octubre 2010) 6 / 61 VALENTN LPEZ MENESES
</ul>
</div>
Si nos fijamos en la lnea de cdigo introducida le hemos asignado a la etiqueta <li> una nueva clase que
tendremos que crear dentro de la seccin de Navigation de la hoja de estilos. Este nuevo estilo que
agregamos nos centrar verticalmente el formulario de bsqueda y lo alinear a la derecha.
#nav .mini-search {float:right; margin:0 auto; padding:3px 0 0 0; }
Fijmonos tambin dnde hemos ubicado esta lnea:
.nav-container { border-bottom:3px solid #866b07; background:#d7a900
url(../images/bkg_nav0.jpg) 50% 0 repeat-y; }
#nav { width:918px; margin:0 auto; padding:0 16px; font-size:13px; }
#nav .mini-search {float:right; margin:0 auto; padding:3px 0 0 0; }
/* ALL Levels */ /* Style consistent throughout all nav levels */
Ahora vamos a perfeccionar nuestro formulario de bsqueda y elimnaremos la etiqueta (label) que adems
aparece en ingls. remos al archivo:
/app/design/frontend/default/mi_tema/template/catalogsearch/form.mini.pahtml
y buscamos la siguiente lnea:
<label for="search"><?php echo $this->__('Search:') ?></label>
La comentamos y listo:
<!-- <label for="search"><?php echo $this->__('Search:') ?></label> -->
Cambiar la posici)n de los bloues en la columna derecha %Enlaces+
Carrito de compra+ Comparar (roductos&
Lo haremos todo desde los archivos de layuot (xml).
Primero, en el archivo page.xml debemos aadir lo siguiente a la lnea que incluimos previamente para
colocar los enlces en esta columna:
<block type="page/template_links" before="-" name="top.links" as="topLinks"/>
La instruccin before=- fuerza a que este bloque se coloque en primera posicin en la columna. No obstante
si guardamos y actualizamos nuestra pgina nos damos cuenta de que no vara el orden. Hay que tocar un
par de archivos ms.
Abrimos el archivo checkout.xml y buscamos el siguiente cdigo:
<reference name="right">
<block type="checkout/cart_sidebar" name="cart_sidebar"
template="checkout/cart/sidebar.phtml" before="-">
Nos fijamos en la instruccin before=-, que tambin fuerza a que el carrito de compra se posicione el
primero, y adems tendr prioridad por tratarse de un mdulo que dispone de su propio layout (o eso creo),
bien lo cambiamos para que el carrito quede por encima del modulo de comparacin de productos, por lo que
el cdigo nos queda:
<reference name="right">
<block type="checkout/cart_sidebar" name="cart_sidebar"
template="checkout/cart/sidebar.phtml" before="catalog.compare.sidebar">
El siguiente archivo es catalog.xml, buscamos el siguiente cdigo:
<reference name="right">
<block type="catalog/product_compare_sidebar" before="cart_sidebar"
name="catalog.compare.sidebar" template="catalog/product/compare/sidebar.phtml"/>
<block type="core/template" name="right.permanent.callout"
template="callouts/right_col.phtml">
Bien pues aqu vemos que el comparar productos tiene la instruccin before, con lo que entra en
contradiccin con la modificacin que hicimos en el archivo checkout.xml, simplemente cambiamos la
instruccin por after... y listo.
Modificando Magento (Ver. 1.0 octubre 2010) 7 / 61 VALENTN LPEZ MENESES
Eliminar del pie el texto $,denos a mantener sano a Magento
Editamos el archivo: /app/design/frontend/default/mi_tema/template/page/html/footer.phtml
y comentamos la siguiente lnea:
<?php echo $this->getChildHtml() ?>
<!-- <p class="bugs"><?php echo $this->__('Help Us to Keep Magento
Healthy') ?> - <a href="http://www.magentocommerce.com/bug-tracking"
onclick="this.target='_blank'"><strong><?php echo $this->__('Report All
Bugs') ?></strong></a> <?php echo $this->__('(ver. %s)',
Mage::getVersion()) ?></p>-->
<address><?php echo $this->getCopyright() ?></address>
(asar la suscripci)n del Bolet*n al lado derecho , Quitarlo del lado
izuierdo en el -ashboard de la Cuenta de usuario
Con lo que haremos a continuacin pasaremos el bloque de suscripcin a boletines (Newletters) a la columna
derecha, evidentemente aparecer cuando la columna derecha aparezca. De este modo, por ejemplo, al
pasarlo a la columna derecha, las newletters nos desaparecern de la pgina de inicio de la cuenta de
usuario puesto que este diseo est preparado para dos lumnas y una a la izquierda.
Para hacer esto procederemos del siguiente modo:
Editamos el archivo /app/design/frontend/default/mitema/layout/newsletter.xml y buscamos las siguientes
lneas:
<default>
<!-- Mage_Newsletter -->
<reference name="left">
<block type="newsletter/subscribe" after="_" name="right.newsletter"
template="newsletter/subscribe.phtml"/>
</reference>
</default>
Donde dice "left ponemos "right. Con este simple cambio hemos hecho todo lo dicho.
Quitar el enlace en el men Mi cuenta %-ashboard& .Mis productos
-escargables/
Editamos el archivo app/design/frontend/default/mitema/layout/downloadable.xml
Y comentamos las siguientes lneas:
<layout version="0.1.0">
<!-- <customer_account>
<reference name="customer_account_navigation">
<action method="addLink" translate="label"
module="downloadable"><name>downloadable_products</name><path>downloadable/cu
stomer/products</path><label>! "ownloadable #roducts</label></action>
</reference>
</customer_account>
-->
<downloadable_customer_products translate="label">
Quitar el enlace Mi "ista de -eseos de los !op "in#s
Editamos el archivo /app/design/frontend/default/mi_tema/layout/wishlist.xml.
Y comentamos el siguiente bloque de cdigo que quedara as:
<!--
<reference name="top.links">
Modificando Magento (Ver. 1.0 octubre 2010) 8 / 61 VALENTN LPEZ MENESES
<block type="wishlist/links" name="wishlist_link">
<action method="addWishlistLink"></action>
</block>
</reference>
-->
Quitar el enlace Mi Cuenta de los !op "in#s
Editamos el archivo /app/design/frontend/default/mi_tema/layout/customer.xml.
Y comentamos la siguiente lnea de cdigo que quedara as (en negrita):
<default>
<!-- Mage_Customer -->
<reference name="top.links">
<!--<action method="addLink" translate="label title"
module="customer"><label>! $ccount</label><url
helper="customer/get$ccount%rl"/><title>!
$ccount</title><prepare/><url#arams/><position>&'</position></action>-->
</reference>
</default>
C)mo incluir enlace a formulario de 0egistro en el bloue !op "in#s
Editamos el fichero /app/design/frontend/default/mi_tema/layout/customer.xml
Buscamos el siguiente bloque de cdigo:
<!--
Load this update on every page when customer is logged out
-->
<customer_logged_out>
<reference name="right">
<block type="customer/form_login" name="customer_form_mini_login"
before="-" template="customer/form/mini.login.phtml"/>
</reference>
<reference name="top.links">
<action method="addLink" translate="label title"
module="customer"><label>Log In</label><url
helper="customer/getLoginUrl"/><title>Log
In</title><prepare/><urlParams/><position>100</position></action>
</reference>
<remove name="wishlist_sidebar"></remove>
<remove name="reorder"></remove>
</customer_logged_out>
Y aadimos la siguiente lnea justo en la ubicacin que se indica, la lnea est en negrita:
<reference name="top.links">
<action method="addLink" translate="label title"
module="customer"><label>Log In</label><url
helper="customer/getLoginUrl"/><title>Log
In</title><prepare/><urlParams/><position>100</position></action>
<action method="addLink" translate="label title"
module="customer"><label>(egister</label><url
helper="customer/get(egister%rl"/><title>(egister</title><prepare/><url#arams
/><position>)'</position></action>
</reference>
Como incluir un bot)n de registro en el formulario mini1login1phtml
El formulario mini-login por defecto no se publica, lo podemos encontrar en el fichero
Modificando Magento (Ver. 1.0 octubre 2010) 9 / 61 VALENTN LPEZ MENESES
/app/design/frontend/default/mi_tema/layout/customer.xml, y observaremos que viene comentado:
<!--
Load this update on every page when customer is logged out
-->
<customer_logged_out>
<reference name="right">
<block type="customer/form_login" name="customer_form_mini_login" before="-"
template="customer/form/mini.login.phtml"/>
</reference>
Bien, si queremos publicarlo (sobre todo para ver como queda la inclusin de un nuevo botn en este
bloque), simplmente descomentamos el cdigo.
Para incluir el botn tenemos que editar el fichero de plantilla correspondiente a este mini formulario:
/app/design/frontend/default/mi_tema/template/customer/form
Y justo despues de la etiqueta que cierra el formulario (</form) y antes de la que etiqueta con la que finaliza el
fichero (</div>), incluimos el siguiente cdigo:
<div class="actions">
<button class="button"
onclick="location.href='/customer/account/create'"><span><span><?php echo
$this->__('Register') ?></span></span></button>
</div>
Ahora solo tenemos que ajustar los estilos que le estamos aplicando al botn.
Cambiar de -erecha a 2zuierda el carrito de compra
/app/design/frontend/default/mi_tema/layout/checkout.xml
Buscamos este cdigo:
<reference name="right">
<block type="checkout/cart_sidebar" name="cart_sidebar"
template="checkout/cart/sidebar.phtml" before="catalog.compare.sidebar">
<action
method="addItemRender"><type>simple</type><block>checkout/cart_item_renderer<
/block><template>checkout/cart/sidebar/default.phtml</template></action>
<action
method="addItemRender"><type>grouped</type><block>checkout/cart_item_renderer
_grouped</block><template>checkout/cart/sidebar/default.phtml</template></act
ion>
<action
method="addItemRender"><type>configurable</type><block>checkout/cart_item_ren
derer_configurable</block><template>checkout/cart/sidebar/default.phtml</temp
late></action>
</block>
</reference>
Cambiamos "right por "left.
Cambiar de -erecha a 2zuierda el bloue de comparaci)n de productos
Editamos el fichero l/app/design/frontend/default/mi_tema/layout/catalog.xml
Modificando Magento (Ver. 1.0 octubre 2010) 10 / 61 VALENTN LPEZ MENESES
La lnea que ubica el bloque est en el siguiente trozo de cdigo (resalto la lnea en negrita).
<reference name="right">
<block t!pe="catalog/product_compare_sidebar" after="cart_sidebar"
name="catalog*compare*sidebar" template="catalog/product/compare/sidebar*phtml"/>
<block type="core/template" name="right.permanent.callout"
template="callouts/right_col.phtml">
<action
method="setImgSrc"><src>images/media/col_right_callout.jpg</src></action>
<action method="setImgAlt" translate="alt" module="catalog"><alt>Keep your
eyes open for our special Back to School items and save A LOT!</alt></action>
</block>
</reference>
Bien, cortamos esta lnea (en negrita) y la ubicamos en el bloque izquierda, justo encima de este bloque,
quedara as:
<reference name="left">
<block t!pe="catalog/product_compare_sidebar" after="cart_sidebar"
name="catalog*compare*sidebar"
template="catalog/product/compare/sidebar*phtml"/>
<block type="core/template" name="left.permanent.callout"
template="callouts/left_col.phtml">
<action
method="setImgSrc"><src>images/media/col_left_callout.jpg</src></action>
<action method="setImgAlt" translate="alt"
module="catalog"><alt>Our customer service is available 24/7. Call us at
(555) 555-0123.</alt></action>
<action method="setLinkUrl"><url>checkout/cart</url></action>
</block>
Crear un bloue de contenido con los !op "in#s
Esto me llev una semana entera dndome cabezazos. Para colmo en el foro pasaban de mis continuas
preguntas.
El problema es que los Top Links son referenciados llamando al archivo links.phtml y no top.links.phtml, como
se puede observar en el archivo page.xml del layout:
<block type="page/template_links" before="-" name="top.links" as="topLinks"/>
Pues bien, si modificaba el archivo links para incluirle aspecto de bloque resultaba que, como es normal, este
aspecto o estilo tambin se aplicaba a los enlaces del footer puesto que tanto estos como los top links tienen
el mismo archivo de origen en la plantilla, es decir, links.phtml.
Para solventar esto hay que replicar el archivo links.phtml de tal modo que cuando sea llamado por los Top
Links, el archivo referenciado sea diferente del archivo referenciado por el footer.
A esta rplica le aplicamos los estilos de un bloque de contenido mediante divs y luego solo tenemos que
referenciar la rplica modificada y crear los estilos personalizados.
As pues, vamos all:
(rimer paso3 Creamos la rplica del archivo links.phtml y le aplicamos los estilos que posteriormente
crearemos. En la ruta de links.phtml creamos el archivo links2.phtml con el mismo contenido que el original y
con las siguientes modificaciones. Se muestra el archivo final:
<?php $_links = $this->getLinks(); ?>
<?php if(count($_links)>0): ?>
<div class="block block-account-per">
Modificando Magento (Ver. 1.0 octubre 2010) 11 / 61 VALENTN LPEZ MENESES
<div class="block-title-per">
<strong><span>OPCIONES DEL USUARIO</span></strong>
</div>
<div class="block-content-per">
<ul class=""block-content-per li""<?php if($this->getName()): ?> id="<?php
echo $this->getName() ?>"<?php endif;?>>
<?php foreach($_links as $_link): ?>
<li<?php if($_link->getIsFirst()||$_link->getIsLast()): ?> class="<?
php if($_link->getIsFirst()): ?>first<?php endif; ?><?php if($_link-
>getIsLast()): ?> last<?php endif; ?>"<?php endif; ?> <?php echo $_link-
>getLiParams() ?>><?php echo $_link->getBeforeText() ?><a href="<?php echo
$_link->getUrl() ?>" title="<?php echo $_link->getTitle() ?>" <?php echo
$_link->getAParams() ?>><?php echo $_link->getLabel() ?></a><?php echo
$_link->getAfterText() ?></li>
<?php endforeach; ?>
</ul>
</div>
</div>
<?php endif; ?>
Nos fijamos en el archivo y observamos los siguiente:
1. Hemos incluido un div en el que indicamos que la clase de estilo a aplicar es "block block-account-
per. Es un estilo que deberemos aadir a la hoja de estilos, y que contendrs el resto de estilos
declarados: block-title-per, block-content-per y block-content-per li
2. Hemos incluido un ttulo de forma manual. Ojo con esto puesto que si tenemos la web en varios
idiomas hacerlo as no nos sirve, puesto que tendramos que en lugar de incluir el ttulo como quien
dice "a pelo, tendramos que declarar la variable correspondiente y hacerla traducible. No me
preguntes cmo, an no lo se.
3. Por ltimo cerramos los nuevos divs que hemos creado.
4egundo paso3 vamos a referenciar nuestro bloque desde el archivo page.xml del layout. Pero fijaos como
los hacemos porque me volv loco hasta dar con la clave:
<block type="page/template_links" before="-" name="top.links" as="topLinks"
template="page/template/links2.phtml"/>
Lo nico que cambiamos respecto a la lnea inicial es la ruta del archivo de la plantilla, el resto es igual. Es
decir en block type, pese a que referencia la ruta, no la cambiamos la dejamos como incialmente, tampoco
cambiamos el nombre (name) ni la forma de referenciarlo (as), slo la ruta y el archivo al que apunta la
referencia.
Esta lnea, en mi caso, la he incluido en el bloque derecho por lo que su ubicacin es como sigue:
<block type="core/text_list" name="right" as="right" translate="label">
<label>Right Column</label>
<!-- <block type="page/template_links" before="-"
name="top.links" as="topLinks"/>-->
<block type="page/template_links" before="-"
name="top.links" as="topLinks" template="page/template/links2.phtml"/>
</block>
Hay que observar que la lnea comentada es precisamente la original, que previamente se encontraba dentro
de la cabecera pero que yo la cambi al lboque derecho anteriormente.
!ercer paso3 por ltimo, debemos crear los estilos que hemos asignado a links2.phtml. Yo me he limitado a
copiar el estilo de la seccin Block: Account, pegndolo como una nueva seccin justo debajo de la orginal, y
posteriormente renombrndolo:
/* Block: Account Personalizado */
.block-account-per { border-color:#bbb; }
.block-account-per .block-title-per { background:#fc9d36 url(../images/bkg_block-
title-account.gif) 0 100% repeat-x; border:0; padding:3px 10px; }
.block-account-per .block-title-per strong { font-size:12px; color:#fff; }
Modificando Magento (Ver. 1.0 octubre 2010) 12 / 61 VALENTN LPEZ MENESES
.block-account-per .block-content-per { background:#fbfaf6; padding:7px 10px 7px; }
.block-account-per .block-content-per li a { display:block; border-bottom:1px solid
#ddd; padding:3px 0; color:#5f5d5c; text-decoration:none !important; }
.block-account-per .block-content-per li a:hover { color:#ea7900; }
.block-account-per .block-content-per li.last a { border-bottom:0; }
.block-account-per .block-content-per li.current { border-bottom:1px solid #ddd;
padding:3px 0; color:#ea7900; }
.block-account-per .block-content-per li.current.last { border-bottom:0; }
Y eso es todo. Cunto trabajo me cost, cunto tiempo, para algo que as visto parece muy simple.
(roductos Configurables
Extensin imprescindible
4imple Configurable (roducts1 Esta extensin permite que los productos configurables cojan el precio del
producto simple asociado y no el folln que monta Magento al respecto. Pero tambin permite que los datos
del producto simple asociado sean mostrados cuando se selecciona el atributo que le corresponde, inclusive
la imagen. Lo que la hace una extensin imprescindible.
Cmo quitar la doble seleccin de atributo en productos configurables
Si tenemos instalado el Simple Configurable Products puede ocurrir que al crear un producto configurable con
al menos un atributo para seleccionar por el cliente, nos aparezca dos veces el desplegable de la seleccin,
que adems estn relacionados porque mientras no seleccionemos la opcin en el primero que nos parece,
no podremos hacer seleccin en el segundo, lo que lleva a confusin, adems de suponer un aso intil para
el cliente. Bien para quitar el que nos parece primero, lo que haremos es editar el archivo
//app/design/frontend/default/mitema/template/catalog/product/view/type/configurable.phtml
El contenido completo de este archivo es:
<?php
/**
* Magento
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License (AFL 3.0)
* that is bundled with this package in the file LICENSE_AFL.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/afl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@magentocommerce.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade Magento to newer
* versions in the future. If you wish to customize Magento for your
* needs please refer to http://www.magentocommerce.com for more information.
*
* @category design
* @package base_default
* @copyright Copyright (c) 2009 Irubin Consulting Inc. DBA Varien
(http://www.varien.com)
* @license http://opensource.org/licenses/afl-3.0.php Academic Free
License (AFL 3.0)
*/
?>
Modificando Magento (Ver. 1.0 octubre 2010) 13 / 61 VALENTN LPEZ MENESES
<?php
$_product = $this->getProduct();
$_attributes = Mage::helper('core')->decorateArray($this-
>getAllowAttributes());
?>
<?php if ($_product->isSaleable() && count($_attributes)):?>
<dl>
<?php foreach($_attributes as $_attribute): ?>
<dt><label><?php echo $_attribute->getLabel() ?><span
class="required">&nbsp;*</span></label></dt>
<dd<?php if ($_attribute->decoratedIsLast){?> class="last"<?php }?>>
<select name="super_attribute[<?php echo $_attribute-
>getAttributeId() ?>]" id="attribute<?php echo $_attribute-
>getAttributeId() ?>" class="required-entry super-attribute-select">
<option><?php echo $this->__('Choose an Option...') ?></option>
</select>
</dd>
<?php endforeach; ?>
</dl>
<script type="text/javascript">
var spConfig = new Product.Config(<?php echo $this->getJsonConfig() ?>);
</script>
<?php endif;?>
Pues borramos o comentamos las siguientes lneas con lo que el archivo no queda as (en el caso de
borrado):
<?php
/**
* Magento
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License (AFL 3.0)
* that is bundled with this package in the file LICENSE_AFL.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/afl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@magentocommerce.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade Magento to newer
* versions in the future. If you wish to customize Magento for your
* needs please refer to http://www.magentocommerce.com for more information.
*
* @category design
* @package base_default
* @copyright Copyright (c) 2009 Irubin Consulting Inc. DBA Varien
(http://www.varien.com)
* @license http://opensource.org/licenses/afl-3.0.php Academic Free
License (AFL 3.0)
*/
?>
<?php
$_product = $this->getProduct();
$_attributes = Mage::helper('core')->decorateArray($this-
>getAllowAttributes());
?>
<?php if ($_product->isSaleable() && count($_attributes)):?>
Modificando Magento (Ver. 1.0 octubre 2010) 14 / 61 VALENTN LPEZ MENESES

<script type="text/javascript">
var spConfig = new Product.Config(<?php echo $this->getJsonConfig() ?>);
</script>
<?php endif;?>
Traducir la etiqueta Price from
Editamos el archivo //app/design/frontend/default/mitema/locale/es_ES/translate.csv
Aadimos al final la siguiente lnea:
"Price From:","Desde:"
Por ejemplo.
Solucionando el problema con el cdigo HTML en el precio en
informacin adicional
(rimera opci)n3 obtenida del foro http://www.magentocommerce.com/boards/viewthread/199860/#t253096
Empleo esta porque la segunda opcin como veremos ms adelante, aportada por Matt Dean, implica tocar
el core. As que es ms arriesgada.
Just created a simple solution to this problem
in /app/design/frontend/default/yourtemplate/template/catalog/product/view/attributes.phtml
replace line 47:
<td class="data"><?php echo $_helper->productAttribute($_product,
$_data['value'], $_data['code']) ?></td>
with:
<td class="data"><?php echo html_entity_decode($_helper-
>productAttribute($_product, $_data['value'], $_data['code'])); ?> </td>
the html_entity_decode will replace the > and other html special chars with < " and >
Anyway it works for me now
Esta opcin ha funcionado correctamente. La segunda ni siquiera la he probado, pero aqu est:
4egunda opci)n3 De un correo recibido de Matt Dean.
For the display of Price in the additional attributes table it just looks like a Magento bug to me.
My quick fix would be to do the following:
in: app/code/core/Mage/Catalog/Helper/Output.php change line 106 from:
if ($attribute && ($attribute->getFrontendInput() != 'media_image')
to
if ($attribute && ($attribute->getFrontendInput() != 'media_image' &&
$attribute->getFrontendInput() != 'price')
Works for me so far.
Matt
!ercera opci)n3 esta opcin es una contestacin a la pregunta que plante en el foro.
http://www.magentocommerce.com/boards/viewthread/199860/#t255291
The actual cause of this issue is sort of a Rendering bug.
Modificando Magento (Ver. 1.0 octubre 2010) 15 / 61 VALENTN LPEZ MENESES
n the method product$ttribute located on line 101 for 1.4.0 and line 120 for 1.4.1.x in this fle
magento_install/app/code/core/Mage/Catalog/Helper/Output.php the value of the attribute is html escaped.
The real fix comes in adding " 55 %6attribute78get9rontend2nput%& :; <price=& " to the if statement on line 106
in 1.4.0 and line 123 in 1.4.1.x in the Output.php file.
t has been filed as a bug here:
http://www.magentocommerce.com/bug-tracking/issue?issue=9577
Signature
- Magento ver. 1.3.2.4, 1.4.0.1
Solucionando problema El precio en la ca!a de a"adir al carrito cuando
se selecciona el atributo no cambia
La respuesta me la da San Matt Dean, en un correo electrnico cuya primera parte dice:
So did you try changing price_clone.phtml so that it uses
$this->getPrice($_product, false)
instead of
$this->getPrice($_product, false, '_clone')
Cambiar posicin del s#mbolo de la moneda
http://www.magentocommerce.com/boards/viewthread/57000/
En espaol
http://foros.mgnt.es/showthread.php?1492-Cambiar-posicion-simbolo-del-_
r a la carpeta lib/Zend/Locale/data y edtar el fichero es.xml
Buscar la cadena de texto:
<pattern> #,##0.00</pattern>
y cambiar la posicin de #,##0.00 delante de los smbolos.
Pero a mi me aparece: <pattern>#,##0.00 </pattern>
y las no se para que son. Avisar que en este caso el editor V puede jugarte una mala pasada, y eso es lo
que me pasaba a mi. Yo al final tuve que editar el fichero en otro ordenador con Linux y subirlo al servidor (ojo
con los permisos al subirlo).
Pero antes de hacer nada, debis vaciar una serie de directorios, puesto que aunque tengis la cach de
Magento deshabilitada parece que en este caso como que no le afecta. Si no vaciis esas carpeta os podris
encontrar con la desagradable sorpresa de no poder entrar en el panel de administracin porque os arroja un
error, justo el que se indica en el epgrafe siguiente. Tambin debemos limpiar la cach del navegador.
Parece que el smbolo de moneda es muy delicado.
Los directorios a vaciar son:
/var/cache
/var/locks
/var/report
Yo por si acaso tambin borreo el directorio de sesiones /var/session
Modificando Magento (Ver. 1.0 octubre 2010) 16 / 61 VALENTN LPEZ MENESES
Ahora limpiamos la cach, temporales, etc... del navegador y ya debe funcionar.
(roblema (anel de $dministraci)n .Currenc, >4- not found/
Este problema me surge cuando intento cambiar la posicin del smbolo Euro. Para hacer esto hay que tocar
el archivo /lib/Zend/locale/data/es.xml, y el smbolo C est representado por unos caracteres extraos. Pero
esta forma no funciona, as que vuelvo al archivo original, pero an as me da el mismo error.
La forma de repararlo consiste en borrar el contenido de las siguientes carpetas:
/var/cache
/var/locks
/var/report
Luego limpiamos la cach del navegador y accedemos al panel de control.
Hacer que las im$genes cambien m$s r$pido en SCP
Me lo dijo Matt Dean basta con poner a no la opcin de configuracin de la extensin SCP "Update gallery
images as well as main image?.
De este modo las imgenes tardan mucho menos en cargar y es casi inmediato.
2mplementando los 2mpuesto
Del enlace: http://lab.redmallorca.com/como-configurar-el-iva-en-magento/
Primero nos vamos a Ventas->mpuestos->mpuestos al producto. Aqu daremos de alta un nuevo tipo de
impuesto al producto. En nuestro caso debemos dar de alta ds tipos de impuestos:
1. Reducido (VA al 8%) para los productos comercializados.
2. Normal (VA al 18%) para el transporte.
Estos tipos de impuestos los tendremos disponibles en la ficha de los productos.
Ahora vamos a dar de alta los impuestos al cliente, que ser el tipo de impuesto que le asignaremos a cada
uno de nuestros grupos de clientes. Accedemos a Ventas->mpuestos->mpuestos al cliente y damos de alta
un nuevo tipo, en este caso slo tendremos Cliente final. En el apartado de clientes->Grupos de Clientes del
panel de administracin podemos asignar a cada grupo de nuestros clientes una tasa de impuestos diferente.
De hecho es necesario hacer esto para que los impuestos sean aplicados.
Ahora vamos a especificar las zonas y tasas correspondientes para la gestin de los impuestos de nuestra
tienda. Para ello accedemos a Ventas->mpuestos->Gestionar zonas de impuesto y tasas. Aqu podemos
especificar las tasas de impuesto de cada pa*s+ provincia o c)digo postal de los clientes de nuestra
tienda. A las provincias que estn exentas de impuestos, les asignaremos una tasa de 0.
Disponemos de la opcin de exportar e importar la informacin de impuestos para poder automatizar estos
pasos a travs de un editor de archivos csv. Puede ser muy til para agilizar la operacin y no tener que
repetir pasos si queremos, por ejemplo, poner una nueva tasa al 4% o al 7%.
Por ltimo, vamos a enlazar toda la informacin que hemos creado, dando de alta una nueva regla de
impuesto. Para ello, accedemos a Ventas->mpuestos->Gestionar reglas de impuestos. Simplemente le
damos un nombre a la regla y vamos seleccionando las opciones que nos aparecen, entre ellas veremos los
impuestos al cliente e impuestos al producto que hemos creado, as como las tasas.
Ya hemos creado las reglas de impuestos necesarias, que recordemos combinan impuestos al cliente,
impuestos al producto, y tasas de impuestos que estn creadas en virtud de las zonas (pas, provincia e
incluso cdigos postales). De esta forma es casi imposible que no podamos establecer los impuestos por
raros y tergiversados que estos sean.
Modificando Magento (Ver. 1.0 octubre 2010) 17 / 61 VALENTN LPEZ MENESES
Pero nos queda un aspecto importante para poner en marcha nuestros impuestos. Lo primero es que
debemos tener correctamente ajustados o configurados los siguientes parmetros en Configuracin (Sistema
->Configuracin).
1. Cofiguracin General -> General. Aqu debemos establecer el pas por defecto de la tienda y los
dems parmetros que nos solicitan sobre opciones locales y paises en los que se habilita la venta.
2. Configuracin General ->Ventas -> mpuestos. Aqu estableceremos todas las opciones generales
sobre la aplicacin de impuestos, incluyendo si incluiremos los precios con VA, si se mostrarn con
VA o sin VA, etc. Esto ltimo es interesante saberlo puesto que nos permitir meter los precios de
los artculos incluso antes de establecer las relgas de impuestos, ya que los podremos meter con VA
o si l y en la opcin de configuracin le diremos a Magento si lo hemos incluido con o sin VA.
C)mo ordenar el orden de aparici)n de las Categor*as
Las categoras aparecen en Magento segn el orden en que se encuentren en el panel de administracin. As
si queremos que una categora parezca antes que otra, solo debemos, desde el panel de administracin,
picar y arrastrar la categora y situarla por encima de la categora que queramos aparezca despus.
C)mo ordenar el orden de aparaci)n de los productos
Del enlace: http://www.elblogdemagento.com/ordenar-por-mejor-valor/
Magento ofrece de forma predeterminada 3 formas de ordenacin: Mejor valor, Precio y Orden alfabtico.
Entonces, de qu forma Magento determina el orden para "Mejor valor? Pues de forma manual. Desde el
backend, el administrador puede darle un valor a la posicin de aparicin de cada producto y as "ordenar
manualmente los productos que ms le interese mostrar primero, segundo. hasta el ltimo. Y desde
dnde damos los valores a cada producto? Est un poco escondido, pero sigue estos pasos:
Paso 1. Accede a tu panel de administracin de Magento.
Paso 2. Accede al men Catlogo / Administrar Categoras
Paso 3. Selecciona una categora que te interese ordenar. Puedes dar un orden distinto segn en la categora
que te encuentres.
Paso 4. En las pestaas de la categora, selecciona "Productos de la categora.
Paso 5. En la tabla que lista los productos, observa la columna de la derecha, "Posicin. Aqu es donde
puedes determinar los valores por los cuales ordenar los productos.
C)mo ordenar el orden de aparici)n de los atributos en los productos
configurables
Sencillo, el mismo orden que pongamos para Gestin de Etiquetas / opciones ser la que aparezca en el
front-end.
Establecer el nmero de niveles de categor*as ue se muestran en el
men de navegaci)n
Del enlace: http://foros.mgnt.es/showthread.php?2032-Mostrar-solo-el-primer-nivel-de-las-categorias-en-el-
top-menu
Sistema - Catlogo - Catlogo - Categoria Padre y en Mxima profundidad le pones hasta el nivel que quers
que aparezca ( el cero es el infinito).
Modificando Magento (Ver. 1.0 octubre 2010) 18 / 61 VALENTN LPEZ MENESES
Mostrar las categor*as listadas en una pgina
Exiten dos posibles soluciones.
4oluci)n ?3 Magento ?1@ 1 Creaci)n de Bloues Estticos donde se incorporan Aidget de Enlaces a
categor*as1 Posteriormente en las categoras Madre hay que habilitar dichos bloques en Display Settings y
seleccionar Solo Bloque esttico. En el bloque esttico seleccionamos el que hallamos creado.
El inconveniente de este mtodo es que hay que crear las pginas (Bloques Estticos) de forma manual por
cada categora madre. No obstante, si las categoras no son muchas esta solucin nos da mucha flexibilidad
en el diseo.
4oluci)n B3 Modificar el core
La ventaja de esta solucin es que se hace de forma automatizada el listado para todas las categoras.
Del enlace: http://foros.mgnt.es/showthread.php?1840-Soluci%F3n-ver-categor
%EDas&highlight=solucion+categorias
Bueno esto est hecho para monos amaestrados como yo.no pregunten si se puede hacer esto o lo otro.
No entiendo absolutamente nada de los cdigos. Pero funciona de maravillas.
Bajar los dos archivos adjuntos y hacer lo siguiente. r a magento
app/code/Mage/Catalog/Model/Resource/Eav/Mysql4/Category.php y reemplazarlo por el adjunto
Category.php (antes hacer backup del que ya se encuentra en tu web).
Tambien copiar el archivo adjunto sub_category_listing.phtml en app/design/frontend/
default/tutemplate/template/catalog/navigaton/sub_navigation.html
Despues ir a CMS > Static Blocks. Click en Add New Block y llenar as
Block Title: Sub Category Listing
dentifier: sub_category_listing
Status: Enabled
Content: {{block type="catalog/navigation" template="catalog/navigation/sub_category_listing.phtml"}}
Click Save
Ahora hay que habilitar el static blok en las categoras madres
r a: Catalog > Manage Categories.
r a "General nformation y elegir una imagen para la categora en examinar
Entonces clikear en la categora madre que tiene subcategorias, ir a la solapa "Display Settings.
Llenar los campos de la siguiente manera:
Display Mode: Static Block Only
CMS Block: Sub Category Listing
s Anchor: Yes
Contenido de los ficheros:
Contenido del archivo Categor,1php %ocupa BC pDginas&
<+php
/**
* Magento
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
Modificando Magento (Ver. 1.0 octubre 2010) 19 / 61 VALENTN LPEZ MENESES
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@magentocommerce.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade Magento to newer
* versions in the future. If you wish to customize Magento for your
* needs please refer to http://www.magentocommerce.com for more information.
*
* @category Mage
* @package Mage_Catalog
* @copyright Copyright (c) 2009 Irubin Consulting Inc. DBA Varien
(http://www.varien.com)
* @license http://opensource.org/licenses/osl-3.0.php Open Software
License (OSL 3.0)
*/
/**
* Catalog category model
*
* @category Mage
* @package Mage_Catalog
* @author Magento Core Team <core@magentocommerce.com>
*/
class Mage_Catalog_Model_Resource_Eav_Mysql4_Category extends
Mage_Catalog_Model_Resource_Eav_Mysql4_Abstract
{
/**
* Category tree object
*
* @var Varien_Data_Tree_Db
*/
protected $_tree;
/**
* Catalog products table name
*
* @var string
*/
protected $_categoryProductTable;
/**
* Id of 'is_active' category attribute
*
* @var int
*/
protected $_isActiveAttributeId = null;
/**
* Store id
*
* @var int
*/
protected $_storeId = null;
/**
* Class constructor
Modificando Magento (Ver. 1.0 octubre 2010) 20 / 61 VALENTN LPEZ MENESES
*/
public function __construct()
{
$resource = Mage::getSingleton('core/resource');
$this->setType('catalog_category')
->setConnection(
$resource->getConnection('catalog_read'),
$resource->getConnection('catalog_write')
);
$this->_categoryProductTable = $this-
>getTable('catalog/category_product');
}
/**
* Set store Id
*
* @param integer $storeId
* @return Mage_Catalog_Model_Resource_Eav_Mysql4_Category
*/
public function setStoreId($storeId)
{
$this->_storeId = $storeId;
return $this;
}
/**
* Return store id
*
* @return integer
*/
public function getStoreId()
{
if (is_null($this->_storeId)) {
return Mage::app()->getStore()->getId();
}
return $this->_storeId;
}
/**
* Retrieve category tree object
*
* @return Varien_Data_Tree_Db
*/
protected function _getTree()
{
if (!$this->_tree) {
$this->_tree = Mage::getResourceModel('catalog/category_tree')
->load();
}
return $this->_tree;
}
/**
* Process category data before delete
* update children count for parent category
* delete child categories
*
* @param Varien_Object $object
* @return Mage_Catalog_Model_Resource_Eav_Mysql4_Category
*/
protected function _beforeDelete(Varien_Object $object)
Modificando Magento (Ver. 1.0 octubre 2010) 21 / 61 VALENTN LPEZ MENESES
{
parent::_beforeDelete($object);
/**
* Update children count for all parent categories
*/
$parentIds = $object->getParentIds();
$childDecrease = $object->getChildrenCount() + 1; // +1 is itself
$this->_getWriteAdapter()->update(
$this->getEntityTable(),
array('children_count'=>new Zend_Db_Expr('`children_count`-'.
$childDecrease)),
$this->_getWriteAdapter()->quoteInto('entity_id IN(?)',
$parentIds)
);
/**
* Recursion use a lot of memmory, that why we run one request for
delete children
*/
/*if ($child = $this->_getTree()->getNodeById($object->getId())) {
$children = $child->getChildren();
foreach ($children as $child) {
$childObject = Mage::getModel('catalog/category')-
>load($child->getId())->delete();
}
}*/
$select = $this->_getWriteAdapter()->select()
->from($this->getEntityTable(), array('entity_id'))
->where($this->_getWriteAdapter()->quoteInto('`path` LIKE ?',
$object->getPath().'/%'));
$childrenIds = $this->_getWriteAdapter()->fetchCol($select);
if (!empty($childrenIds)) {
$this->_getWriteAdapter()->delete(
$this->getEntityTable(),
$this->_getWriteAdapter()->quoteInto('entity_id IN (?)',
$childrenIds)
);
}
/**
* Add deleted children ids to object
* This data can be used in after delete event
*/
$object->setDeletedChildrenIds($childrenIds);
return $this;
}
/**
* Process category data before saving
* prepare path and increment children count for parent categories
*
* @param Varien_Object $object
* @return Mage_Catalog_Model_Resource_Eav_Mysql4_Category
*/
protected function _beforeSave(Varien_Object $object)
{
parent::_beforeSave($object);
Modificando Magento (Ver. 1.0 octubre 2010) 22 / 61 VALENTN LPEZ MENESES
if (!$object->getId()) {
$object->setPosition($this->_getMaxPosition($object->getPath()) +
1);
$path = explode('/', $object->getPath());
$level = count($path);
$object->setLevel($level);
if ($level) {
$object->setParentId($path[$level - 1]);
}
$object->setPath($object->getPath() . '/');
$toUpdateChild = explode('/',$object->getPath());
$this->_getWriteAdapter()->update(
$this->getEntityTable(),
array('children_count'=>new
Zend_Db_Expr('`children_count`+1')),
$this->_getWriteAdapter()->quoteInto('entity_id IN(?)',
$toUpdateChild)
);
}
return $this;
}
/**
* Process category data after save category object
* save related products ids and update path value
*
* @param Varien_Object $object
* @return Mage_Catalog_Model_Resource_Eav_Mysql4_Category
*/
protected function _afterSave(Varien_Object $object)
{
/**
* Add identifier for new category
*/
if (substr($object->getPath(), -1) == '/') {
$object->setPath($object->getPath() . $object->getId());
$this->_savePath($object);
}
$this->_saveCategoryProducts($object);
return parent::_afterSave($object);
}
/**
* Update path field
*
* @param Mage_Catalog_Model_Category $object
* @return Mage_Catalog_Model_Resource_Eav_Mysql4_Category
*/
protected function _savePath($object)
{
if ($object->getId()) {
$this->_getWriteAdapter()->update(
$this->getEntityTable(),
array('path'=>$object->getPath()),
$this->_getWriteAdapter()->quoteInto('entity_id=?', $object-
>getId())
Modificando Magento (Ver. 1.0 octubre 2010) 23 / 61 VALENTN LPEZ MENESES
);
}
return $this;
}
protected function _getMaxPosition($path)
{
$select = $this->getReadConnection()->select();
$select->from($this->getTable('catalog/category'), 'MAX(position)');
$select->where('path ?', new Zend_Db_Expr("regexp '{$path}/[0-9]+\
$'"));
$result = 0;
try {
$result = (int) $this->getReadConnection()->fetchOne($select);
} catch (Exception $e) {
}
return $result;
}
/**
* Save category products
*
* @param Mage_Catalog_Model_Category $category
* @return Mage_Catalog_Model_Resource_Eav_Mysql4_Category
*/
protected function _saveCategoryProducts($category)
{
$category->setIsChangedProductList(false);
/**
* new category-product relationships
*/
$products = $category->getPostedProducts();
/**
* Example re-save category
*/
if (is_null($products)) {
return $this;
}
/**
* old category-product relationships
*/
$oldProducts = $category->getProductsPosition();
$insert = array_diff_key($products, $oldProducts);
$delete = array_diff_key($oldProducts, $products);
/**
* Find product ids which are presented in both arrays
*/
$update = array_intersect_key($products, $oldProducts);
/**
* Use for update just products with changed position
*/
$update = array_diff_assoc($update, $oldProducts);
$productTable = $this->getTable('catalog/product');
$productUpdateSql = sprintf('UPDATE `%s` AS `e` SET
`category_ids`=(SELECT
Modificando Magento (Ver. 1.0 octubre 2010) 24 / 61 VALENTN LPEZ MENESES
GROUP_CONCAT(`category_id`) FROM `%s` AS `cp` WHERE
`cp`.`product_id`=`e`.`entity_id`)
WHERE `e`.`entity_id` IN(?)', $productTable, $this-
>_categoryProductTable);
/**
* Delete products from category
*
*/
if (!empty($delete)) {
$deleteIds = array_keys($delete);
$this->_getWriteAdapter()->delete($this->_categoryProductTable,
$this->_getWriteAdapter()->quoteInto('product_id in(?)',
$deleteIds) .
$this->_getWriteAdapter()->quoteInto(' AND category_id=?',
$category->getId())
);
$sql = $this->_getWriteAdapter()->quoteInto($productUpdateSql,
$deleteIds);
$this->_getWriteAdapter()->query($sql);
}
/**
* Add products to category
*
*/
if (!empty($insert)) {
$insertSql = array();
foreach ($insert as $k => $v) {
$insertSql[] = '('.(int)$category->getId().','.(int)$k.','.
(int)$v.')';
}
$sql = sprintf(
'INSERT INTO `%s` (`category_id`,`product_id`,`position`)
VALUES%s',
$this->_categoryProductTable,
join(',', $insertSql)
);
$this->_getWriteAdapter()->query($sql);
$insertIds = array_keys($insert);
$sql = $this->_getWriteAdapter()->quoteInto($productUpdateSql,
$insertIds);
$this->_getWriteAdapter()->query($sql);
}
/**
* Update product positions in category
*
*/
if (!empty($update)) {
foreach ($update as $k => $v) {
$cond = array(
$this->_getWriteAdapter()->quoteInto('category_id=?',
(int)$category->getId()),
$this->_getWriteAdapter()->quoteInto('product_id=?',
(int)$k)
);
$where = join(' AND ', $cond);
$bind = array(
Modificando Magento (Ver. 1.0 octubre 2010) 25 / 61 VALENTN LPEZ MENESES
'position' => (int)$v
);
$this->_getWriteAdapter()->update($this-
>_categoryProductTable, $bind, $where);
}
}
if (!empty($insert) || !empty($delete)) {
$productIds = array_unique(array_merge(array_keys($insert),
array_keys($delete)));
Mage::dispatchEvent('catalog_category_change_products', array(
'category' => $category,
'product_ids' => $productIds
));
}
if (!empty($insert) || !empty($update) || !empty($delete)) {
$category->setIsChangedProductList(true);
$categoryIds = explode('/', $category->getPath());
$this->refreshProductIndex($categoryIds);
}
return $this;
}
/**
* Get store identifiers where category is presented
*
* @param Mage_Catalog_Model_Category $category
* @return array
*/
public function getStoreIds($category)
{
if (!$category->getId()) {
return array();
}
$nodePath = $this->_getTree()
->getNodeById($category->getId())
->getPath();
$nodes = array();
foreach ($nodePath as $node) {
$nodes[] = $node->getId();
}
$stores = array();
$storeCollection = Mage::getModel('core/store')->getCollection()-
>loadByCategoryIds($nodes);
foreach ($storeCollection as $store) {
$stores[$store->getId()] = $store->getId();
}
$entityStoreId = $category->getStoreId();
if (!in_array($entityStoreId, $stores)) {
array_unshift($stores, $entityStoreId);
}
if (!in_array(0, $stores)) {
array_unshift($stores, 0);
}
return $stores;
Modificando Magento (Ver. 1.0 octubre 2010) 26 / 61 VALENTN LPEZ MENESES
}
/**
* Get positions of associated to category products
*
* @param Mage_Catalog_Model_Category $category
* @return array
*/
public function getProductsPosition($category)
{
$select = $this->_getWriteAdapter()->select()
->from($this->_categoryProductTable, array('product_id',
'position'))
->where('category_id=?', $category->getId());
$positions = $this->_getWriteAdapter()->fetchPairs($select);
return $positions;
}
/**
* Get chlden categories count
*
* @param int $categoryId
* @return int
*/
public function getChildrenCount($categoryId)
{
$select = $this->_getReadAdapter()->select()
->from($this->getEntityTable(), 'children_count')
->where('entity_id=?', $categoryId);
$child = $this->_getReadAdapter()->fetchOne($select);
return $child;
}
/**
* Move category to another parent
*
* @param int $categoryId
* @param int $newParentId
* @return Mage_Catalog_Model_Resource_Eav_Mysql4_Category
*/
public function move($categoryId, $newParentId)
{
$category = Mage::getModel('catalog/category')->load($categoryId);
$oldParent = $category->getParentCategory();
$newParent = Mage::getModel('catalog/category')->load($newParentId);
$childrenCount = $this->getChildrenCount($category->getId()) + 1;
// update children count of new parents
$parentIds = explode('/', $newParent->getPath());
$this->_getWriteAdapter()->update(
$this->getEntityTable(),
array('children_count' => new Zend_Db_Expr("`children_count` +
{$childrenCount}")),
$this->_getWriteAdapter()->quoteInto('entity_id IN (?)',
$parentIds)
);
// update children count of old parents
Modificando Magento (Ver. 1.0 octubre 2010) 27 / 61 VALENTN LPEZ MENESES
$parentIds = explode('/', $oldParent->getPath());
$this->_getWriteAdapter()->update(
$this->getEntityTable(),
array('children_count' => new Zend_Db_Expr("`children_count` -
{$childrenCount}")),
$this->_getWriteAdapter()->quoteInto('entity_id IN (?)',
$parentIds)
);
// update parent id
$this->_getWriteAdapter()->query("UPDATE
{$this->getEntityTable()} SET parent_id = {$newParent->getId()}
WHERE entity_id = {$categoryId}");
return $this;
}
/**
* Check if category id exist
*
* @param int $id
* @return bool
*/
public function checkId($id)
{
$select = $this->_getReadAdapter()->select()
->from($this->getEntityTable(), 'entity_id')
->where('entity_id=?', $id);
return $this->_getReadAdapter()->fetchOne($select);
}
/**
* Check array of category identifiers
*
* @param array $ids
* @return array
*/
public function verifyIds(array $ids)
{
$validIds = array();
$select = $this->_getWriteAdapter()->select()
->from($this->getEntityTable(), 'entity_id')
->where('entity_id IN(?)', $ids);
$query = $this->_getWriteAdapter()->query($select);
while ($row = $query->fetch()) {
$validIds[] = $row['entity_id'];
}
return $validIds;
}
/**
* Get count of active/not active children categories
*
* @param Mage_Catalog_Model_Category $category
* @param bool $isActiveFlag
* @return int
*/
public function getChildrenAmount($category, $isActiveFlag = true)
{
$storeId = Mage::app()->getStore()->getId();
$attributeId = $this->_getIsActiveAttributeId();
Modificando Magento (Ver. 1.0 octubre 2010) 28 / 61 VALENTN LPEZ MENESES
$table = Mage::getSingleton('core/resource')-
>getTableName('catalog/category') . '_int';
$select = $this->_getReadAdapter()->select()
->from(array('m'=>$this->getEntityTable()),
array('COUNT(m.entity_id)'))
->joinLeft(
array('d'=>$table),
"d.attribute_id = '{$attributeId}' AND d.store_id = 0 AND
d.entity_id = m.entity_id",
array()
)
->joinLeft(
array('c'=>$table),
"c.attribute_id = '{$attributeId}' AND c.store_id =
'{$storeId}' AND c.entity_id = m.entity_id",
array()
)
->where('m.path like ?', $category->getPath() . '/%')
->where('(IFNULL(c.value, d.value) = ?)', $isActiveFlag);
return $this->_getReadAdapter()->fetchOne($select);
}
/**
* Get "is_active" attribute identifier
*
* @return int
*/
protected function _getIsActiveAttributeId()
{
if (is_null($this->_isActiveAttributeId)) {
$select = $this->_getReadAdapter()->select()
->from(array('a'=>$this->getTable('eav/attribute')),
array('attribute_id'))
->join(array('t'=>$this->getTable('eav/entity_type')),
'a.entity_type_id = t.entity_type_id')
->where('entity_type_code = ?', 'catalog_category')
->where('attribute_code = ?', 'is_active');
$this->_isActiveAttributeId = $this->_getReadAdapter()-
>fetchOne($select);
}
return $this->_isActiveAttributeId;
}
/**
* Rebuild associated products index
*
* @param array $categoryIds
* @return Mage_Catalog_Model_Resource_Eav_Mysql4_Category
*/
public function refreshProductIndex($categoryIds = array(), $productIds =
array(), $storeIds = array())
{
/**
* Prepare visibility and status attributes information
*/
$statusAttribute = Mage::getSingleton('eav/config')-
>getAttribute('catalog_product', 'status');
$visibilityAttribute = Mage::getSingleton('eav/config')-
Modificando Magento (Ver. 1.0 octubre 2010) 29 / 61 VALENTN LPEZ MENESES
>getAttribute('catalog_product', 'visibility');
$statusAttributeId = $statusAttribute->getId();
$visibilityAttributeId = $visibilityAttribute->getId();
$statusTable = $statusAttribute->getBackend()->getTable();
$visibilityTable = $visibilityAttribute->getBackend()-
>getTable();
/**
* Select categories data
*/
$select = $this->_getReadAdapter()->select()
->from($this->getTable('catalog/category'))
->order('level')
->order('path');
if (is_array($categoryIds) && !empty($categoryIds)) {
$select->where('entity_id IN (?)', $categoryIds);
} elseif (is_numeric($categoryIds)) {
$select->where('entity_id=?', $categoryIds);
}
$categories = $this->_getWriteAdapter()->fetchAll($select);
$storesCondition = '';
if (!empty($storeIds)) {
$storesCondition = $this->_getWriteAdapter()->quoteInto(
' AND s.store_id IN (?)', $storeIds
);
}
/**
* Get information about stores root categories
*/
$stores = $this->_getWriteAdapter()->fetchAll("
SELECT
s.store_id, s.website_id, c.path AS root_path
FROM
{$this->getTable('core/store')} AS s,
{$this->getTable('core/store_group')} AS sg,
{$this->getTable('catalog/category')} AS c
WHERE
sg.group_id=s.group_id
AND c.entity_id=sg.root_category_id
{$storesCondition}
");
$indexTable = $this->getTable('catalog/category_product_index');
foreach ($stores as $storeData) {
$storeId = $storeData['store_id'];
$websiteId = $storeData['website_id'];
$rootPath = $storeData['root_path'];
$productCondition = '';
if (!empty($productIds)) {
$productCondition = $this->_getWriteAdapter()->quoteInto(
' AND product_id IN (?)', $productIds
);
}
$insProductCondition = str_replace('product_id', 'cp.product_id',
$productCondition);
Modificando Magento (Ver. 1.0 octubre 2010) 30 / 61 VALENTN LPEZ MENESES
foreach ($categories as $category) {
$categoryId = $category['entity_id'];
$path = $category['path'];
$this->_getWriteAdapter()->delete(
$indexTable,
'category_id='.$categoryId. ' AND store_id='.$storeId.
$productCondition
);
if (strpos($path.'/', $rootPath.'/') === false) {
continue;
}
$query = "INSERT INTO {$indexTable}
(`category_id`, `product_id`, `position`, `is_parent`,
`store_id`, `visibility`)
SELECT
{$categoryId},
cp.product_id,
cp.position,
{$categoryId}=cp.category_id as is_parent,
{$storeId},
IFNULL(t_v.value, t_v_default.value)
FROM
{$this->getTable('catalog/category_product')} AS cp
INNER JOIN {$this->getTable('catalog/product_website')} AS pw
ON pw.product_id=cp.product_id AND
pw.website_id={$websiteId}
INNER JOIN {$visibilityTable} AS `t_v_default`
ON (t_v_default.entity_id = cp.product_id)
AND
(t_v_default.attribute_id='{$visibilityAttributeId}')
AND t_v_default.store_id=0
LEFT JOIN {$visibilityTable} AS `t_v`
ON (t_v.entity_id = cp.product_id)
AND (t_v.attribute_id='{$visibilityAttributeId}')
AND (t_v.store_id='{$storeId}')
INNER JOIN {$statusTable} AS `t_s_default`
ON (t_s_default.entity_id = cp.product_id)
AND (t_s_default.attribute_id='{$statusAttributeId}')
AND t_s_default.store_id=0
LEFT JOIN {$statusTable} AS `t_s`
ON (t_s.entity_id = cp.product_id)
AND (t_s.attribute_id='{$statusAttributeId}')
AND (t_s.store_id='{$storeId}')
WHERE category_id IN(
SELECT entity_id FROM {$this-
>getTable('catalog/category')}
WHERE entity_id = {$category['entity_id']} OR path LIKE
'{$path}/%')
AND (IFNULL(t_s.value,
t_s_default.value)=".Mage_Catalog_Model_Product_Status::STATUS_ENABLED.")
{$insProductCondition}
GROUP BY product_id
ORDER BY is_parent desc";
$this->_getWriteAdapter()->query($query);
}
}
Modificando Magento (Ver. 1.0 octubre 2010) 31 / 61 VALENTN LPEZ MENESES
return $this;
}
public function findWhereAttributeIs($entityIdsFilter, $attribute,
$expectedValue)
{
$select = $this->_getReadAdapter()->select()
->from($attribute->getBackend()->getTable(), array('entity_id'))
->where('attribute_id = ?', $attribute->getId())
->where('value = ?', $expectedValue)
->where('entity_id in (?)', $entityIdsFilter);
return $this->_getReadAdapter()->fetchCol($select);
}
/**
* Get products count in category
*
* @param unknown_type $category
* @return unknown
*/
public function getProductCount($category)
{
$productTable =Mage::getSingleton('core/resource')-
>getTableName('catalog/category_product');
$select = $this->getReadConnection()->select();
$select->from(
array('main_table'=>$productTable),
array(new Zend_Db_Expr('COUNT(main_table.product_id)'))
)
->where('main_table.category_id = ?', $category->getId())
->group('main_table.category_id');
$counts =$this->getReadConnection()->fetchOne($select);
return intval($counts);
}
/**
* Deprecated since 1.1.7
*
* @param Varien_Object $object
* @return Mage_Catalog_Model_Resource_Eav_Mysql4_Category
*/
protected function _saveCountChidren($object)
{
$chidren = $object->getChildren();
if (strlen($chidren)>0) {
$chidrenCount = count(explode(',', $chidren));
} else {
$chidrenCount = 0;
}
$this->_getWriteAdapter()->update($this->getEntityTable(),
array('children_count'=>$chidrenCount),
$this->_getWriteAdapter()->quoteInto('entity_id=?', $object-
>getId())
);
return $this;
Modificando Magento (Ver. 1.0 octubre 2010) 32 / 61 VALENTN LPEZ MENESES
}
/**
* Deprecated
*
* @param Varien_Object $object
* @return unknown
*/
protected function _saveInStores(Varien_Object $object)
{
if (!$object->getMultistoreSaveFlag()) {
$stores = $object->getStoreIds();
foreach ($stores as $storeId) {
if ($object->getStoreId() != $storeId) {
$newObject = clone $object;
$newObject->setStoreId($storeId)
->setMultistoreSaveFlag(true)
->save();
}
}
}
return $this;
}
/**
* Deprecated
*/
protected function _updateCategoryPath($category, $path)
{
return $this;
if ($category->getNotUpdateDepends()) {
return $this;
}
foreach ($path as $pathItem) {
if ($pathItem->getId()>1 && $category->getId() != $pathItem-
>getId()) {
$category = Mage::getModel('catalog/category')
->load($pathItem->getId())
->save();
}
}
return $this;
}
/**
* Retrieve categories
*
* @param integer $parent
* @param integer $recursionLevel
* @param boolean|string $sorted
* @param boolean $asCollection
* @param boolean $toLoad
* @return Varien_Data_Tree_Node_Collection|
Mage_Catalog_Model_Resource_Eav_Mysql4_Category_Collection
*/
public function getCategories($parent, $recursionLevel = 0,
$sorted=false, $asCollection=false, $toLoad=true)
{
$tree = Mage::getResourceModel('catalog/category_tree');
/** @var $tree Mage_Catalog_Model_Resource_Eav_Mysql4_Category_Tree
*/
Modificando Magento (Ver. 1.0 octubre 2010) 33 / 61 VALENTN LPEZ MENESES
$nodes = $tree->loadNode($parent)
->loadChildren($recursionLevel)
->getChildren();
$tree->addCollectionData(null, $sorted, $parent, $toLoad, true);
if ($asCollection) {
return $tree->getCollection();
}
return $nodes;
}
/**
* Return parent categories of category
*
* @param Mage_Catalog_Model_Category $category
* @return array
*/
public function getParentCategories($category)
{
$pathIds = array_reverse(explode(',', $category->getPathInStore()));
$categories = Mage::getResourceModel('catalog/category_collection')
->setStore(Mage::app()->getStore())
->addAttributeToSelect('name')
->addAttributeToSelect('url_key')
->addAttributeToSelect('image')
->addFieldToFilter('entity_id', array('in'=>$pathIds))
->addFieldToFilter('is_active', 1)
->load()
->getItems();
return $categories;
}
/**
* Enter description here...
*
* @param Mage_Catalog_Model_Category $category
* @return unknown
*/
public function getChildrenCategories($category)
{
$collection = $category->getCollection();
/* @var $collection
Mage_Catalog_Model_Resource_Eav_Mysql4_Category_Collection */
$collection->addAttributeToSelect('url_key')
->addAttributeToSelect('name')
->addAttributeToSelect('image')
->addAttributeToSelect('all_children')
->addAttributeToSelect('is_anchor')
->addAttributeToFilter('is_active', 1)
->addIdFilter($category->getChildren())
->setOrder('position', 'ASC')
->joinUrlRewrite()
->load();
return $collection;
}
/**
* Return children ids of category
*
* @param Mage_Catalog_Model_Category $category
Modificando Magento (Ver. 1.0 octubre 2010) 34 / 61 VALENTN LPEZ MENESES
* @param boolean $recursive
* @return array
*/
public function getChildren($category, $recursive = true)
{
$attributeId = $this->_getIsActiveAttributeId();
$select = $this->_getReadAdapter()->select()
->from(array('m' => $this->getEntityTable()), 'entity_id')
->joinLeft(
array('d' => $this->getEntityTable() . '_int'),
"d.attribute_id = '{$attributeId}' AND d.store_id = 0 AND
d.entity_id = m.entity_id",
array()
)
->joinLeft(
array('c' => $this->getEntityTable() . '_int'),
"c.attribute_id = '{$attributeId}' AND c.store_id =
'{$category->getStoreId()}' AND c.entity_id = m.entity_id",
array()
)
->where('(IFNULL(c.value, d.value) = ?)', '1')
->where('path LIKE ?', "{$category->getPath()}/%");
if (!$recursive) {
$select->where('level <= ?', $category->getLevel() + 1);
}
$_categories = $this->_getReadAdapter()->fetchAll($select);
$categoriesIds = array();
foreach ($_categories as $_category) {
$categoriesIds[] = $_category['entity_id'];
}
return $categoriesIds;
// $this->_getTree()->load();
// return $this->_getTree()->getChildren($category->getId(), false);
}
/**
* Return all children ids of category (with category id)
*
* @param Mage_Catalog_Model_Category $category
* @return array
*/
public function getAllChildren($category)
{
$children = $this->getChildren($category);
$myId = array($category->getId());
$children = array_merge($myId, $children);
return $children;
// $this->_getTree()->load();
// $children = $this->_getTree()->getChildren($category->getId());
//
// $myId = array($category->getId());
// if (is_array($children)) {
// $children = array_merge($myId, $children);
// } else {
// $children = $myId;
// }
//
Modificando Magento (Ver. 1.0 octubre 2010) 35 / 61 VALENTN LPEZ MENESES
// return $children;
}
/**
* Check is category in list of store categories
*
* @param Mage_Catalog_Model_Category $category
* @return boolean
*/
public function isInRootCategoryList($category)
{
$innerSelect = $this->_getReadAdapter()->select()
->from($this->getEntityTable(), new Zend_Db_Expr("CONCAT(path, '/
%')"))
->where('entity_id = ?', Mage::app()->getStore()-
>getRootCategoryId());
$select = $this->_getReadAdapter()->select()
->from($this->getEntityTable(), 'entity_id')
->where('entity_id = ?', $category->getId())
->where(new Zend_Db_Expr("path LIKE ({$innerSelect-
>__toString()})"));
return (bool) $this->_getReadAdapter()->fetchOne($select);
// $tree = $this->_getTree();
// $tree->load();
// $children = $tree->getChildren(Mage::app()->getStore()-
>getRootCategoryId(), true);
// if (!in_array($category->getId(), $children)) {
// return false;
// }
// return true;
}
}
Contenido del archivo subEcategor,Elisting1phtml
<?php
$category = $this->getCurrentCategory();
$id = $category->getId();
?>
<?php $_categories=$this->getCurrentChildCategories(); ?>
<?php foreach ($_categories as $_category): ?>
<div class="categorylisting">
<?php if($_category->getIsActive()): ?>
<div class="product-image">
<a href="<?php echo $_category->getURL() ?>"
title="<?php echo $this->htmlEscape($_category->getName()) ?>">
<img src="<?php echo $_category->getImageUrl() ?>" width="140" alt="<?php
echo $this->htmlEscape($_category->getName()) ?>" />
</a>
<?php /* echo "Find this item->" */ ?>
</div>
<h2><a href="<?php echo $_category->getURL() ?>"
title="<?php echo $this->htmlEscape($_category->getName()) ?>"><?php echo
$this->htmlEscape($_category->getName()) ?></a></h2>
<?php echo $_category->getDescription() ?>
<?php endif; ?>
</div>
<?php endforeach; ?>
Modificando Magento (Ver. 1.0 octubre 2010) 36 / 61 VALENTN LPEZ MENESES
Modificacin en el listado de subcategor#as Mostrando a dos columnas
Esta modificacin viene en el mismo enlace mencionado al comienzo, y consiste en cambiar el fichero
sub_category_listing.phtml ara que muestre las subcategoras en dos solumans. Tambin ah y que incluir
nuevos estilos en la hoja de estilos:
El contenido del fichero sub_category_listing.phtml es el siguiente:
<?php
$category = $this->getCurrentCategory();
$id = $category->getId();
?>
<?php $_categories=$this->getCurrentChildCategories(); ?>
<div class="list-type-grid category-listing">
<?php $i=0; foreach ($_categories as $_category): ?>
<?php if($i==0): ?>
<ol class="grid-row">
<?php endif; ?>
<li class="item">
<?php if($_category->getIsActive()): ?>
<div class="product-image">
<a href="<?php echo $_category->getURL() ?>" title="<?php
echo $this->htmlEscape($_category->getName()) ?>">
<img src="<?php echo
$_category->getImageUrl() ?>" width="140" alt="<?php echo $this-
>htmlEscape($_category->getName()) ?>" />
</a>
</div>
<h5><a href="<?php echo $_category->getURL() ?>" title="<?php echo
$this->htmlEscape($_category->getName()) ?>"><?php echo $this->htmlEscape($_category-
>getName()) ?></a></h5>
<?php echo $_category->getDescription() ?>
<?php endif; ?>
</li>
<?php ($i = $i+1); ?>
<?php if($i==2):?>
</ol>
<?php ($i = 0); ?>
<?php endif; ?>
<?php endforeach ?>
<script type="text/javascript">decorateGeneric($$('.grid-row'), ['last',
'odd', 'even']);</script>
</div>
Y los estilos nuevos son:
.list-type-grid { }
.category-listing { line-height:1.35em; }
.list-type-grid .grid-row { }
.list-type-grid li.item { float:left; line-height:1.6em; overflow:hidden; padding:10px
5px; width:227px; }
Eliminar el filtro de Categor*as en Comprar (or %4hop B,&
El problema que se presenta es que los atributos que hemos creado podemos hacer que sean usados para
establecer este filtro o no (activando Layered Navigation en la ficha del atributo), pero esto en el caso de las
categoras no ocurre, puesto que no son un atributo, o bien son un atributo en si usado por defecto en
Magento.
Fpci)n ?1 Go funciona.
En el siguiente enlace aparecen varias posiblidades, yo he escogido la de "mjeebu, porque las otras parece
ser que no funcionan con la nueva versin de Magento, o bien consisten en toca el Core, cosa que no me
Modificando Magento (Ver. 1.0 octubre 2010) 37 / 61 VALENTN LPEZ MENESES
apetece mucho y es poco aconsejable. La direccin del enlace es la siguiente:
http://www.magentocommerce.com/boards/viewthread/28220/P15/
Y dice lo siguiente:
Otro camino para hacer esto es va CSS, necesitar aadir el siguiente trozo de cdigo al archivo siguiente:
\app\design\frontend\default\theme\template\catalog\layer\view.phtml
<?php
$tmpTitle = $this->htmlEscape($this->__($_filter->getName()));
$tmpTitle = strtolower($tmpTitle);
$tmpTitle = preg_replace("/[\s]+/", "-", $tmpTitle);
?>
<dt class="<?=$tmpTitle?>"><?php echo $this->__($_filter->getName()) ?></dt>
<dd class="<?=$tmpTitle?>">
<?php echo $_filter->getHtml() ?>
</dd>
Lo que la primera parte hace es tomar el "ttulo" de los atributos (Fijado en la seccin de Gestin de atributos
en back end) y cambia el "ttulo" a minsculas y los espacios por "-" (en el caso de que el nombre del atributo
tenga ms de una palabra).
Entonces la segunda parte inyecta la variable $ tmpTitle como una etiqueta de "clase" para su uso por CSS
con un poco de magia!.
Ahora todo los que se necestia hacer es ir al archivo CSS y por ejemplo, si queremos ocultar un atributo
como la Categora, hacer una entrada CSS como la siguiente:
.layered-nav .category { display: none; }
O si queremos ocultar el precio:
.layered-nav .price { display: none; }
He encontrado que esta tcnica me da ms control general. Por ejemplo, en algunas categoras, puede ser
que se desee mostrar Precio mientras que en otras no.
Fpci)n B1 Go funciona
Del enlace: http3HHIII1imagedia1comHBC?CHC@Hremove7categories7from7shop7b,7options7in7magentoH
Consiste en sustituir el contenido del archivo:
app/design/frontend/default/your_template/template/catalog/layer/view.phtml
Por el siguiente cdigo:
<?php
/**
* Category layered navigation
*
* @see Mage_Catalog_Block_Layer_View
*/
?>
<?php if($this->canShowBlock()): ?>
<div class=box layered-nav>
<div class=head>
<h3><?php echo $this->__('Shop by') ?></h3>
</div>
<div class=border-creator>
<?php echo $this->getStateHtml() ?>
<?php if($this->canShowOptions()): ?>
<div class=narrow-by>
<h4><?php echo $this->__('Browsing Options') ?></h4>
<dl id=narrow-by-list>
<?php $_filters = $this->getFilters() ?>
Modificando Magento (Ver. 1.0 octubre 2010) 38 / 61 VALENTN LPEZ MENESES
<?php foreach ($_filters as $_filter): ?>
<?php if($_filter->getItemsCount()): ?>
<?php if($_filter->getName() != Category){ ?>
<dt><?php echo $this->__($_filter->getName()) ?></dt>
<dd>
<?php echo $_filter->getHtml() ?>
</dd>
<?php } endif; ?>
<?php endforeach; ?>
</dl>
<script type=text/javascript>decorateDataList('narrow-by-list')</script>
</div>
<?php endif; ?>
</div>
</div>
<?php endif; ?>
<!- [ends] .browse-by // ->
Fpci)n J3 9unciona pero ha, ue tocar el Core
Del enlace: http3HHIII1magentocommerce1comHboardsHvieIthreadHJJ?KKH
Editamos el archivo go to app/code/core/Mage/Catalog/Block/Layer/View.php
Y comentamos la siguiente lnea:
$filters[] = $categoryFilter;
Fpci)n @3 >sando una extensi)n1 No la he probado, aunque dice que vale para todas las versiones de
Magento.
La llave de la extensin es: magento-community/Adtrak_DisableCategoryFilter-0.1.0
El enlace donde se encuentra: http://www.magentocommerce.com/extension/packages/module/1678/disable-
layered-nav-category-filter#releases
Eliminar la opci)n de Frdenar por en la vista de listado de productos
No he encontrado nada respecto a eliminar esta opcin de forma funcional, as que opt por hacerlo a travs
de los estilos.
Simplemente aadimos display:none en la siguiente lnea en la hoja de estilos:
.sorter{ display:none; font-size:11px; background:#fff url(../images/bkg_toolbar.gif) 0
100% repeat-x; padding:3px 8px; border-top:1px solid #e2e2e2; }
Eliminar el Bloue Comparar (roductos
Editamos el fichero //app/design/frontend/default/mi tema/layout/catalog.xml, y comentamos la lnea siguiente
que se encuentra casi al principio del fichero:
<!--<block type="catalog/product_compare_sidebar" after="cart_sidebar"
name="catalog.compare.sidebar" template="catalog/product/compare/sidebar.phtml"/>-->
C)mo modificar las plantillas de correo
Las plantillas de correo se encuentran en la ruta: //app/locale/es_ES/template/email, o la que corresponda al
idioma de la tienda.
Quitar suscripci)n a las GeIsletter
Las quitamos como Bloque, pero no quitamos la posiblidad de que un usuario registrado se suscriba.
Modificando Magento (Ver. 1.0 octubre 2010) 39 / 61 VALENTN LPEZ MENESES
Simplemente tenemos que comentar las siguientes lneas en el archivo:
//app/design/frontend/default/mi_tema/layout/newsletter.xml:
<!--
<default>
<!-- Mage_Newsletter -->
<reference name="right">
<block type="newsletter/subscribe" after="_"
name="right.newsletter" template="newsletter/subscribe.phtml"/>
</reference>
</default>
-->
Las lneas evidentemente ya aparecen comentadas.
De este modo ya nos aparece a la izquierda menos en la vista
Cambiar de (osici)n el Bloue (roductos Listos 0ecientemente
Como tengo hecha una modificacin para que me muestre las subcategoras de segundo nivel en una pgina
(visto anteriormente en este documento), he tenido que hacer dos cambios, no obstante, creo que an no
teniendo dicha modificacin hecha es necesario igualmente hacer los dos cambios.
Como no saba cul era el fichero de la plantilla que hace referencia a este bloque activ la visibilidad de las
rutas desde el back end en Sistema Configuracion Desarrollador. El fichero de la plantilla que
corresponde a este bloque es product_viewed.phtml. Ahora solo tenemos que buscar la referencia (en la que
aparecer el nombre del fichero) dentro de los ficheros que correspondan.
Los cambios se hacen en los ficheros del layout en la ruta: /app/design/frontend/default/mitema/layout
En concreto tocamos los siguientes ficheros: catalog.xml y reports.xml
Cambios en el fichero catalog1xml3
Buscamos las siguiente lneas:
<catalog_category_layered_nochildren translate="label">
<label>Catalog Category (Without Subcategories)</label>
<remove name="right.reports.product.viewed" />
<reference name="left">
<block type="reports/product_viewed"
before="right.permanent.callout" name="left.reports.product.viewed"
template="reports/product_viewed.phtml" />
</reference>
</catalog_category_layered_nochildren>
estas lneas se encuentran en la seccin del fichero Category layered navigation layout
Lo que he hecho es comentar la lnea que referencia a product_viewed.phtml para mantener el original, y
despus la he copiado y modificado segn aparece en el resultado final a continuacin, tambin he cambiado
la posicin de right a left en la etiqueta <reference name>:
<remove name="right.reports.product.viewed" />
<reference name="left">
<!-- <block type="reports/product_viewed"
before="right.permanent.callout" name="left.reports.product.viewed"
template="reports/product_viewed.phtml" />-->
<block type="reports/product_viewed"
name="left.reports.product.viewed" template="reports/product_viewed.phtml" />
</reference>
</catalog_category_layered_nochildren>
Bien mediante este cambio conseguimos que en la vista de catlogo los productos vistos recientemente
aparezcan a la izquierda, pero como las pginas de vistas de subcategoras realmente son listados o lo que
es lo mismo reportes, entonces me dirijo al archivo reports.xml. El contenido de este archivo se limita a:
Modificando Magento (Ver. 1.0 octubre 2010) 40 / 61 VALENTN LPEZ MENESES
<layout version="0.1.0">
<default>
<!-- Mage_Reports -->
<reference name="right">
<block type="reports/product_viewed"
before="right.permanent.callout" name="right.reports.product.viewed"
template="reports/product_viewed.phtml" />
<block type="reports/product_compared"
before="right.permanent.callout" name="right.reports.product.compared"
template="reports/product_compared.phtml" />
</reference>
</default>
</layout>
Bien pues tendremos que cambiarlo para que cambie de posicin el bloque de productos vistos
recientemente que est referenciado en el primer block type. Dejando el contenido del archivo del siguiente
modo:
<layout version="0.1.0">
<default>
<!-- Mage_Reports -->
<reference name="left">
<block type="reports/product_viewed"
before="right.permanent.callout" name="right.reports.product.viewed"
template="reports/product_viewed.phtml" />
</reference>
<reference name="right">
<!--<block type="reports/product_viewed" before="right.permanent.callout"
name="right.reports.product.viewed" template="reports/product_viewed.phtml" />-->
<block type="reports/product_compared"
before="right.permanent.callout" name="right.reports.product.compared"
template="reports/product_compared.phtml" />
</reference>
</default>
</layout>
Colocando Banners en Magento
Del enlace: http://www.youtube.com/watch?v=9MzfYlnVmQQ&feature=player_embedded#!
Se usa Dreamweavwer.
Crearemos el Banner con la imagen a nuestro gusto. Lo subiremos mediante FTP a nuestro sitio, en el
ejemplo usan la carpeta media, y yo tambin. Tendremos cuidado de darle permisos a la imagen (777) y que
el propietario sea el mismo que el del resto de las carpetas.
Ahora en nuestro navegador incluiremos la direccin de nuestro banner, por ejemplo:
http://www.midominio.com/media/mibanner.jpg
Debemos de ver la imagen en el navegador, si as es, copiamos la ruta. Abrimos el DreamWeaver y en un
nuevo documento HTML incluimos una imagen que es la ruta ruta que hemos copiado. Cuando Dreamweaver
cargue la imagen, seleccionamos la imagen y se activir la herramienta mapa. Ahora, y antes de marcar las
zonas que sern enlaces, iremos a nuestra pgina al primer contenido que deseemos mostrar en los enlaces
de nuestro banner, y copiamos la ruta. Ahora si en Dreamweaver, insertamos la imagen como hemos dicho
antes y en la ruta del enlace pegamos la que hemos copiado previamente. As lo haremos sucesivamente por
cada parte mapeada de la imagen que represente un enlace. Yo lo he hecho con el banner entero
directamente.
Ahora nos vamos al panel de administracin de Magento, abrimos el gestor de categora, en Dreamweaver
vamos a cambiar de vista, a vista Cdigo, seleccionamos el cdigo html que se ha generado entre las
etiquetas <body> y </body>, lo copiamos en en el campo descripcin de la pestaa general de la categora
pegamos el cdigo. Ea, ya tenemos el banner.
Modificando Magento (Ver. 1.0 octubre 2010) 41 / 61 VALENTN LPEZ MENESES
Creando Enlaces a $rchivos (-9 en pginas html
Aunque parezca mentira el editor Tiny MCE en Magento no permite la inclusin de enlaces a archivos que no
sean de imgenes. Me encontr con esto al intentar crear enlaces a documentos PDF (que ya sabemos que
el navegador los maneja abriendo el lector de dichos documentos de forma automtica) en una pgina html.
Pues bien, opt por la calle de en medio. Sub los ficheros a travs de FTP a una carpeta creada en expreso
para ello en la raz, es decir, en la carpeta html, a esta carpeta le di permisos 755, porque comprobando
combinaciones ms restricitivas los PDF no se abran (ojo al dar los permisos que si lo hacemos despus de
subir los archivos debemos hacer que dichos permisos se apliquen de forma recursiva).
Bien, una vez subidos los archivos y dados los permisos, me fui al administrador de pginas en Magento, abr
la pgina correspondiente y le di al botn de ver cdigo HTML, para editar a pelo los enlaces. Ojo tambin
con esto que si no lo hacemos bien nos podemos encontrar que el editor intente corregir los fallos (como
hace cuando pegamos texto desde un procesador de texto que le aade a las lneas inservibles en html los
caracteres de comentario: <!-- y -->), y nos descuageringue la pgina.
Bien para hacer el enlace recurrimos al HTML puro y duro, buscamos en la ventana la parte o texto que
queremos enlazar y aadimos lo siguiente:
<a href="/carpeta_contenedora/nombre_del_archivo.pdf" target="_blank">Texto que hace de link</a>
En Target podemos emplear cualquiera de los valores propios de la etiqueta, yo he usado Blank para abrir en
vantana nueva, podemos usar Self para abrir en la misma, etc....(si existe el etc...en este caso).
Y eso es todo, slo queda probar que funcione.
%ncrementando la seguridad de la carpeta que contiene los P&'
Una vez hecho lo anterior me di cuenta que si te situabas encima del enlace al fichero te daba la ruta, si la
copias y la pegas en el navegador te muestra el directory ndex, vamos que ve lo que hay ah, y tal y como
estn las cosas es poco recomendable. As que intent mejorar la seguridad, cmo?, buscando en Google y
con los famosos ficheros .htaccess
Bien, para evitar que te listen el ndice de la carpeta, en la misma creamos un .htaccess en el que incluimos
la siguiente lnea:
Options -Indexes
As nos mostrar la tpica pgina de Apache con el Forbidden...perooo....en esta pgina se nos muestra tanto
el sistema operativo como el apache y su versin, tampoco me gusta. As que busqu un poco ms, y de
nuevo el ficherito .htaccess nos va a ser til.
nclu la siguiente lnea en el mismo, y listo, ahora la pgina que me muestra es la que tiene por defecto
Magento para las pginas no encontradas:
ErrorDocument 403 /html/errors/404.php
Con estas dos lneas y el ficherito hemos contribuido en algo a la seguridad de nuestra tienda.
!raducir el valor del atributo Mender
Lo primero es traducir Gender (Gnero). Lo haremos desde el archivo /app/locale/es_ES/Mage_Customer.csv
ncluimos la Lnea Gender y su traduccin Sexo, tal y como pdemos observar en las lneas del Archivo.
Otra cosa es traducir el valor que trae por defecto este Campo (Male y Female), he encontrado un post sobre
este tema (en Portugus menos ml que a nuestros hermanos es fcil entenderlos), hay que modifcar el valor
de en la tabla: eav_attribute_option_value
Esta solucin sin duda alguna funcionar, pero tengo el problema de qu pasa cuando la tienda est en
varios idiomas.
Por cierto la ruta del post es: http://www.magentocommerce.com/boards/viewthread/180194/
Modificando Magento (Ver. 1.0 octubre 2010) 42 / 61 VALENTN LPEZ MENESES
!raducir la etiueta $vailabilit!, en la pgina de producto
ncluyo esta modificacin porque aunque una vez que hemos traducido algo (a excepcin de los valores de
algn campo) el procedimiento es prcticamente el mismo para cualquier cosa que queramos traducir, pero
ojo, porque podemos encontrarnos con casos como este.
Quera traducir esta etiqueta para que apareciera en espaol, revis el fichero
/app/locale/es_ES/Mage_Catalog.csv y encontr la palabra Availability traducida. Pero esta traduccin no se
reflejaba en la pgina de vista del producto.
Opt por incluirla en el archivo locale de mi tema, de la forma habitual: "Availability","Disponibilidad",
sin resultado.
Cuando estaba a punto de tirar por la calle de en medio, es decir, irme al fichero de la template
(app/design/frontend/default/default/template/catalog/product/view/type/ ) y cambiar la etiqueta a pelo, con lo
que cuando pusiera la tienda en otros idiomas seguira teniendo un problema, ca en la cuenta de que en el
fichero de la template Availability estaba precedida por los dos puntos. Me dije: " a ver si va a ser esto. As
que edit el fichero Es_es de la carpeta locale de mi tema /app/design/frontend/default/mitema/locale/es_ES,
e inclu la lnea con los dos puntos, tal que as: "Availability:","Disponibilidad:", y funcion a la
perfeccin. Esto es un aviso a navegantes para que se tenga claro que lo que se traduce debe ser el texto
idntico a lo que aparece e la plantilla.
Despus para curarme en salud y para eliminar este pequeo bug de Magento hice lo propio en el fichero
Mage_Catalog.csv
Nabilitando el pago por transferencia , cambiando los textos
Del enlace: http://onestic.com/cambiar-textos-en-modulo-de-pago-en-magento-transferencia-bancaria/
El pago por transferencia viene de serie con Magento 1.4, pero se llama Check/Money Order.
Para habilitarlo rellenamos los campos de este Mtodo de pago del siguiente modo:
Nabilitado3 Si
!*tulo3 Pondremos el ttulo que queremos que aparezca en el Front End por ejemplo: Pago por
Transferencia.
GeI Frder 4tatus3 Lo suyo es dejarlo en pendiente.
(a,ment from $pplicable Countries3 Podemos indicar Todos los paises permitidos o especificar en la lista
que vendr justo a continuacin los pises en los que permitiremos esta forma de pago.
(a,ment from 4pecific Countries3 Aqu seleccionaremos los pases en los que queremos tener esta forma
de pago. Se activa si en el campo anterior hemos seleccionado Especificar pases.
Ma#e Chec# (a,able to3 Este lo dejamos en blanco.
Enviar cheue a3 Aqu pondremos los datos del banco y del BAN si hacemos comercio exterior.
M*nimo pedido3 El pedido mnimos que aceptamos para esta forma de pago.
Mximo pedido3 Justo lo contrario que lo anterior.
Frdenar (edido3 No estoy seguro, pero me da que es el orden en que queremos que aparezca esta forma
de pago respecto al resto que tengamos configuradas.
Bueno pues ya est disponible esta forma de pago, solo que en el front end nos aparece el siguiente texto
"Enviar Cheque a
Bien vamos a cambiar este texto y adems vamos a incluir otro para avisar el cliente que el pedido no es
procesado hasta tanto no se verifique la transferencia, por lo que los envos pueden retrasarse 48 horas.
Bueno, para cambiar el texto "Enviar Cheque a:, vamos a hacerlo desde el fichero de traduccin
Modificando Magento (Ver. 1.0 octubre 2010) 43 / 61 VALENTN LPEZ MENESES
/app/locale/es_ES/Mage_Payment.csv . Buscamos el texto y cambiamos la traduccin.
La inclusin del texto es otra historia. En la versin 1.4.1.1 he encontrado algunos post en los que se dice que
presenta problemas con la traduccin inline. ntent incluir un texto que luego fuera traducible en el fichero
/app/design/frontend/default/mitema/template/payment/form/checkmo.phtml mediante la siguiente lnea que
coloqu al final del fichero:
<?php echo $this->__('This payment method means that shipments are not processed until the transfer
is not confirmed, so delivery time may be delayed 48 hours.') ?>
Y no me funcion, en el progreso de compra no pasaba del mtodo de envo. Pero como no se PHP no se si
esto era lo adecuado.
As que me he conformado con incluir un texto en castellano, agregando antes del <?php endif; ?>
<spam class="success-msg">Esta mtodo de pago retrasa la entrega en al menos 48 horas
por requerir confirmacin de transferencia</spam>
Si alguien que lea este documento sabe como hacerlo, pues que aporte.
0esolviendo (roblema en el (rogreso de Compra3 .Card Lerification
(lease verif, the card Iith the issuer ban#/
Resulta que en el progreso de compra en el paso 5 que dice "Revisin del Pedido me apareca un mensaje
tal que as:
Card Verification
Please verify the card with the issuer bank.
Y no apareca nada ms, slo un cuadro en blanco, pero de revisin de pedido nada.
Bien parece que es un Bug de la versin, pero se soluciona de una forma poco adecuada, pero se soluciona,
consiste en desactivar el modo centinela. Para ello iremos a Sistema Configuracin Avanzado Avanzado
y deshabilitaremos el mdulo Mage_Centinel.
Se puede encontrar informacin sobre esto en el post:
http://www.magentocommerce.com/boards/viewthread/196550/
Eliminando del (anel de Control de Mi Cuenta los enlaces Billing
$greements , 0ecurring (rofiles
Del Enlace: http://www.magentocommerce.com/boards/viewthread/197799/#t248148
Estos dos enlaces estn incluidos en la versin 1.4.1.1. Pero no existe documentacin respecto a su
funcionalidad, adems en el panel de administracin slo he visto una referencia a Billing Agreements en la
forma de Pago PayPal. En consecuencia, tanto si no vamos a usar PayPal como si no queremos
complicarnos la vida hasta que no haya una documentacin en condiciones lo mejor es quitar estos enlaces.
El caso es que quitarlos no es tan sencillo porque por lo visto van embebidos en el cdigo y no hay archivo n
del template ni del layuot que tocar.
Pero en el enlace apuntado al principio de este epgrafe nos dan una solucin sencilla. Dentro del layout
creamos una carpeta "sales y ah incluimos dos archivos con el contenido que se indica. De este modo
procederemos as:
1. Dentro de /app/design/frontend/default/mi tema/layout creamos la carpeta "sales.
2. Dentro de /app/design/frontend/default/mi tema/layout/sales creamos dos archivos:
billingEagreement1xml y recurringEprofile1xml
3. El contenido de ambos archivos es exactamente el mismo que se indica:
<?xml version="1.0"?>
Modificando Magento (Ver. 1.0 octubre 2010) 44 / 61 VALENTN LPEZ MENESES
<layout version="0.1.0">
</layout>
En ese mismo post viene otra forma de hacerlo pero es algo ms complicada. A mi esta me funcion.
%(endiente finalizar& Extensi)n $uguria 4ponsorship
El mdulo se compone de(
Un formulario para enviar invitaciones: cuando una invitacin es enviada, el correo electrnico del
invitado es registrado, y el identificador (D) del cliente tambin. Las invitaciones pueden ser enviadas
con OpenInviter.
Un sistema de Afiliacin: podemos aadir el parmetro sponsor_id a cada pgina, que crer una
cookie y una sesin para identificar una persona invitada. Podemos igualmente poner esos enlaces
en sitios web de terceros. Y reescribimos el mdulo Magentix_SocialBookmarking para habilitar el
patrocinio con estos sitios.
Creacin de Cuenta: cuando se crea una cuenta, se comprueba si una invitacin fue enviada al
correo electrnico usado para el registro. Si este no es el caso, se comprueba si una cookie de
sesin o afiliacin existe. Si hay un enlace, el usuario que se registra se convierte en el ahijado del
cliente que lo invit.
Un seguimiento de puntos para el cliente: el cliente tiene una interfaz para el seguimiento de puntos
en su cuenta. El puede ver sus ahijados. Puede preguntar por el canje de sus puntos.
ncremento de puntos: los puntos de fidelidad y los puntos de patrocinio son insertados en la orden
en el carrito de compra. A la orden de pago, los puntos son adjudicados al cliente.
Definicin de Reglas: la gestin de puntos puede ser hecha a travs de las Reglas de Precio del
Catlogo o las Reglas de Precios del Carrito de compras.
Configuracin del Mdulo: La interfaz de administracin nos permite habilitar o deshabilitar los puntos
de fidelidad o los puntos de patrocinio. Habilitar o no el intercambio por dinero, regalo o cupn.
Tambin podemos definir el mximo de dinero sin nmero siret, el periodo de clculo del mximo de
dinero, si un pedido es requerido para patrocinio, el periodo de validez para una invitacin, el preiodo
de validez de un patrocinador sin un pedido, nmero de niveles para el clculo de puntos del
patrocinador, el porcentaje sobre las ventas indirectas de un patrocinador, el nmero mximo de
invitaciones que alguien puede enviar por horas, el mensaje de cabecera, el mensaje del cuerpo y el
mensaje del pie de pgina.
Una interfaz de administrador: nos permite ver la lista de invitaciones enviadas, monitorizar las
solicitudes de canjeo de puntos.
Una vez instalado el mdulo, debemos:
Crear una o varias Reglas de Precios del Catlogo o del Carrito de compras para incrementar la
fidelidad y los puntos del patrocinador.
Editar la Pgina del CMS sobre informacin del Patrocinio.
Si habilitamos la rellamada automtica de patrocinio, activar el Cron de Magento.
Crear una cuenta de Opennviter, y activar esta caracterstica dentro de la configuracin del mdulo
de Patrocinio para que los clientes puedean invitar a su listas de contactos de msn, yahoo, etc.. de
forma masiva.
Sobre la interfa) de administracin
Recogemos aqu algunos campos sobre los que consideramos interesante conocer su significado. Nos
hemos centrado en la parte de la extensin referida al Patrocinio, pero podris observar que gran parte de
estos campos tambin se recogen en la parte de Fidelidad.
Modificando Magento (Ver. 1.0 octubre 2010) 45 / 61 VALENTN LPEZ MENESES
La interfaz de administracin de esta extensin la encontramos en Sistema Configuracin Fidelidad y
Patrocinio.
1. 0atio de convesi)n de puntos en moneda1 Para usarlo tendremos presente la siguiente frmula: 1
Unidad de moneda = puntos * ratio.
2. $mount of Iinning points for the first godson order1 Es un valor fijo. Es decir damos un montante
de puntos por la compra de un ahijado. Segn me respondieron en un post esto es fcil cambiarlo en
el cdigo.
3. (er*odo de clculo del mximo permitido para un usuario %d*as&1 Un usuario no puede cambiar
ms que el mximo definido para el perodo que definamos aqu.
4. !iempo de inactividad antes de retirar el enlace de patrocinio %dOas&1 Este campo se emplea para
el caso de que tengamos pginas que nos esponsoricen. Podemos habilitar el cron de Magento y si
un cliente no incluye una orden en un sitio que nos esponsorice en este periodo de tiempo, el enlace
ser eliminado.
5. Cantidad mxima permitida sin nmero de compa'Oa1 Nos permite definir el montante mximo
que se permite para cambiar puntos por dinero.
6. En lo que se refiere a las acciones que esta extensin incluye dentro de las Reglas del Carrito o del
Catlogo, vamos a aclarar las siguientes:
a) Puntos de Patrocinio por porcentaje del precio orginal. Si el producto tiene un valor de 200 y el
valor es igual a 10, el importe ser 20 por cada producto.
b) Puntos de patrocinio por importe fijo. Si el producto tiene un valor de 200 y el valor es igual a 10,
el importe ser de 10 por cada producto.
c) Puntos de patrocinio por un importe fijo para el total del carrito. Si el valor es 10, el importe ser
de 10 para el total del carrito.
%(endiente& Como crear un nuevo Banner lateral
Cambiando la fisonom*a del (anel de Control del Cliente
Lo primero el Panel de Control del Cliente (en la interfaz Mi Panel de Control), carga el diseo a dos
columnas con una a la izquierda. En la columna de la izquiera nos aparece el men de navegacin Mi
Cuenta, Los productos vistos recientemente, Una llamada (la del perrito) y el carrito de compras.
Para cambiar el diseo a dos columnas pero una de ellas a la derecha vamos a editar el fichero;
/app/design/frontend/default/mi tema/layout/customer.xml
Buscamos la siguiente seccin dentro del archivo:
<!--
Customer account home dashboard layout
-->
Y ah la lnea que dice lo siguiente:
<action method="setTemplate"><template>page/2columns-left.phtml</template></action>
Y la sustituimos por:
<action method="setTemplate"><template>page/2columns-right.phtml</template></action>
Ok...si ahora refrescamos la pgina (teniendo la cach de Magento deshabilitada), veremos que la columna
aparece a la derecha pero que los bloques han cambiado, no nos aparece el Men de Mi Cuenta, ni el carrito,
ni el perrito, etc....Por qu?. Veamos la seccin justo anterior a la que hemos visto de este archivo, donde
pone:
<!--
Customer account pages, rendered for all tabs in dashboard
-->
Modificando Magento (Ver. 1.0 octubre 2010) 46 / 61 VALENTN LPEZ MENESES
Nos fijamos en la lnea siguiente:
<reference name="root">
<action method="setTemplate"><template>page/2columns-
left.phtml</template></action>
</reference>
Y tambin en la lnea:
<reference name="left">
Bien pues en ambas lneas vamos a cambiar la palabra left por right. Ahora si nos aparece el men de Mi
Cuenta y el Carrito, es ms ste nos aparece duplicado. Pero no nos aparece los productos vistos
recientemente y el perrito. Ese me da igual porque no lo quiero en esta pgina, pero quiero que aparezcan
los productos vistos recientemente y obviamente quitar un carrito de la compra, as como otro men que
tengo yo de opciones de usuario creado con los toplinks.
Para eso slo tenemos que repasar el cdigo de ambas secciones y veremos las referencias a lo que
queremos o no queremos.
Bien para quitar el men opciones de usuario que yo tengo (que son los toplinks convertidos en bloque, ya
hemos visto como hacerlo en este documento), y que segn revisamos en el fichero customer.xml se cargan
en todas aquellas pginas en lo que no se diga lo contrario, tendremos que hacer precisamente eso: Decirle
lo contrario. Y para eso nos sirve la etiqueta <remove>
En la seccin:
<!--
Customer account pages, rendered for all tabs in dashboard
-->
Que lo que nos dice es que son las pginas de la cuenta del cliente, que se reproducen para todas las
etiquetas (enlaces) en el panel de control, aadimos los siguiente antes del final de la seccin, quedando tal
que as:
</reference>
<remove name="top.links"></remove>
</customer_account>
As evitamos que el bloque que cre con los toplinks aparezca.
Ahora vamos a quitar uno de los carritos....queremos que nos compren pero mejor no ser pesados.
En la misma seccin que en el caso anterior vamos a comentar las lneas que referencian el bloque del
Carrito, por lo que la seccin quedara as:
<reference name="right">
<block type="customer/account_navigation"
name="customer_account_navigation" before="-"
template="customer/account/navigation.phtml">
<action method="addLink" translate="label"
module="customer"><name>account</name><path>customer/account/</path><label>Ac
count Dashboard</label></action>
<action method="addLink" translate="label"
module="customer"><name>account_edit</name><path>customer/account/edit/</path
><label>Account Information</label></action>
<action method="addLink" translate="label"
module="customer"><name>address_book</name><path>customer/address/</path><lab
el>Address Book</label></action>
</block>
<!--<block type="checkout/cart_sidebar" name="cart_sidebar"
template="checkout/cart/sidebar.phtml">
<action
method="addItemRender"><type>simple</type><block>checkout/cart_item_renderer<
/block><template>checkout/cart/sidebar/default.phtml</template></action>
<action
method="addItemRender"><type>grouped</type><block>checkout/cart_item_renderer
_grouped</block><template>checkout/cart/sidebar/default.phtml</template></act
ion>
Modificando Magento (Ver. 1.0 octubre 2010) 47 / 61 VALENTN LPEZ MENESES
<action
method="addItemRender"><type>configurable</type><block>checkout/cart_item_ren
derer_configurable</block><template>checkout/cart/sidebar/default.phtml</temp
late></action>
</block>
-->
Como se ve hemos comentado el bloque al completo, y as eliminamos uno de los carritos de compra.
Ms cosas, ahora queremos que debajo del carrito nos aparezca el bloque de productos vistos
recientemente,
Para eso en la misma seccin debemos aadir el bloque de productos vistos recientemente y decirle que
debe ir despus del carrito de compra. Pues nada incluimos la siguiente lnea:
<block type="reports/product_viewed" before="right.permanent.callout"
name="left.reports.product.viewed" template="reports/product_viewed.phtml" />
Dnde?. Pues yo la he puesto tal que as:
<!--<block type="checkout/cart_sidebar" name="cart_sidebar"
template="checkout/cart/sidebar.phtml">
<action
method="addItemRender"><type>simple</type><block>checkout/cart_item_renderer<
/block><template>checkout/cart/sidebar/default.phtml</template></action>
<action
method="addItemRender"><type>grouped</type><block>checkout/cart_item_renderer
_grouped</block><template>checkout/cart/sidebar/default.phtml</template></act
ion>
<action
method="addItemRender"><type>configurable</type><block>checkout/cart_item_ren
derer_configurable</block><template>checkout/cart/sidebar/default.phtml</temp
late></action>
</block>
-->
<!--<block type="catalog/product_compare_sidebar"
name="catalog.compare.sidebar"
template="catalog/product/compare/sidebar.phtml"/>-->
<block type="sales/reorder_sidebar" name="sale.reorder.sidebar"
as="reorder" template="sales/reorder/sidebar.phtml"/>
A que molan los layout...parecen complejos pero cuando le coges el rollo facilitan mucho las cosas.
!raduciendo .!here are P items in ,our cart/ de carrito de compra de la
columna
Esto tiene mucha guasa. Lo primero referenciar el enlace, que me orient en algo pero que no me lo resolvi
puesto que me da que el que escribi la posible solucin se expres mal.
http://www.magentocommerce.com/boards/viewthread/177338/#t231660
Bien, lo que hice fue comparar mi archivo Mage_Checkout.csv (en la ruta: /app/locale/es_ES), con el de otra
traduccin y vi el problema.
En el archivo referenciado encuentras las siguientes lneas:
"There are <a href=""%s""><strong>%s items</strong></a> in your cart.","Hay <a
href=""%s""><strong>%s artculos</strong></a> en su carrito."
"There is <a href=""%s""><strong>1 item</strong></a> in your cart.","Hay <a
href=""%s""><strong>1 artculo</strong></a> en su carrito."
Bien pues el problema reside en las etiquetas "strong, si las quitamos el texto se traduce perfectamente, y
adems el enlace aparece en negrita igualmente. Las lneas quedaran as:
"There are <a href=""%s"">%s items</a> in your cart.","Hay <a href=""%s"">%s art-
culos</a> en su cesta."
"There is <a href=""%s"">1 item</a> in your cart.","Hay <a href=""%s"">1 artculo</a>
Modificando Magento (Ver. 1.0 octubre 2010) 48 / 61 VALENTN LPEZ MENESES
en su cesta."
Y listo.
2mplementando el m)dulo de pago 4ervired
El mdulo de pago de Servired es el ms extendido, quizs porque es gratuito, es fiable y adems se integra
con los TPV de muchos bancos.
El mdulo se puede instalar a travs de Magento Connect, y lo podis encontrar en este enlace:
http://www.magentocommerce.com/magento-connect/defcon2/extension/464/metodo-de-pago-servired
Adems del sitio oficial de Magento, existen otro foro en castellano que parece que se mueve ms que el
oficial (cosa que no es difcil). El otro foro esta en el siguiente enlace:
http://foros.mgnt.es/showthread.php?332-Metodo-de-pago-Servired-para-Magento
El caso es que te dice que el mdulo no es compatible con la versin 1.4, pero bicheando en los foros al final
se encuentra que si. Para ello hay que hacer una pequea modificacin en el fichero
/app/code/local/Mage/Servired/Model/Standard.php, consistente en moficar la siguiente lnea:
$currency = $this->convertToServiredCurrency($order->getOrderCurrency());
Por:
$currency = $this->convertToServiredCurrency($order->getOrderCurrencyCode());
La informacin anterior la encontris en el siguiente enlace:
http://www.magentocommerce.com/boards/viewthread/77950/
Una vez hecha esta modificacin es el momento de entrar en el Panel de Administracin Mtodos de Pago
Servired, y cumplimentar los datos con los que nos proporciona la entidad con la que hayamos contratado.
Este paso es sencillo, pero tres apuntes. El primero es que en Nuevo estado del pedido debemos poner
Procesando. El segundo es que en Mtodo para la firma hay que poner (a no ser que el banco nos diga lo
contrario) Completo ampliado. Y el tercero es que es conveniente que en Estado de la Ventana
seleccionemos Full Screen Same Windows (2), por aquello del bloqueo de los pop ups.
Bien hecho esto ya estamos en condiciones de probar el mdulo. Cuando yo lo prob me encontr que me
lanzaba el siguiente error:
Invalid entity supplied: Mage_Sales_Model_Mysql4_Order_Address Object ...! un
chori-aco de c.digo*
Despus de algunas horas de desesperacin encontr algo en un foro:
http://www.magentocommerce.com/boards/viewthread/200324/P0/
Que vena a decir que el problema era el paquete de actualizacin de la versin 1.4 a la 1.4.1, y sobre la
pgina 3 de este post empiezas a encontrar gente que dice algo as como "a mi me funcion...y los
encuentras a mogolln, luego habr que probar.
El problema en s es que los seores de Varien (yo creo que a posta) mandan el paquete de actualizacin de
forma incorrecta, de tal modo que en el paquete van archivos antiguos. La solucin, descargarse el paquete
completo de instalacin de la versin 1.4.1, extraerlo y machacar (no sin antes hacer copia de seguridad) la
carpeta core/Mage/Sales/Model/Mysql4/Order/ to local/Mage/Sales/Model/Mysql4/Order/ .
Y listo.
Tenemos un segundo problema. De esta forma el mdulo no actualiza los pedidos ni para el cliente ni para el
Panel de Administracin, de tal forma que el cliente no ve un historial de los pedidos, y el administrador no
puede cambiar el estado de los mismos.
Encontr dos posible soluciones. Una parte de realizar dos modificaciones, y la otra de sustituiir un fichero
entero. Con ambas me ha funcionado, aunque la primera ha sido finalmente ms fiable.
4oluci)n ?3 Del Enlace: http://onestic.com/pasarela-de-pago-servired-para-magento-bug/
Modificando Magento (Ver. 1.0 octubre 2010) 49 / 61 VALENTN LPEZ MENESES
Esta es la solucin que yo he implementado. En este caso lo que hacemos es sustituir varias lneas en el
fichero StandardController.php del mdulo de Servired que est en la ruta:
/app/code/local/Mage/Servired/controllers.
He de decir que yo he hecho una interpretacin de lo que el enlace mencionado comenta, porque como
veris no indica exactamente cules son la lneas a sustituir. Y lo he hecho mediante pruebas de ensayo y
error, hasta que me ha funcionado. As que lo que veris a continuacin es mi interpretacin de las
modificaciones.
Buscamos la funcin "public function successAction() " , mediante una bsqueda de este texto. Al principio de
la funcin comentaremos las tres primeras lneas, ahora copiamos la dos primeras y las pegamos pero
intercambiamos su orden. Con lo que nos queda tal que as:
public function successAction() {
$orderState = Mage_Sales_Model_Order::STATE_PROCESSING;
$orderStatus = Mage::getModel('servired/standard')-
>getConfigData('order_status');
//$orderStatus = Mage::getModel('servired/standard')-
>getConfigData('order_status');
//$orderStatus = Mage_Sales_Model_Order::STATE_PROCESSING;
//$comment=null;
Un detalle de mucho inters. Resulta que la lnea comment=null la coment en modo pruebas y funcion el
mdulo. Cuando pas al modo REAL el mdulo no funcionaba y siempre me daba error de Nmero de
Pedido Repetido, la descoment y el mdulo sali andando.
Ahora no vamos al final de la funcin mencionada, justo antes de $order->save(); y buscamos la lnea (que
est justo antes de order->save), y delante de ella pegamos el cdigo que se muestra a continuacin,
quedando el final de la funcin como se ve:
if (!$orderStatus) {
$orderStatus = $order->getConfig()->getStateDefaultStatus($orderState);
}
$order->setState($orderState, $orderStatus,$comment,true);
$order->save();
4oluci)n B3 Del enlace: http://foros.mgnt.es/showthread.php?332-Metodo-de-pago-Servired-para-
Magento/page30&highlight=magento+1.4+servired
Consiste en sustituir el fichero StandardController.php del mdulo por el que deja el usuario mac75a. El
fichero se encuentra en: /app/code/local/Mage/Servired/controllers.
Si bien esta solucin tiene el visto bueno del creador del mdulo (defcon2), tambin es cierto que el que la
crea pide que la gente la pruebe...luego...no est muy probada que digamos.
En esta solucin si es necesario que en el TPV de LA Caixa (la interfaz web que nos facillita) se
cumplimenten los datos de URLOK y URLKO, porque de lo contrario cuando la operacin se realiza, bien o
mal, te manda a la pgina de pgina no encontrada.
La URL de OK es:
http://www.midominio.com/checkout/onepage/success/
Aunque en un post he visto que esta direccin se escribe con una sola "c en success.
La URL de KO es:
http://www.mi_temadetarifa.es/checkout/cart/
A mi no me funciona del todo correctamente.
Quitar el Callout del .perrito/
Vamos al fichero /app/design/frontend/default/mitema/layout/catalog.xml, y comentamos la siguientes lneas,
que se encuentran dentro de la seccin "Default layout, loads most of the pages
<!--
Modificando Magento (Ver. 1.0 octubre 2010) 50 / 61 VALENTN LPEZ MENESES
<block type="core/template" name="left.permanent.callout"
template="callouts/left_col.phtml">
<action
method="setImgSrc"><src>images/media/col_left_callout.jpg</src></action>
<action method="setImgAlt" translate="alt"
module="catalog"><alt>Servicio Tecnico</alt></action>
<action method="setLinkUrl"><url>customer-
service</url></action>
</block>
-->
2ncluir un texto en el formulario de Bsueda $vanzada
El formulario de bsqueda avanzada de Magento es una magnfica herramienta para que el cliente pueda
localizar el producto o productos deseados, puesto que combina los atributos habituales (nombre, precio,
etc.) con aquellos que al crearlos hayamos decidido que se usen para las bsquedas.
Adems Magento de forma automtica te muestra los posibles valores existentes cuando el atributo puede
mostrar varios, ya sea mediante listas desplegables o cuadros de seleccin mltiple. Pero de lo que no avisa
Magento es de que esos cuadros de seleccin mltiples pueden usarse realizando varias selecciones de
valores.
Mi intencin es guiar el posible cliente para que pueda ver un listado de resultados cuando le interesa
localizar un determinado producto por ejemplo en distintos formatos, siempre y cuando el atributo formato se
muestre en la bsqueda con un cuadro de seleccin mltiple. Cmo hacer esto?, pues incluyendo un aviso,
un texto, que indique que puede usar la tecla Control. As el texto que he incluido en la bsqueda avanzada
es .>tilice la tecla Ctrl para selecciones mltiples/.
De momento no se como hacer que el texto sea traducible, y como ya he comentado anteriormente, en la
versin 1.4. parece que no es tan sencillo como en versiones anteriores.
Lo primero que vamos a hacer es incluir el texto en el formulario de bsqueda, para ello debemos ir a la
plantilla del mismo que est en app/design/frontend/default/mitema/template/catalogsearch/advanced y
editamos el archivo form.phtml
Podemos incluir el texto al principio del formulario o bien justo cuando comienzan los campos de seleccin
mltiple. Yo he optado por esto segunda, as que en el fichero se incluye la siguiente lnea con etiquetas
spam y resaltada en negrita, que se muestra posicionada en el lugar que corresponde:
<div class="input-range">
<input name="<?php echo $_code ?>[from]" value="<?php
echo $this->htmlEscape($this->getAttributeValue($_attribute, 'from')) ?>"
id="<?php echo $_code ?>" title="<?php echo $this->htmlEscape($this-
>getAttributeLabel($_attribute)) ?>" class="input-text validate-number"
type="text" />
<span class="separator">-</span>
<input name="<?php echo $_code ?>[to]" value="<?php
echo $this->htmlEscape($this->getAttributeValue($_attribute, 'to')) ?>"
id="<?php echo $_code ?>_to" title="<?php echo $this->htmlEscape($this-
>getAttributeLabel($_attribute)) ?>" class="input-text validate-number"
type="text" />
<small>(<?php echo $this->getCurrency($_attribute); ?
>)</small>
</div>
<div><spam class="notice-msg-propio">%tilice la tecla /trl para selecciones
multiples*</spam></div>
<?php break;
case 'select': ?>
El estilo que he aplicado al texto es una copia del estilo notice-msg, y lo he llamado notice-msg-propio, al
objeto de ajustarlo a esta plantilla y no modificar el original con lo que me podra encontrar con sorpresas
desagradables.
Modificando Magento (Ver. 1.0 octubre 2010) 51 / 61 VALENTN LPEZ MENESES
Ahora en la hoja de estilos crearemos este estilo, y hay que hacerlo en dos lneas, porque existen dos lneas
que lo referencian. Lo que hacemos es copiar esas dos lneas y duplicarlas, cambiarles el nombre y luego
ajustar los valores a nuestra conveniencia. A continuacin se muestran esta lneas en negrita y en la posicin
en que yo las he puesto:
.notice-msg { border-style:solid !important; border-width:1px !important;
background-position:10px 9px !important; background-repeat:no-repeat !
important; min-height:24px !important; padding:8px 8px 8px 32px !important;
font-size:11px !important; font-weight:bold !important; }
*notice-msg-propio 0 border-st!le,solid !important1 border-width,&p2 !important1
background-position,3p2 3p2 !important1 background-repeat,no-repeat !important1 min-
height,&4p2 !important1 padding,5p2 5p2 6p2 )7p2 !important1 font-si-e,&&p2 !
important1 font-weight,bold !important1 margin,&'p2 'p2 'p2 &3'p2 !important1
float,left !important1 8
.error-msg { border-color:#f16048; background-color:#faebe7; background-
image:url(../images/i_msg-error.gif); color:#df280a; }
.success-msg { border-color:#446423; background-color:#eff5ea; background-
image:url(../images/i_msg-success.gif); color:#3d6611; }
.note-msg,
.notice-msg { border-color:#fcd344; background-color:#fafaec; background-
image:url(../images/i_msg-note.gif); color:#3d6611; }
*notice-msg-propio 0 border-color,9fcd6771 background-color,9fafaec1
background-image,url:**/images/i_msg-note*gif;1 color,96d<<&&1 8
Borrando , 0einiciando (edidos+ 9acturas+ etc
Toda vez que hemos realizado las pruebas de la pasarela de pago y nos han pasado a modo real, toca
resetear los contadores y borrar los pedidos de purebas.
La informacin la obtengo el enlace: http://www.magentocommerce.com/boards/viewthread/1680/P375/
Este post tiene un montn de pginas pero este enlace os lleva a la pgina dnde encontr la solucin. El
script lo aporta el nick: Viktor F y hace referencia a otro enlace, que me da que es el original:
http://inchoo.net/ecommerce/magento/delete-test-orders-in-magento/comment-page-2/#comment-8363
Simplemente creamos un archivo, o script SQL, al que yo he llamado borra_ordenes.sql con el siguiente
contenido:
- Resetea el Test de datos de Magento
SET FOREIGN_KEY_CHECKS=0;
- Resetea las consultas de bsqueda del Panel de Administracin
TRUNCATE `catalogsearch_query`;
ALTER TABLE `catalogsearch_query` AUTO_INCREMENT=1;
- Reseta la informacin de Pedidos de Ventas
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`;
Modificando Magento (Ver. 1.0 octubre 2010) 52 / 61 VALENTN LPEZ MENESES
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 `sales_order_aggregated_created`;
TRUNCATE `sendfriend_log`;
TRUNCATE `tag`;
TRUNCATE `tag_relation`;
TRUNCATE `tag_summary`;
TRUNCATE `wishlist`;
TRUNCATE `log_quote`;
TRUNCATE `report_event`;
ALTER TABLE `sales_flat_creditmemo` AUTO_INCREMENT=1;
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 `sales_order_aggregated_created` 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;
SET FOREIGN_KEY_CHECKS=1;
Nota: Las lneas en castellano debemos borrarlas si no, nos dar error de sintxis. Las lneas estn
simplemente para indicar que hace cada bloque de cdigo.
Guardamos este fichero y desde la consola ejecutamos lo siguiente:
mysql -u nombre_usuario -p nombre_base_de_datos < borra_ordenes.sql
Modificando Magento (Ver. 1.0 octubre 2010) 53 / 61 VALENTN LPEZ MENESES
Cuando vuelvas a entrar en tu cuenta de cliente o como administrador vers que no hay pedidos, y en el
panel de administracin los importes estn a cero.
Nacer convivir el Env*o Mratis con la !arifa (lana de env*o
Si dispones de envo gratuitos para un importe determinado y una tarifa plana para envo por debajo de ese
importe, encontramos que Magento nos presenta los dos mtodos de envo cuando ambos son aplicables. Es
decir, cuando el importe supera el que hemos marcado para envos gratuitos.
La verdad es que esto es un poco absurdo y puede llevar a confusin. Por lo que es necesario que cuando el
importe supere el marcado para los envos gratuitos, no nos aparezca la opcin de la tarifa plana.
En este post nos dan la solucin: http://www.magentocommerce.com/boards/viewthread/53031/
A continuacin la explico.
En el Panel de Administracin en Configuracin Ventas Mtodos de Envo, tenemos que hacer lo
siguiente:
1. El orden que pongamos para Envos Gratuitos debe ser siempre inferior (es decir que aparezca
primero) que para Tarifa Plana.
2. El ttulo de los Envos gratis los ponemos como Transporte Gratis. Cuando veas el cdigo vers el
porqu, y tambin vers como puedes cambiar esto.
3. El ttulo de la Tarifa Plana la ponemos como Tarifa Plana. Del mismo modo que en el caso anterior
podrs ver el porqu en el cdigo, y si quieres podrs cambiarlo.
A continuacin de guardar estos cambios editamos el archivo:
/app/design/frontend/default/mi_tema/template/checkout/onepage/shipping_method/available.phtml
Buscamos la siguiente lnea de cdigo:
<dl class="sp-methods">
Y justo debajo aadimos una lnea, quedando tal que as:
<dl class="sp-methods">
<?php /* Agregamos 1 linea aqui */ ?>
<?php $freeshipping_available_flag=0; ?>
Ahora buscamos foreach ($_shippingRateGroups as $code => $_rates): ?> que estar justo debajo
de lo que acabamos de aadir y que si estamos en la versin 1.4 de Magento la lnea aparece tal que as:
<?php $_sole = count($_shippingRateGroups) == 1; foreach
($_shippingRateGroups as $code => $_rates): ?>
Bien, pues justo debajo de esto aadimos dos lneas ms quedando tal que as:
<?php $_sole = count($_shippingRateGroups) == 1; foreach
($_shippingRateGroups as $code => $_rates): ?>
<?php /* Added 2 lines here */ ?>
<?php if($this->getCarrierName($code)=='Transporte Gratis')
$freeshipping_available_flag=1;?>
<?php if(($this->getCarrierName($code)=='Tarifa Plana') and
($freeshipping_available_flag)) continue; ?>
<dt><?php echo $this->getCarrierName($code) ?></dt>
Ahora cuando el pedido supere el importe marcado para el envo gratuito slo nos aparece este mtodo y no
ambos.
En este mismo post dice que cambiando determinada lnea el botn de chequeo del mtodo de envo nos
aparecer marcado, pero a mi no me ha funcionado. Este mtodo consiste en sustituir la lnea:
<input name="shipping_method" type="radio" value="<?php echo $_rate-
>getCode() ?>" id="s_method_<?php echo $_rate->getCode() ?>"<?php if($_rate-
>getCode()===$this->getAddressShippingMethod()) echo ' checked="checked"' ?>
class="radio" />
Modificando Magento (Ver. 1.0 octubre 2010) 54 / 61 VALENTN LPEZ MENESES
Por:
<input name="shipping_method" type="radio" value="<?php echo $_rate-
>getCode() ?>" id="s_method_<?php echo $_rate->getCode() ?>"<?php if(($_rate-
>getCode()===$this->getAddressShippingMethod()) or ($_rate->getMethodTitle()
== 'Transporte Gratis')) echo ' checked="checked"'?> class="radio" />
Si alguien sabe dnde est el error o como hacerlo para que as sea, pues que contribuya.
Configurando el mQtodo de env*o !able 0ate
Yo voy a configurarlo por el mtodo ms habitual que es "Peso y Destino. Adems de configurar los datos
habituales de los envos que nos solicita (si habilitado o no, paises que se permiten, costes de manipulacin,
etc..), debemos bajarnos un archivo en el que incluyamos los datos. Para bajar este archivo debemos ir a
Sistema - Configuracin Ventas Mtodos de Envo, pero tenemos que tener seleccionado en Alcance de
la Configuracin (arriba de la columna de opciones de la configuracin) "Main Website, entonces es cuando
nos aparece la opcin para descargarnos el fichero.
El fichero no es ms que la fila de ttulos de las columnas, es decir, nos muestra los encabezados de los
campos a rellenar.
"Pas","Regin/Estado","Cdigo postal","Peso (and above)","Precio de envo"
El Pas lo tenemos que incluir con la codificacin SO, para ello podemos buscarlo en el enlace
http://www.iso.org/iso/english_country_names_and_code_elements
Si no tenemos que diferenciar entre regiones y Cdigos postales podemos usar el carcter comodn "*
El peso es en Kg o en gramos, o en la unidad que tengamos configurada por defecto, luego unidades por
debajo de esta tienen que ser nmeros decimales.
El precio es el precio final del envo.
COMO NO FUNCONA HE MODFCADO el archivo avalaible.phtml y lo he vuelto a su versin orginal.
Tambin he modificado el core segn las indicaciones de este enlace:
http://magebase.com/magento-tutorials/enable-free-shipping-promotions-with-magento-table-rate-method/
Activo el registro de Magento y me lanza un error. Pero no me dice exactamente en que archivo XML se
produce.
Para ver en que archivo se produce, sigo la informacin del siguiente enlace:
http://www.magentocommerce.com/boards/viewthread/56831/
El registro indica que hay "parse error segn el archivo update.phtml del core.
Lo que hay que hacer es lo que dice el post:
before
$fileXml = simplexml_load_string($fileStr, $elementClass); in Update.php
add
libxml_use_internal_errors(true);
and after add
if(!$fileXml){ print($file); exit();}
This may help you. t shows the bad xml file.
Then, remove all from Update.php (it is just a debug edit so it has to be removed)
Despus que localizas el archivo puedes verificarlo copiando el contenido y pegndolo en cualquier
verificador de XML, yo us: http://www.xmlvalidation.com/index.php?id=1&L=0
Bueno al final era una carajera....semana y media de trabajo para que al final el problema es que al ajustar
Table Rate no tengo que seleccional Mainsite, sino el sitio en el que quiero aplicarlo.
Modificando Magento (Ver. 1.0 octubre 2010) 55 / 61 VALENTN LPEZ MENESES
>na curiosidad3 $justando el reloj en Centos mediante comando
Quin lea esto se preguntar..qu hace esto aqu?...pues bien, resulta y que si tenemos atrasado el reloj de
nuestro servidor, nos puede ocurrir que Magento no nos deje entrar al panel de administracin, y que
tampoco deje entrar a los cliente en su cuenta. Realmente no s que sentido tiene esto, pero pasa...Magento
es as de tiquismiquis.
Todos los relojes atrasan, incluidos los de los servidores, y si estamos usando un servidor virtual, este retraso
es an mayor.
Vamos a ver como ajustar el reloj en Centos. Toda la informacin la he obtenido del siguiente enlace:
http://elgamusino.es/ajustar-fecha-y-hora-en-centos/
Para comprobar la hora usamos el comando "date, este comando permite opciones de tal manera que se
puede ajustar la hora a mano. Pero no es nuestra intencin hacerlo a diario, as que, si nuestro servidor est
conectado a nternet (obviamente en el caso de un servidor web es as) ah va lo que en el enlace
mencionado explican estupendamente.
Lo primero que debemos hacer es una copia de seguridad del fichero localtime
-->mv /etc/localtime /etc/localtime-old
Cambiamos el timezone por el de Espaa, sin o lo tuviramos ya cambiado:
-->ln -sf /usr/share/zoneinfo/Europe/Madrid /etc/localtime
Sincronizamos la hora con el servidor que deseemos, en Espaa y en mi caso considero que el mejor es el
de la Red ris.
-->/usr/sbin/ntpdate -u hora.rediris.es
Si os da fallo porque no se tenga el comando ntp, instalamos con yum (yum -y install ntp).
Verificamos que en el fichero /etc/sysconfig/clock la entrada ZONE tiene el valor correcto. Aqu el fichero
tendra que contener lo siguiente:
ZONE="Europe/Madrid"
UTC=true
ARC=false
Ahora pasamos el valor al reloj hardware:
-->/sbin/hwclock --systohc
Ahora realizamos un cron para que sincronice a diario el reloj con el servidor NTP. El cron tendr las dos
lneas siguientes:
/usr/sbin/ntpdate -u hora.rediris.es
/sbin/hwclock --systohc
2ncluir enlaces en el pie de pgina
Los enlaces que la plantilla por defecto de Magento trae, puede que no sean suficientes. He tenido que
realizar dos acciones. Por un lado, hacer que el copyright, y por otro, crear un nuevo texto "Trminos y
Condiciones de uso que enlace con un artculo del CMS, que ya existe, pero que de cara a darlo de alta en
buscadores debe estar en lugar visible y no slo cuando se proceda a realizar la compra. Esto se me ha dado
en el caso del buscador Mercamana (mercamania.com).
Para incluir el texto con el enlace, he utilizado el CMS y la opcin Bloques Estticos, ya que ah existe un
bloque llamado Footer Links. Simplemente he cambiado los textos y los enlaces que aparecen a las pginas
que me interesan.
Para hacer que el copyright sea un enlace edito el fichero
/app/design/frontend/default/mitema/template/page/html/footer.phtml
Y en la lnea:
<address><?php echo $this->getCopyright() ?></address>
Modificando Magento (Ver. 1.0 octubre 2010) 56 / 61 VALENTN LPEZ MENESES
Y la dejamos tal que as:
<address><a href="http://www.enlace.es" onclick="this.target='_blank'"><?php
echo $this->getCopyright() ?></a></address>
9eed 044 para el total del Catlogo
Del enlace: http://www.magentocommerce.com/boards/viewthread/9310/
Magento trae una muy buena herramienta de sindicacin. Esta herramienta nos permite obtener los fedds rss
para las categoras principales, cupones y descuentos, estado de pedidos, etc.
Pero que ocurre cuando damos de alta nuestra en tienda en aquellos buscadores que pueden listar nuestros
productos y para ello te piden el feed RSS. Magento no me da la opcin de obtener un feed para todo el
catlogo, solo para las categoras principales.
Pues bien, si hemos tenido la precaucin de incluir nuestros productos en la Categora por defecto, la
obtencin de la URL del Feed para todo el catlogo es sencilla.
Si le pedimos el feed de una categora y nos fijamos en la URL, obtenemos:
http://www.mitienda.com/rss/catalog/category/cid/3/store_id/2/
Bien, "cid/3 es el identificador de la categora, mientras que "store_id/2 es el identificador de la tienda.
Modificando el cid/3 por cid/2 obtendremos el feed de la categora por defecto (default category) y todos los
productos, siempre que como se ha dicho los hayamos incluido en esta categra, sino tendremos que hacerlo.
Cuando demos de alta la tienda en el buscador, solo tendremos que proporcionar esta URL para pasar el
fichero al completo.
Extensi)n3 aheadAor#s Blog Extension
Esta extensin sirve para publicar un blog en Magento, y se puede descargar desde aqu:
http://ecommerce.aheadworks.com/blog.html
O instalar con Magento Connect desde aqu: http://www.magentocommerce.com/magento-
connect/aheadWorks/extension/1516/blog-extension-by-aheadworks
Corrigiendo un bug de la *ersin +,-+
El problema en que no aparece el editor wysiwyg en la edicin de posts. La solucin de la misma pgina que
la descarga desde el sitio oficial.
Editamos el fichero: /app/design/adminhtml/default/default/template/aw_blog/head.phtml
Sustituimos estados dos lneas:
<script src="<?php echo $this->getSkinUrl('') ?
>aw_blog/js/tiny_mce/tiny_mce.js"></script>
<script src="<?php echo $this->getSkinUrl('') ?
>aw_blog/js/init_rte.js"></script>
Por estas otras dos:
<script src="<?php echo $this-
>getSkinUrl('aw_blog/js/tiny_mce/tiny_mce.js') ?>"></script>
<script src="<?php echo $this->getSkinUrl('aw_blog/js/init_rte.js') ?
>"></script>
&ando formato al .log
Aqu vamos a explicar como personalizar el Blog segn nuestro tema particular. No voy a explicar las
Modificando Magento (Ver. 1.0 octubre 2010) 57 / 61 VALENTN LPEZ MENESES
opciones de configuracin que nos aparecen en el panel de administracin, puesto que no son complicadas y
cuando algo pudiera no ser comprensible viene explicado (en ingls, pero explicado). Voy a centrarme en
tocar archivos tanto del template como de layout para que el blog funcione segn yo quiero.
Yo quiero que en la pgina principal aparezca un banner lateral que anuncie el blog, y el men de categoras
del blog tenga un formato especfico, acorde con los bloques que tengo pero variando el color.
AW Blog se instala por defecto en la ruta default/default. Lo primero ser mover los siguientes archivos y
carpetas a la ruta de nuestro tema:
app/design/frontend/default/default/layout/aw_blog.xml
app/design/frontend/default/default/template/aw_blog/
skin/frontend/default/default/aw_blog/
Los movemos a:
app/design/frontend/mi/tema/layout/aw_blog.xml
app/design/frontend/mi/tema/template/aw_blog/
skin/frontend/mi/tema/aw_blog/
Luego vamos a darle formato al men de categora del blog, para ello editamos el fichero
app/design/frontend/mi/tema/template/aw_blog/menu.phtml de la forma habitual veremos
como se asignan estilos a las diferentes partes del men. Yo simplemente he usado Firebug para ver los
estilos aplicados a otros bloques de mi pgina, y despus he adaptado la hoja de estilo propia que trae esta
extensin que est en la ruta skin/frontend/mi/tema/aw_blog/style.css . La adaptacin ha consistido
en crear estilos o modificar los existentes segn los valores que me interesen de los otros bloques de mi
pgina.
Cuando ya tengo adaptado el men, para que en la primera pgina y en el resto de pginas del catlogo
haya un enlace al blog en forma de banner y una vez entramos en el mismo nos aparezca el men de
categoras del blog, en la parte de administracin de este componente en la seccin Mens and Links he
seleccionado habilitar el men derecho solo en las pginas del blog. As slo aparece el men cuando pico
en el banner lateral.
El problema que se me presentaba es que al crear el banner en el layout (fichero catalgo.xml), al entrar en el
blog no solo me apareca el men de categoras, sino tambin el banner lateral. Aqu es dnde uno se da
cuenta de la utilidad del layout y de sus etiquetas. Usando la etiqueta <remove> se puede quitar este banner
lateral de la pgina del blog que es donde aparece el men de categoras. Para ello he editado el fichero
app/design/frontend/mi/tema/layout/aw_blog.xml, y he usado la etiqueta tal que as:
<blog_index_index>
<reference name="content">
<block type="blog/blog" name="blog"
template="aw_blog/blog.phtml"/>
<remove name="right.permanent.callout"></remove>
</reference>
</blog_index_index>
>sando las 0eglas de (romoci)n
Hay un artculo muy completo en esta direccin:
http://www.magentocommerce.com/knowledge-base/entry/what-are-catalog-price-rules-and-how-do-i-use-
them/
Migrando Magento de un 4ervidor a otro
Del enlace: http://www.elblogdemagento.com/como-migrar-tu-tienda-magento-de-local-a-servidor-con-la-
misma-base-de-datos/
1. Subir todos los archivos de local al servidor y la base de datos
2. Eliminar todo el contenido de la carpeta /var
Modificando Magento (Ver. 1.0 octubre 2010) 58 / 61 VALENTN LPEZ MENESES
3. Cambiar los valores del archivo /app/etc/local.xm
4. Una vez tenemos la base de datos subida, tenemos que ejecutar el siguiente query:
=>L>/? * @(A core_config_data BC>(> path = 'web/unsecure/base_url' A( path =
'web/secure/base_url';
Y obtendremos esto
| config_id | scope | scope_id | path | value|
| 2 | ">@$%L? | 0 | web/unsecure/base_url |
http://www.tudominio.com.ar/magento/|
| 3 | ">@$%L? | 0 | web/secure/base_url |
http://www.tudominio.com.ar/magento/|
5. Actualizamos la configuracin con la nueva url:
%#"$?> core_config_data =>? value = 'http://www.yourdomine.com/' BC>(> path
LDE> 'web/%/base_url';
Y obtendremos esto:
config_id | scope | scope_id | path | value |
| 2 | ">@$%L? | 0 | web/unsecure/base_url |
http://www.tudominio.com.ar/magento/|
| 3 | ">@$%L? | 0 | web/secure/base_url |
http://www.tudominio.com.ar/magento/|
Y aqu se acab.
$ctualizar Magento
Lo vamos a hacer con el MCM.
Parto de la versin 1.4.1.1
Entro en MCM, le doy al botn Comrpobar Actualizaciones. Se pega un rato pensando y nos muestra en
diferente color aquellas actualizaciones que estn disponibles. Como partimos de 1.4.1.1 la primera
actualizacin que nos muestra 1.4.2. Vamos a seleccionar para actualizar MageE$llE"atest que ser a la
versin 1.4.2.1, y le damos a Commit Changes...Magento empezar a actualizar a la nueva versin de MCM
y luego de forma automtica todo ir actualizndose a la versin 1.4.2.1 de forma global.
Cuando termine, refrescamos la cach en el panel de administracin, y si queremos ms seguridad a travs
de FTP o SSH borramos el contenido de la carpeta var/cache.
Es imprescindible que durante todo los procesos vigilemos los que nos lanza la consola de MCM. Por
ejemplo descubr que la extensin canonnical_url es incompatible con la nueva versin 1.5 y no me dejaba
actualizar. As que, una vez que hemos refrescado la cach y antes de pasar a actualizar, la desinstalamos si
la tuviramos, y del mismo modo procederamos con cualquier otra extensin que nos genere conflicto.
Adems, como la estructura de la carpeta var/ vara,, debemos intentar revisarla, ya que nos habr creado
una carpeta llamada packages que contiene todo lo instalado y actualizado hasta el momento. Despues de
muchos intentos frustrados de actualizar sin xito ya que cuando terminaba me lanzaba un error tanto en el
panel de administracin como en el front end, me d cuenta que me dejaba rastro de la extension
canonnical_url as que borr el archivo xml que estaba dentro de esta carpeta y otro fichero llamado package
que estba en la ruta /package/tmp que si lo abra contena referencias a la extensin canonical_url. Lo
curioso es que las veces que fall, al buscar los errores del back-end y front-end en el foro, las soluciones
que me lanzaban siempre eran relacionadas a una referencia que quedaba por ah dentro de los ficheros de
configuracin (xml).
Una vez deinstalada la extensin conflictiva, y borrados los rastros en la nueva carpeta packages, si salimos
de MCM, nos daremos cuenta de que resulta que no tenemos el enlace en el men configuracin del panel.
No importa, podemos entrar tecleando www.mitienda.com/downloader
Otra vez en el MCM, volvemos a dar al botn comprobar actualizaciones, y ahora seleccionamos
Modificando Magento (Ver. 1.0 octubre 2010) 59 / 61 VALENTN LPEZ MENESES
Mage_core_module como la extensin a actualizar a la versin 1.5.0.1. Debe empezar con la actualizacin
de todo el core, si al finalizar no nos ha actualizado todos los componentes del core de Magento, entonces,
los seleccinaremos manualmente, pero OJO, creo por precaucin que es mejor seleccionar de momento
actualizaciones relativas al core y no a extensiones que tengamos instaladas. Haremos todo el proceso,
vigilaremos la consola y si todo va bien, refrescamos cach. Ahora si debera aparecernos el men de MCM
en el panel de administracin.
Volvemos a entrar y procedemos a actualizar las extensiones instaladas una a una, y comprobando despus
el funcionamiento general de nuestro sitio tanto del back com del front end.
Un enlace que es bastante explicativo al respecto es el correspondiente artculo de la Wiki:
http://www.magentocommerce.com/wiki/magento_connect_manager_upgrade
Mostrar las categor*as listadas en una pgina R Modificaci)n despuQs de
actualizar a Magento ?1S
Una vez que se realiza una actualizacin de Magento es cuando de verdad nos creemos eso de que es mejor
no tocar los ficheros del Core. Como vimos en la epgrafe Mostrar las categoras listadas en una
pgina( pgina 19), para hacer esto nos decargbamos dos ficheros desde el enlace:
http://foros.mgnt.es/showthread.php?1840-Soluci%F3n-ver-categor%EDas&highlight=solucion+categorias , y
uno de ellos era para sustituir el fichero del Core que se encuentra en la ruta:
app/code/Mage/Catalog/Model/Resource/Eav/Mysql4/Category.php
Bien, pues con la actualizacin el problema es que el fichero Category.php es modificado y sustituido por el
de la versin 1.5.x. Y me dirs, bueno pues te lo descargas y lo sustituyes de nuevo y listo. Pues no, pega un
casque, el tpico error de llamada a un "algo que no existe. Este error me lo daba en la lnea 841 y esa lnea
lo que contena eran asteriscos de comienzo de un comentario...en fin que voy listo.
El problema es que en las pginas de las categora no se mostraban las imgenes de las subcategoras, se
muestra la descripcin y encima la etiqueta que le hayamos puesto a la imagen, pero no la imagen. Pasando
Firebus descubro que el problema es que la plantilla que se emplea "sub_category_listing.phtml (el segundo
archivo que nos teniamos que bajar) no llama a la imagen. Reviso la plantilla y est bien, pero cuando ves el
cdigo con Firebug te encuentras que src= ".....es decir nada de nada.
Bueno, pues con ms suerte que un "quebrao, us la herramienta WinMerge y compar el archivo
descargado con el archivo propio de la nueva versin de Magento. A parte de muchas diferencias encontr
algo que era indicativo, en el archivo de la nueva versin de Magento, en la lnea 557 aproximandamente,
encuentro la siguiente funcin:
public function getParentCategories($category)
{
$pathIds = array_reverse(explode(',', $category->getPathInStore()));
$categories = Mage::getResourceModel('catalog/category_collection')
->setStore(Mage::app()->getStore())
->addAttributeToSelect('name')
->addAttributeToSelect('url_key')
->addFieldToFilter('entity_id', array('in'=>$pathIds))
->addFieldToFilter('is_active', 1)
->load()
->getItems();
return $categories;
}
Y si la comparo con el archivo descargado encuentro que en este la funcin tiene la siguiente lnea:
->addAttributeToSelect('image')
As que muy valiente yo, cojo y la copia en la misma posicin quedando tal que asi:
public function getParentCategories($category)
{
Modificando Magento (Ver. 1.0 octubre 2010) 60 / 61 VALENTN LPEZ MENESES
$pathIds = array_reverse(explode(',', $category->getPathInStore()));
$categories = Mage::getResourceModel('catalog/category_collection')
->setStore(Mage::app()->getStore())
->addAttributeToSelect('name')
->addAttributeToSelect('url_key')
->addAttributeToSelect('image')
->addFieldToFilter('entity_id', array('in'=>$pathIds))
->addFieldToFilter('is_active', 1)
->load()
->getItems();
return $categories;
}
Ahora seguimos buscando algo ms abajo y en la lnea 605 aproximandamente encuentro lo siguiente:
/* @var $collection
Mage_Catalog_Model_Resource_Eav_Mysql4_Category_Collection */
$collection->addAttributeToSelect('url_key')
->addAttributeToSelect('name')
->addAttributeToSelect('all_children')
->addAttributeToSelect('is_anchor')
->addAttributeToFilter('is_active', 1)
->addIdFilter($category->getChildren())
->setOrder('position', 'ASC')
->joinUrlRewrite()
->load();
return $collection;
}
La nica diferencia con respecto al archivo descargado es que este ltimo tiene una lnea ms, que
casualmente es como en el caso anterior::
->addAttributeToSelect('image')
As que cojo y la copio directamente, quedando como sigue:
/* @var $collection
Mage_Catalog_Model_Resource_Eav_Mysql4_Category_Collection */
$collection->addAttributeToSelect('url_key')
->addAttributeToSelect('name')
->addAttributeToSelect('image')
->addAttributeToSelect('all_children')
->addAttributeToSelect('is_anchor')
->addAttributeToFilter('is_active', 1)
->addIdFilter($category->getChildren())
->setOrder('position', 'ASC')
->joinUrlRewrite()
->load();
return $collection;
}
Guardo el fichero (no sin antes hacer copia de seguridad del original), y recargo mi front-end, y sopresa las
fotos de las subcategoras vuelven a aparecer con estos dos simples cambios.
Modificando Magento (Ver. 1.0 octubre 2010) 61 / 61 VALENTN LPEZ MENESES

También podría gustarte