<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>onestic &#187; magento</title>
	<atom:link href="http://onestic.com/tag/magento/feed/" rel="self" type="application/rss+xml" />
	<link>http://onestic.com</link>
	<description>blog de onestic</description>
	<lastBuildDate>Thu, 02 Feb 2012 09:40:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.5</generator>
		<item>
		<title>Magento, PayPal, IPN, las contrabarras (backslashes) y respuesta INVALID</title>
		<link>http://onestic.com/magento-paypal-ipn-las-contrabarras-backslashes-y-respuesta-invalid/</link>
		<comments>http://onestic.com/magento-paypal-ipn-las-contrabarras-backslashes-y-respuesta-invalid/#comments</comments>
		<pubDate>Thu, 07 Apr 2011 16:02:45 +0000</pubDate>
		<dc:creator>Manel R. Doménech</dc:creator>
				<category><![CDATA[Magento]]></category>
		<category><![CDATA[Invalid]]></category>
		<category><![CDATA[IPN]]></category>
		<category><![CDATA[magento]]></category>
		<category><![CDATA[paypal]]></category>

		<guid isPermaLink="false">http://onestic.com/?p=1051</guid>
		<description><![CDATA[Existe un pequeño problema en Magento con la validación de la respuesta IPN de PayPal. Ocurre incluso con el código de ejemplo para PHP4 del propio PayPal. Más que un problema se trata de una condición de error no contemplada. Esta condición ocurre cuando en algún campo del formulario de pago aparece el carcater contrabarra [...]]]></description>
			<content:encoded><![CDATA[<p>Existe un pequeño problema en Magento con la validación de la respuesta IPN de PayPal. Ocurre incluso con el código de ejemplo para PHP4 del propio PayPal. Más que un problema se trata de una condición de error no contemplada. Esta condición ocurre cuando en algún campo del formulario de pago aparece el carcater contrabarra o backslash (\) y la opción de PHP magic_quotes_gpc está desactivada. Esta opción está marcada como obsoleta desde PHP 5.3 y suele encontrarse desactivada en la mayoría de las distribuciones actuales.</p>

<p>El problema está en utilizar la función stripslashes sobre el valor de los campos del formulario de pago que PayPal devuelve mediante el método POST. Si magic_quotes_gpc no está activada y se aplica stripslashes sobre los valores cualquier contrabarra desaparecerá o, más bien, se convertirá en un escapado del siguiente caracter. Y como al hacer el post back para verificar el pago PayPal espera recibir exactamente los mismos valores que ha enviado previamente, se recibirá un INVALID por resupuesta.</p>

<p>No es un problema grave, pero algunos usuarios de habla hispana abrevian calle como C\ (aunque la norma es hacerlo al revés, C/), y en estos casos el pago se realizará pero fallará su validación.</p>

<p>¿Cómo corregir esto? Bien NO haciendo el stripslashes o bien haciendo previamente un addslashes si magic_quotes_gpc está desactivado.</p>

<p>Para el código de ejemplo de PayPal:</p>

<p>Original:</p>

<pre class="brush: php; title: ;">...
foreach ($_POST as $key =&gt; $value) {
 $value = urlencode(stripslashes($value));
 $req .= &quot;&amp;$key=$value&quot;;
}
...</pre>

<p>Solución 1:</p>

<pre class="brush: php; title: ;">...
foreach ($_POST as $key =&gt; $value) {
 $value = get_magic_quotes_gpc()?stripslashes($value):$value;
 $value = urlencode($value);
 $req .= &quot;&amp;$key=$value&quot;;
}
...</pre>

<p>Solución 2a:</p>

<pre class="brush: php; title: ;">...
foreach ($_POST as $key =&gt; $value) {
 $value = get_magic_quotes_gpc()?$value:addslashes($value);
 $value = urlencode(stripslashes($value));
 $req .= &quot;&amp;$key=$value&quot;;
}
...</pre>

<p>Solución 2b:</p>

<pre class="brush: php; title: ;">...
foreach ($_POST as $key =&gt; $value) $_POST[$key] = get_magic_quotes_gpc()?$value:addslashes($value);

foreach ($_POST as $key =&gt; $value) {
 $value = urlencode(stripslashes($value));
 $req .= &quot;&amp;$key=$value&quot;;
}
...</pre>

<p>Para Magento hay que hacer algo análogo en el código de verificación. En la versión 1.5 puede encontrarse en el fichero</p>

<pre class="brush: plain; title: ;">app/code/local/Onestic/PaypalIpnFixSlash/Model/Ipn.php</pre>

<p>, en el método _postBack. en versiones anteriores este código está en</p>

<pre class="brush: plain; title: ;">app/code/core/Mage/Paypal/Model/Standard.php</pre>

<p>, en el método ipnPostSubmit.</p>

<p>Si no se desea tocar el código fuente de Magento, para la versión 1.5 se incluye este pequeño módulo <a href='http://onestic.com/wp-content/uploads/2011/04/Onestic_PaypalIpnFixSlash.tgz'>Onestic_PaypalIpnFixSlash</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://onestic.com/magento-paypal-ipn-las-contrabarras-backslashes-y-respuesta-invalid/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Tienda de Zapatillas Satorisan en Magento</title>
		<link>http://onestic.com/tienda-de-zapatillas-satorisan-en-magento/</link>
		<comments>http://onestic.com/tienda-de-zapatillas-satorisan-en-magento/#comments</comments>
		<pubDate>Fri, 15 Oct 2010 09:56:48 +0000</pubDate>
		<dc:creator>Sergio Baixauli</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Magento]]></category>
		<category><![CDATA[Proyectos]]></category>
		<category><![CDATA[magento]]></category>
		<category><![CDATA[tienda en magento]]></category>

		<guid isPermaLink="false">http://onestic.com/?p=938</guid>
		<description><![CDATA[Nuevo desarrollo de una tienda en Magento. En este caso se trata de una tienda de Zapatillas llamada Satorisan. Poco a poco nos vamos posicionando en el mercado como empresa especialista en comercio electrónico y desarrollo de tiendas ecommerce. Para esta tienda se han realizado las siguientes mejoras o extensiones desarrolladas a medida de las [...]]]></description>
			<content:encoded><![CDATA[<p>Nuevo desarrollo de una tienda en Magento. En este caso se trata de una tienda de Zapatillas llamada <a href="http://satorisan.com">Satorisan</a>. Poco a poco nos vamos posicionando en el mercado como <a href="http://onestic.com/servicios/#Tiendas%20con%20Magento">empresa especialista en comercio electrónico y desarrollo de tiendas ecommerce.</a></p>
<p>Para esta tienda se han realizado las siguientes mejoras o extensiones desarrolladas a medida de las necesidades del cliente:</p>
<ul>
	<li><strong>Carro de compra personalizado.</strong> Se ha modificado el clásico paso en horizontal para hacerlos verticales. Para ello se ha modificado todo el onestep y los javascript de varien para saltar de paso en paso. Por otro lado se han modificado los datos de registro personalizando los campos y su disposición. </li>
<li><strong>Facturas personalizadas.</strong> Personalización de las facturadas generadas, envío de pdf tanto en las facturas rectificativas como en las facturas de pedido.</li>
<li><strong>Creación de pasos intermedios de un pedido.</strong> Para su correcto seguimiento se han creado nuevos estados asociados a eventos y acciones. En realidad hemos dejado bastante poco del funcionamiento original.</li>
<li><strong>Multiidioma en magento para la tienda.</strong> Soporte para dos idiomas, inglés y castellano.</li>
<li><strong>Nuevos productos.</strong> Módulo en portada para nuevos productos integrado con un carrusel en jQuery.</li>
<li><strong>Zoom para productos.</strong> Para el detalle de los productos se ha utilizado un zoom hecho en flash que permite ver las imágenes del producto a 4000&#215;4000 (más que suficiente no?)</li>
<li><strong>Carro de compra jQuery.</strong> En la cabecera de la tienda podéis ver el efecto al añadir y mostrar los productos.</li>
<li><strong>Integración de Magento con DHL España. </strong> Hemos realizado un módulo para integrar la tienda con DHL y AZA Logistics. Con esto conseguimos sincronizar los estados de los pedidos en tiempo real, notificar desde Magento con los tracking numbers, generar las facturas cuando los pedidos son entregados, pasarlos a un estado completado y notificar a los clientes ante cualquier imprevisto. La verdad es que este ha sido un módulo muy costoso pero finalmente el resultado ha sido excelente.</strong>
<li><strong>Integración de Magento con SEUR.</strong> Para una nueva fase vamos a realizar un desarrollo para Magento y SEUR, con esto completaremos los anteriores desarrollos hechos para MRW y Magento.</li>
<li><strong>Integración de módulo de 4b para el Banco popular con Magento.</strong> Desarrollo y ampliación de nuevas funcionalidades específicas para el pago a través de TPV.</li>
<li><strong>Integración de Paypal Standar con Magento.</strong> Desde los últimos cambios hechos en la versión 1.4.1.1 todo han sido problemas. Finalmente hemos podido controlar los estados y acciones automáticas que realiza Paypal a través de su IPN. Todo un mundo creerme&#8230; </li>
<li><strong>Cron en Magento.</strong> Creación de disparadores y acciones programadas para la ejecución y sincronización de stocks, estados de pedidos y envíos automáticos con los números de seguimiento.<li>
<li><strong>HelpDesk para Magento.</strong> Soporte para tickets de ayuda y control de incidencias. Control a través de tickets de los correos procesados en la tienda así como sus estados.</li>
<li><strong>RMA para Magento.</strong> La verdad es que en este sentido nos decidimos por adquirir uno ya desarrollado y la verdad es que el resultado no podía haber sido peor. Muy malas experiencias con el proveedor, un montón de fallos y una funcionalidad mal rematada. Así que posiblemente acabemos desarrollando nosotros un módulo de RMA (gestión de devoluciones).</li>
</ul>
<p>La lista de cambios además de todas estas es interminable, así que mejor os dejamos descubrirlas. El resultado es una tienda en Magento a gusto del consumidor  que esperamos funcione a las mil maravillas <img src='http://onestic.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> <p>
Esperamos que os guste <a href="http://satorisan.com">Satorisan</a>!
]]></content:encoded>
			<wfw:commentRss>http://onestic.com/tienda-de-zapatillas-satorisan-en-magento/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Se buscan programadores PHP+MySQL, con conocimientos de Magento y/o WordPress.</title>
		<link>http://onestic.com/programadores-php-mysql-magento-wordpress/</link>
		<comments>http://onestic.com/programadores-php-mysql-magento-wordpress/#comments</comments>
		<pubDate>Mon, 06 Sep 2010 14:21:02 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Ofertas Empleo]]></category>
		<category><![CDATA[empleo]]></category>
		<category><![CDATA[magento]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://onestic.com/?p=928</guid>
		<description><![CDATA[Estamos buscando para incorporar a nuestra plantilla varios perfiles de programadores, estos son los requisitos que buscamos si encajas, mándanos tu CV a info@onestic.com junto con tu portfolio de trabajos realizados. Experimentado en PHP5/MySQL, acostumbrado a trabajar con SVN Indispensable buen nivel de Magento y/o WordPress Perfil de un finalizador/rematador comprometido con los tiempos de [...]]]></description>
			<content:encoded><![CDATA[
<p>Estamos buscando para incorporar a nuestra plantilla varios perfiles de programadores, estos son los requisitos que buscamos si encajas, mándanos tu CV a <a href="mailto:info@onestic.com">info@onestic.com</a> junto con tu portfolio de trabajos realizados.</p>
<ul>
	<li>Experimentado en PHP5/MySQL, acostumbrado a trabajar con SVN</li>
	<li>Indispensable buen nivel de Magento y/o WordPress</li>
	<li>Perfil de un finalizador/rematador comprometido con los tiempos de entrega.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://onestic.com/programadores-php-mysql-magento-wordpress/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Quelovendan.com &#8211; Nueva tienda E-commerce desarrollada en Magento</title>
		<link>http://onestic.com/quelovendan-com-nueva-tienda-e-commerce-desarrollada-en-magento/</link>
		<comments>http://onestic.com/quelovendan-com-nueva-tienda-e-commerce-desarrollada-en-magento/#comments</comments>
		<pubDate>Wed, 02 Jun 2010 11:23:42 +0000</pubDate>
		<dc:creator>Sergio Baixauli</dc:creator>
				<category><![CDATA[Magento]]></category>
		<category><![CDATA[Proyectos]]></category>
		<category><![CDATA[magento]]></category>
		<category><![CDATA[tienda en magento]]></category>

		<guid isPermaLink="false">http://onestic.com/?p=904</guid>
		<description><![CDATA[Hoy por fin hemos publicado nuestro último trabajo, quelovendan.com. La tienda oficial de nopuedocreer.com. Lo nuestro nos ha costado. Una vez más tenemos que dar la gracias a @Danitroy (nopuedocreer.com) y @jlhortelano (tecnorantes.com). Esta nueva tienda desarrollada con Magento lleva muchas mejoras y alguna que otra extensión a medida. Integración con la pasarela de pago [...]]]></description>
			<content:encoded><![CDATA[<p>Hoy por fin hemos publicado nuestro último trabajo, <a href="http://quelovendan.com">quelovendan.com</a>. La tienda oficial de <a href="http://nopuedocreer.com">nopuedocreer.com</a>. Lo nuestro nos ha costado. Una vez más tenemos que dar la gracias a @Danitroy (<a href="http://nopuedocreer.com/">nopuedocreer.com</a>) y @jlhortelano (<a href="http://www.tecnorantes.com/">tecnorantes.com</a>).</p>
<p>Esta nueva <strong>tienda desarrollada con Magento</strong> lleva muchas mejoras y alguna que otra extensión a medida. Integración con la pasarela de pago de <strong>La Caixa para Magento</strong>, <strong>LiveChat</strong> para atención personalizada, notificaciones, módulo de SEO para Magento, canonical urls, optimización y performance específicos en el Core de Magento para esta tienda, la integración con el <strong>sistema de envío de Magento para MRW</strong>, etc.</p>
<p>Como veréis hemos tenido en cuenta el publico objetivo, y por tanto, la estética. Los colores y la navegación están hechos a medida. ¡Esperamos que os guste y que compréis mucho!</p>
]]></content:encoded>
			<wfw:commentRss>http://onestic.com/quelovendan-com-nueva-tienda-e-commerce-desarrollada-en-magento/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Tienda en Magento multiidioma. Botas Sendra en japonés</title>
		<link>http://onestic.com/tienda-en-magento-multiidioma-botas-sendra-en-japones/</link>
		<comments>http://onestic.com/tienda-en-magento-multiidioma-botas-sendra-en-japones/#comments</comments>
		<pubDate>Mon, 15 Mar 2010 11:39:13 +0000</pubDate>
		<dc:creator>Sergio Baixauli</dc:creator>
				<category><![CDATA[Destacado]]></category>
		<category><![CDATA[Proyectos]]></category>
		<category><![CDATA[magento]]></category>
		<category><![CDATA[magento japan]]></category>
		<category><![CDATA[magento multiidioma]]></category>
		<category><![CDATA[tienda en magento]]></category>

		<guid isPermaLink="false">http://onestic.com/?p=834</guid>
		<description><![CDATA[Hemos ido liados estas semanas con el lanzamiento de un nuevo proyecto realizado con Magento. En este caso se trata de una versión de la actual tienda en Magento de Sendra Boots. (www.sendra.jp) Para esta nueva tienda online además de los problemas con el idioma como es normal, hemos tenido que llevar a cabo una [...]]]></description>
			<content:encoded><![CDATA[Hemos ido liados estas semanas con el lanzamiento de un nuevo proyecto realizado con Magento. En este caso se trata de una versión de la <a href="http://sendravalencia.com">actual tienda</a> en Magento de Sendra Boots. (www.sendra.jp)
Para esta <strong>nueva tienda</strong> online además de los problemas con el idioma como es normal, hemos tenido que llevar a cabo una personalización de Magento muy intensa, mucho más de lo que en un principio analizamos. No sólo cambia el idioma, cambian los requisitos del usuario y el trato con la moneda (los japoneses no usan decimales). Además, el registro de usuarios y pedidos (junto con los correos electrónicos de notificación) requiere sobrescribir alguna de las funciones del Core de Magento.
Para llevar a cabo esta tarea nos hemos seguido los pasos para configurar una tienda de <a href="http://onestic.com/configurar-multiples-tiendas-con-magento/">Magento en múltiples dominios</a> y hemos aprovechado la potencia de la multitienda en Magento. 
Esperamos que os guste. <a href="http://sendra.jp">Sendra Boots Japan</a>]]></content:encoded>
			<wfw:commentRss>http://onestic.com/tienda-en-magento-multiidioma-botas-sendra-en-japones/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Configuración de Magento. System Config</title>
		<link>http://onestic.com/configuracion-de-magento-system-config/</link>
		<comments>http://onestic.com/configuracion-de-magento-system-config/#comments</comments>
		<pubDate>Wed, 03 Mar 2010 09:32:20 +0000</pubDate>
		<dc:creator>Sergio Baixauli</dc:creator>
				<category><![CDATA[Magento]]></category>
		<category><![CDATA[Onestic]]></category>
		<category><![CDATA[configuración magento]]></category>
		<category><![CDATA[magento]]></category>
		<category><![CDATA[system config]]></category>

		<guid isPermaLink="false">http://onestic.com/?p=804</guid>
		<description><![CDATA[Hacía mucho tiempo que no escribía nada, hemos ido un poco liados con el lanzamiento/creación de dos nuevas tiendas en Magento. Para estas dos nuevas tiendas en Magento hemos tenido que desarrollar varios módulos y tocar la configuración de Magento, así que hoy vamos a intentar explicar de forma resumida cómo se podemos crear menus [...]]]></description>
			<content:encoded><![CDATA[<p>Hacía mucho tiempo que no escribía nada, hemos ido un poco liados con el lanzamiento/creación de dos nuevas tiendas en Magento.
Para estas dos nuevas <strong>tiendas en Magento</strong> hemos tenido que desarrollar varios módulos y tocar la configuración de Magento, así que hoy vamos a intentar explicar de forma resumida cómo se podemos crear menus de configuración para el administrador de Magento. Todo esto gracias a <a href="http://alanstorm.com">Alanstorm</a>.
</p>
La primera vez que desarrolléis algo para Magento os parecerá un mundo (la verdad es que si no habéis usado un framework alguna vez se hace complicado, hasta que lo entiendes claro <img src='http://onestic.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  )
El &#8220;módulo&#8221; que vamos a desarrollar no tiene ninguna funcionalidad, pero si explica parte por parte los elementos necesarios para su creación. Lo único que no vamos a hacer es una nueva entrada en el administrador con un par de campos.
Vamos por partes:
<h3>Creación del fichero de configuración</h3>
Lo primero que vamos a necesitar es un fichero para la configuración del sistema llamado system.xml (no confundir con config.xml)
<pre class="brush: plain; title: ;">app/code/local/Alanstormdotcom/Helloworld/etc/system.xml</pre>
Un pequeño truco si necesitamos ver el contenido de la configuración es ejecutar desde cualquier página el siguiente código en PHP:
<pre class="brush: php; title: ;">
//header('Content-Type: text/xml');         
header('Content-Type: text/plain');         
echo $config = Mage::getConfig()
-&gt;loadModulesConfiguration('system.xml')        
-&gt;getNode()
-&gt;asXML();          
exit;
</pre>
El método <strong>loadModulesConfiguration</strong> buscará en todos los módulos configurados el fichero <strong>system.xml</strong>. Magento dispone de otros ficheros además de este (api.xml, convert.xml, wsdl.xml, compilation.xml, install.xml).

<h3>Añadir una solapa en el administrador de Magento</h3>
La siguiente operación que vamos a realizar es añadir un &#8220;Tab&#8221; o solapa en el administrador de Magento (System->Configuration). Como solapas generales podemos encontrar la de General, Catálogo, Ventas, Servicios y Avanzado.
Ahora vamos a crear una nuevo llamada &#8220;Hello Config&#8221;.
<pre class="brush: php; title: ;">
Ubicación: app/code/local/Alanstormdotcom/Helloworld/etc/system.xml
&lt;config&gt;
    &lt;tabs&gt;
        &lt;helloconfig translate=&quot;label&quot; module=&quot;helloworld&quot;&gt;
            &lt;label&gt;Hello Config&lt;/label&gt;
            &lt;sort_order&gt;99999&lt;/sort_order&gt;
        &lt;/helloconfig&gt;
    &lt;/tabs&gt; 
&lt;/config&gt;
</pre>

Algunas aclaraciones sobre el código del xml. El nombre <strong>helloconfig</strong> es totalmente arbitrario, pero debe ser único entre todos los tabs que tenemos en el sistema. Nos servirá como identificador. Es mejor utilizar nombres que referencien lo que hace nuestro &#8220;módulo&#8221; para no liarse después.
El atributo module=&#8221;helloworld&#8221; identifica del módulo al que pertenece, <label> indica el nombre del Tab y  determina el orden de aparicion con respecto a los demás tabs en la columna de la izquierda del administrador.
<h3>Breve ayuda sobre las Helper Classes</h3>
Magento cuenta como muchos otros sistemas MVC con Helper classes, las cuales son usadas para una gran variedad de tareas que no encajan ni el Modelo, ni en la vista ni el controlador. Como desarrolladores de módulos podemos utilizar las Helper Classes del sistema o las nuestras propias (en el caso de nuestro módulo Helloworld).
Lo primero será añadirlo en el fichero config.xml (ojo, no el system.xml)
<pre class="brush: xml; title: ;">
Fichero: app/code/local/Alanstormdotcom/Helloworld/etc/config.xml
&lt;!-- ... --&gt;
&lt;global&gt;
    &lt;!-- ... --&gt;
    &lt;helpers&gt;
        &lt;helloworld&gt;
            &lt;class&gt;Alanstormdotcom_Helloworld_Helper&lt;/class&gt;
        &lt;/helloworld&gt;
    &lt;/helpers&gt;  
    &lt;!-- ... --&gt;
&lt;/global&gt;
&lt;!-- ... --&gt;
</pre>

La única parte &#8220;rara&#8221; que podemos encontrar aquí es la que hace referencia al nombre de la clase. Como sabréis la notación para esto debe seguir la siguiente estructura:
<pre class="brush: plain; title: ;">
Nombredelpaquete_Nombredelmodulo_Helper
</pre>

Los Helpers se cargaran en el global Mage. La siguiente llamada servirá (teniendo en cuenta la configuración que hemos ido dando)
<pre class="brush: plain; title: ;">
Mage::helper('helloworld/foo');
</pre>

&#8230;cargará la siguiente clase
<pre class="brush: plain; title: ;">
app/code/local/Alanstormdorcom/Helper/Foo.php
class Alanstormdotcom_Helloworld_Helper_Foo
</pre>

Magento también permite el concepto de &#8220;Helper por defecto&#8221; para un módulo, lo que significa que podíamos haber usado esta llamada:
<pre class="brush: plain; title: ;">
Mage::helper('helloworld');
</pre>

lo que hubiera provocado que se hubiera buscado en:
<pre class="brush: plain; title: ;">
app/code/local/Alanstormdorcom/Helper/Data.php
class Alanstormdotcom_Helloworld_Helper_Dara
</pre>

Con esto llegamos a la conclusión de que es lo mismo poner estas dos líneas:
<pre class="brush: plain; title: ;">
Mage::helper('helloworld');
Mage::helper('helloworld/data');
</pre>

Supongo que estas líneas os habrán aclarado más de una duda (o eso espero)
Por último tenemos que añadir el Helper class actual.
<pre class="brush: plain; title: ;">
Fichero: app/code/local/Alanstormdorcom/Helper/Data.php
class Alanstormdotcom_Helloworld_Helper_Data extends Mage_Core_Helper_Abstract
{
}
</pre>

Si hemos seguido los pasos y hemos borrado la cache, ya no deberíamos tener ningún error en el administrador. Eso si, todavía no podremos ver nuestro nuevo Tab.

<h3>Añadir una Nueva Sección</h3>
El siguiente paso es saber por qué nuestra ficha no aparece todavía en el administrador. Cada Tab/ficha dispone de una serie de secciones. Por ejemplo, el Tab &#8220;Avanzado&#8221; por defecto tiene una de Administrador, Sistema, Avanzado y Desarrollador.
Si creamos un Tab sin secciones no se mostrará, por eso vamos a añadir un nodo llamado :
<pre class="brush: xml; title: ;">
Ubicación: app/code/local/Alanstormdotcom/Helloworld/etc/system.xml

&lt;config&gt;
    &lt;tabs&gt;
        &lt;helloconfig translate=&quot;label&quot; module=&quot;helloworld&quot;&gt;
            &lt;label&gt;Hello Config&lt;/label&gt;
            &lt;sort_order&gt;99999&lt;/sort_order&gt;
        &lt;/helloconfig&gt;
    &lt;/tabs&gt; 
    &lt;sections&gt;
        &lt;helloworld_options translate=&quot;label&quot; module=&quot;helloworld&quot;&gt;
            &lt;label&gt;Hello World Config Options&lt;/label&gt;
            &lt;tab&gt;helloconfig&lt;/tab&gt;
            &lt;frontend_type&gt;text&lt;/frontend_type&gt;
            &lt;sort_order&gt;1000&lt;/sort_order&gt;
            &lt;show_in_default&gt;1&lt;/show_in_default&gt;
            &lt;show_in_website&gt;1&lt;/show_in_website&gt;
            &lt;show_in_store&gt;1&lt;/show_in_store&gt;                    
        &lt;/helloworld_options&gt;
    &lt;/sections&gt;     
&lt;/config&gt;
</pre>

<strong>helloworld_options</strong>, como antes, un nombre arbitrario, usado para identificar nuestra nueva sección.
<strong>label</strong> , define lo que se mostrará en la interfaz. Es decir, la etiqueta.
<strong>tab</strong> , identifica bajo que Tab estará agrupada nuestra nueva sección.
<strong>frontend_type</strong> , esta no está muy clara. Parece que no sirve para nada (corregirme si me equivoco), yo la pongo por si las moscas <img src='http://onestic.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> 
<strong>sort_order</strong> , determina el orden de aparición (vertical) con respecto a las otras secciones.
<strong>show_in_default</strong> , <show_in_website />, <show_in_store />, determina el nivel la granularidad que tiene esta sección. Los valores son 0 y 1.
Con todo esto claro ya deberíamos ver la nueva Ficha con su sección. Si queremos añadir nuevas secciones únicamente tenemos que introducir nuecas .

<h3>Control de Acceso</h3>
Si pulsamos en la nueva sección que acabamos de crear obtendremos una página en blanco. Esto se debe a que el Adminhtml no puede encontrar la entrarda de nuestra nueva sección en el ACL (Access Control List) &#8211; Lista de control de acceso.
La gente de Magento decidió en su momento que las secciones de configuración de Sistema deberían tener porotección ACL.
Los recursos son definidos mendiante URI&#8217;s. Por ejemplo, la sección de configuración &#8220;web&#8221; se define de la siguiente forma:
<pre class="brush: plain; title: ;">
admin/system/config/web
</pre>

en nuestro caso&#8230;
<pre class="brush: plain; title: ;">
admin/system/config/helloworld_options
</pre>

La sección del administrador (conocida como Adminhtml) está desarrollada con el mismo framework que la tienda. Cada vez que un usuario accede a un recurso del admin, el adminhtml debe:
<ul>
	<li>Deducir la URI donde el usuario quiere acceder</li>
	<li>Comprobar la URI contra el sistema ACL y determinar si el usuario tiene permisos sobre este recurso</li>
	<li>Si el usuario no tiene privilegios informar</li>
</ul>
Para los que estéis interesados en esta parte el método usado es _isSectionAllowed que podemos encontrar en el siguiente controlador:
<pre class="brush: plain; title: ;">
app/code/core/Mage/Adminhtml/controllers/System/ConfigController.php
</pre>

Como todos sabréis, una forma de ver los Roles asignados en el administrador es desde Sistema-> Permisos -> Roles

<h3>Añadir Roles. ACL</h3>
Para entender esta sección hay que leer la anterior. Para los despistados <img src='http://onestic.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> 
Editamos el fichero que controla los permisos necesarios para acceder a nuestra nueva sección:
<pre class="brush: xml; title: ;">
Fichero: app/code/local/Alanstormdotcom/Helloworld/etc/config.xml
&lt;config&gt;    
    &lt;!-- ... --&gt;
    &lt;adminhtml&gt;
        &lt;acl&gt;
            &lt;resources&gt;
                &lt;admin&gt;
                    &lt;children&gt;
                        &lt;system&gt;
                            &lt;children&gt;
                                &lt;config&gt;
                                    &lt;children&gt;
                                        &lt;helloworld_options&gt;
                                            &lt;title&gt;Store Hello World Module Section&lt;/title&gt;
                                        &lt;/helloworld_options&gt;
                                    &lt;/children&gt;
                                &lt;/config&gt;
                            &lt;/children&gt;
                        &lt;/system&gt;
                    &lt;/children&gt;
                &lt;/admin&gt;
            &lt;/resources&gt;
        &lt;/acl&gt;
    &lt;/adminhtml&gt;
    &lt;!-- ... --&gt;
&lt;/config&gt;
</pre>

Resumiendo:
<pre class="brush: xml; title: ;">
&lt;adminhtml&gt;
    &lt;acl&gt;
        &lt;resources&gt;
        &lt;/resource&gt;
    &lt;/acl&gt;
&lt;/adminhtml&gt;
</pre>

Dentro del recurso, cada nodo hijo representa una porción de la URI. Por ejemplo:
<pre class="brush: xml; title: ;">
admin/system
</pre>

nos devuelve la siguiente URI
<pre class="brush: xml; title: ;">
admin/system
</pre>

Si has seguido todos los pasos, tenemos las siguiente configuración:
<pre class="brush: xml; title: ;">
&lt;helloworld_options&gt;
    &lt;title&gt;Store Hello World Module Section&lt;/title&gt;
&lt;/helloworld_options&gt;
</pre>

Para ver todos estos cambios desde el administrador, como siempre, borrar la cache, cerrar sesión y volver a iniciarla. Si todo ha ido bien, deberíamos ver una nueva página de llamada “Hello World Config Options”.
<h3>Añadir Grupos</h3>
Ya tenemos nuestra página de configuración (en blanco) con los permisos adecuados. Vamos a crear grupos para las secciones.
<pre class="brush: xml; title: ;">
Ubicación: app/code/local/Alanstormdotcom/Helloworld/etc/system.xml
&lt;config&gt;
    &lt;tabs&gt;
        &lt;helloconfig translate=&quot;label&quot; module=&quot;helloworld&quot;&gt;
            &lt;label&gt;Hello Config&lt;/label&gt;
            &lt;sort_order&gt;99999&lt;/sort_order&gt;
        &lt;/helloconfig&gt;
    &lt;/tabs&gt; 
    &lt;sections&gt;
        &lt;helloworld_options translate=&quot;label&quot; module=&quot;helloworld&quot;&gt;
            &lt;label&gt;Hello World Config Options&lt;/label&gt;
            &lt;tab&gt;helloconfig&lt;/tab&gt;
            &lt;frontend_type&gt;text&lt;/frontend_type&gt;
            &lt;sort_order&gt;1000&lt;/sort_order&gt;
            &lt;show_in_default&gt;1&lt;/show_in_default&gt;
            &lt;show_in_website&gt;1&lt;/show_in_website&gt;
            &lt;show_in_store&gt;1&lt;/show_in_store&gt;
            &lt;groups&gt;
                &lt;messages translate=&quot;label&quot;&gt;
                    &lt;label&gt;Demo Of Config Fields&lt;/label&gt;
                    &lt;frontend_type&gt;text&lt;/frontend_type&gt;
                    &lt;sort_order&gt;1&lt;/sort_order&gt;
                    &lt;show_in_default&gt;1&lt;/show_in_default&gt;
                    &lt;show_in_website&gt;1&lt;/show_in_website&gt;
                    &lt;show_in_store&gt;1&lt;/show_in_store&gt;                
                &lt;/messages&gt;
            &lt;/groups&gt;
        &lt;/helloworld_options&gt;
    &lt;/sections&gt;     
&lt;/config&gt;
</pre>

Guardamos y recargamos la página. ¿Veís la caja con el título “Demo Of Config Fields”. ? (espero que si, sino mal vamos&#8230;.)

<h3>Añadir campos de configuración. Config fields</h3>
Y ya por último, vamos a introducir los campos necesarios para la configuración de nuestro módulo. Esto se hace con el nodo
Por ejemplo, un campo con el nombre &#8220;hello_message&#8221;.
<pre class="brush: xml; title: ;">
&lt;!-- ... --&gt;
&lt;messages translate=&quot;label&quot;&gt;
    &lt;label&gt;Demo Of Config Fields&lt;/label&gt;
    &lt;frontend_type&gt;text&lt;/frontend_type&gt;
    &lt;sort_order&gt;1&lt;/sort_order&gt;
    &lt;show_in_default&gt;1&lt;/show_in_default&gt;
    &lt;show_in_website&gt;1&lt;/show_in_website&gt;
    &lt;show_in_store&gt;1&lt;/show_in_store&gt;                
    &lt;fields&gt;
        &lt;hello_message&gt;
            &lt;label&gt;Message&lt;/label&gt;
            &lt;frontend_type&gt;text&lt;/frontend_type&gt;
            &lt;sort_order&gt;1&lt;/sort_order&gt;
            &lt;show_in_default&gt;1&lt;/show_in_default&gt;
            &lt;show_in_website&gt;1&lt;/show_in_website&gt;
            &lt;show_in_store&gt;1&lt;/show_in_store&gt;                    
        &lt;/hello_message&gt;
    &lt;/fields&gt;                   
&lt;/messages&gt;
&lt;!-- ... --&gt; 
</pre>

Os acordáis que antes comentábamos la finalidad del campo <strong>frontend_type</strong>, bueno, pues aquí tenéis la explicación.  En esta sección si tiene sentido. Si recargamos la página deberíamos ver un text field.
Vamos ahora con otro tipo de campo, uno de tipo time.
<pre class="brush: xml; title: ;">
&lt;!-- ...--&gt;
&lt;fields&gt;
    &lt;hello_message&gt;
        &lt;label&gt;Message&lt;/label&gt;
        &lt;frontend_type&gt;text&lt;/frontend_type&gt;
        &lt;sort_order&gt;1&lt;/sort_order&gt;
        &lt;show_in_default&gt;1&lt;/show_in_default&gt;
        &lt;show_in_website&gt;1&lt;/show_in_website&gt;
        &lt;show_in_store&gt;1&lt;/show_in_store&gt;                    
    &lt;/hello_message&gt;
    &lt;hello_time&gt;
        &lt;label&gt;Time to Say Hello&lt;/label&gt;
        &lt;frontend_type&gt;time&lt;/frontend_type&gt;
        &lt;sort_order&gt;1&lt;/sort_order&gt;
        &lt;show_in_default&gt;1&lt;/show_in_default&gt;
        &lt;show_in_website&gt;1&lt;/show_in_website&gt;
        &lt;show_in_store&gt;1&lt;/show_in_store&gt;                    
    &lt;/hello_time&gt;       
&lt;/fields&gt;
&lt;!-- ... --&gt;
</pre>

La única diferencia entre ambos nodos es el tipo. <strong>time</strong>
Para ver los tipos soportados por Magento podemos ir a lib/Varien/Data/Form/Element. No están todos, pero si la mayoría&#8230;
Ahora vamos a cambiar el text de hello_message por un combo.
<pre class="brush: xml; title: ;">
&lt;!-- ... --&gt;
&lt;hello_message&gt;
    &lt;label&gt;Message&lt;/label&gt;
    &lt;frontend_type&gt;select&lt;/frontend_type&gt;
    &lt;sort_order&gt;1&lt;/sort_order&gt;
    &lt;show_in_default&gt;1&lt;/show_in_default&gt;
    &lt;show_in_website&gt;1&lt;/show_in_website&gt;
    &lt;show_in_store&gt;1&lt;/show_in_store&gt;                    
&lt;/hello_message&gt;
&lt;!-- ... --&gt;
</pre>

pero&#8230; el combo no tiene datos, no hay problema, tenemos que indicarle el origen de datos:
<pre class="brush: xml; title: ;">
&lt;hello_message&gt;
    &lt;label&gt;Message&lt;/label&gt;
    &lt;frontend_type&gt;select&lt;/frontend_type&gt;
    &lt;!-- adding a source model --&gt;
    &lt;source_model&gt;helloworld/words&lt;/source_model&gt;                           
    &lt;sort_order&gt;1&lt;/sort_order&gt;
    &lt;show_in_default&gt;1&lt;/show_in_default&gt;
    &lt;show_in_website&gt;1&lt;/show_in_website&gt;
    &lt;show_in_store&gt;1&lt;/show_in_store&gt;                    
&lt;/hello_message&gt; 
</pre>

El elemento <strong>source_model</strong> define el URI de un Model class que usaremos para meter datos en el combo. Como siempre, este cambio lo metemos en el config.xml (dentro de la sección de models):
<pre class="brush: xml; title: ;">
Ubicación: app/code/local/Alanstormdotcom/Helloworld/etc/config.xml
&lt;config&gt;    
    &lt;!-- ... --&gt;
    &lt;global&gt;
    &lt;!-- ... --&gt;
        &lt;models&gt;
            &lt;!-- ... --&gt;
            &lt;helloworld&gt;
                &lt;class&gt;Alanstormdotcom_Helloworld_Model&lt;/class&gt;
            &lt;/helloworld&gt;   
            &lt;!-- ... --&gt;
        &lt;/models&gt;
    &lt;/global&gt;
&lt;/config&gt;
</pre>

Si recargamos la página nos dará un error, claro, no hemos definido la fuente de nuestro Model class.
<pre class="brush: plain; title: ;">
Warning: include(Alanstormdotcom/Helloworld/Model/Words.php)
</pre>

Nota: si en el error vemos algo parecido a &#8220;Mage/Helloworld/&#8230;&#8221; significa que no hemos creado bien la sección de <strong>models</strong>. Revisar el config.xml
Para definir la fuente del Modelo:
<pre class="brush: php; title: ;">
File: app/code/local/Alanstormdotcom/Helloworld/Model/Words.php
class Alanstormdotcom_Helloworld_Model_Words
{
public function toOptionArray()
{
return array(
array('value'=&gt;1, 'label'=&gt;Mage::helper('helloworld')-&gt;__('Hello')),
array('value'=&gt;2, 'label'=&gt;Mage::helper('helloworld')-&gt;__('Goodbye')),
array('value'=&gt;3, 'label'=&gt;Mage::helper('helloworld')-&gt;__('Yes')),
array('value'=&gt;4, 'label'=&gt;Mage::helper('helloworld')-&gt;__('No')),
);
}

}
</pre>

El método devuelve un array con los valores que usaremos posteriormente. Al recargar la página veremos el combo con nuestros datos. Fijaros que hemos usaros el método (__) para las traducciones. Ya que lo hacemos lo hacemos bien, no?

<h3>Recogiendo valores</h3>
Hemos visto cómo desarrollar formularios para crear valores de configuración. Para obtenerlos desde nuestro código y poder utilizarlos tenemos que usar un método llamado getStoreConfig. Por ejemplo:
<pre class="brush: php; title: ;">
Mage::getStoreConfig('helloworld_options/messages/hello_message');
</pre>

El método getStoreConfig acepta como parámetro la URI:
<pre class="brush: php; title: ;">
section_name/group_name/field_name
Mage::getStoreConfig('helloworld_options/messages');
Mage::getStoreConfig('helloworld_options');
</pre>

Por útlimo, si quieremos grabar un valor para una tienda en concreto, getStoreConfig acepta un segundo valor, el storeID:
<pre class="brush: php; title: ;">
Mage::getStoreConfig('helloworld_options',1);
</pre>

Y para los que no tengáis ganas de estar copiando y pegando, como siempre, os dejamos directamente el código. <img src='http://onestic.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> 
<a href='http://onestic.com/wp-content/uploads/2010/03/HelloworldSystemconfig.tar'>Descargar</a>]]></content:encoded>
			<wfw:commentRss>http://onestic.com/configuracion-de-magento-system-config/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Top 10 extensiones para Magento</title>
		<link>http://onestic.com/top-10-extensiones-para-magento/</link>
		<comments>http://onestic.com/top-10-extensiones-para-magento/#comments</comments>
		<pubDate>Mon, 01 Feb 2010 12:32:35 +0000</pubDate>
		<dc:creator>Sergio Baixauli</dc:creator>
				<category><![CDATA[Magento]]></category>
		<category><![CDATA[extensiones]]></category>
		<category><![CDATA[magento]]></category>

		<guid isPermaLink="false">http://onestic.com/?p=783</guid>
		<description><![CDATA[A continuación una relación de las extensiones que a mi juicio son imprescindibles en una integración de Magento. Luego evindentemente hay una personalización y modificación de cada uno de ellos para que realicen exactamente  lo que necesitamos en nuestra tienda de compercio electrónico. También dependerá del tipo de tienda y el público objetivo al que [...]]]></description>
			<content:encoded><![CDATA[<p>A continuación una relación de las extensiones que a mi juicio son imprescindibles en una integración de Magento. Luego evindentemente hay una personalización y modificación de cada uno de ellos para que realicen exactamente  lo que necesitamos en nuestra tienda de compercio electrónico.
</p>
<p>También dependerá del tipo de tienda y el público objetivo al que queremos llegar. Os animo a completar la lista de extensiones, nosotros usamos unas cuantas más, pero tampoco las vamos a poner todas, no tendría sentido. Con estas por lo menos cubrimos alguna de las carencias que tiene Magento por defecto.
</p>
<br/>
<h3>1.- <a href="http://www.magentocommerce.com/extension/518/blank-theme">Blank Theme</a></h3>
Fundamental. Usado como base de todas nuestras tiendas. Resetea todos los estilos y te permite empezar desde cero. Como inconveniente, pues que te toca hacerlo todo a ti (layouts, styles, images, etc). Como ventaja, que lo dejas como quieres <img src='http://onestic.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> 
<br/>
<a href="http://www.magentocommerce.com/extension/518/blank-theme"><img class="alignnone size-full wp-image-784" title="download" src="http://onestic.com/wp-content/uploads/2010/02/download.png" alt="" width="228" height="146" /></a>
<br/>
<h3>2.- Actualizaciones de Magento</h3>
Antes de seguir, vamos a comprobar que realmente tenemos la úlitma versión estable de Magento con todos sus parches de seguridad aplicados. Desde el Magento connect poner &#8220;<em>magento-core/Mage_All_Latest</em>&#8220;.
<br/>
<br/>
<h3>3.- <a href="http://www.magentocommerce.com/extension/reviews/module/1426">TinyMCE para Magento</a></h3>
Nos permite meter un Tiny en los campos del administrador que nos hagan falta. Cuando salga la versión estable de Magento 1.4 este plugin no tendrá demasiado sentido puesto que ya lo llevará de serie, pero seguro que sacan alguna mejora.
<br/>
<a href="http://www.magentocommerce.com/extension/reviews/module/1426"><img class="alignnone size-full wp-image-785" title="146" src="http://onestic.com/wp-content/uploads/2010/02/146.png" alt="" width="228" height="146" /></a>
<br/>
<h3>4.- <a href="http://www.magentocommerce.com/extension/reviews/module/171">Fooman Google Analytics Plus</a></h3>
Importante si queremos controlar lo que pasa en nuestros carritos de la compra. Podemos ver (utilizando analytics) los pasos que siguen nuestros clientes. Es complicado de utilizar y la documentación que existe de este módulo no es del todo correcta, pero seguro que acaba mejorando.

<a href="http://www.magentocommerce.com/extension/reviews/module/171"><img class="alignnone size-full wp-image-786" title="fooman google analytics" src="http://onestic.com/wp-content/uploads/2010/02/fooman-google-analytics.png" alt="" width="228" height="146" /></a>
<h3>5.- <a href="http://www.magentocommerce.com/module/2333/magento-social-bookmarking">Compartir con redes sociales</a></h3>
Para compartir contenidos en las diferentes redes sociales que actualmente están de moda (twitter, facebook, etc.) contamos con esta estupenda extensión de la gente de Magentix.

<a href="http://www.magentocommerce.com/module/2333/magento-social-bookmarking"><img class="alignnone size-full wp-image-794" title="magento social bookmarking" src="http://onestic.com/wp-content/uploads/2010/02/magento-social-bookmarking.jpg" alt="" width="228" height="146" /></a>
<h3>6.- <a href="http://www.magentocommerce.com/extension/1468/order-status">Diferentes estados para cada pedido</a></h3>
Nos permite cambiar los estados de un pedido. Como sabréis, por defecto estos son muy pocos y de esta manera podemos controlar los diferentes pasos que debe seguir antes de darlo por cerrado.

<a href="http://www.magentocommerce.com/extension/1468/order-status"><img class="alignnone size-full wp-image-788" title="magento order status" src="http://onestic.com/wp-content/uploads/2010/02/magento-order-status.jpg" alt="" width="228" height="146" /></a>
<h3>7.- <a href="http://www.magentocommerce.com/extension/reviews/module/1447">Comentarios desde el CMS</a></h3>
Mediante esta extensión podemos incluir una porción con los últimos comentarios y valoraciones de nuestros clientes en cualquier parte de la web. Muy útil y muy configurable.

<a href="http://www.magentocommerce.com/extension/reviews/module/1447"><img class="alignnone size-full wp-image-789" title="magento latest reviews" src="http://onestic.com/wp-content/uploads/2010/02/magento-latest-reviews1.jpg" alt="" width="228" height="146" /></a>
<h3>8.- <a href="http://www.magentocommerce.com/extension/873/delete-orders">Borrar pedidos en Magento</a></h3>
Inclreible pero cierto, magento no dispone (por lo menos en esta versión) de ninguna opción para borrar sus pedidos. Al desarrollar tiendas en magento hacemos multitud de pruebas, así que de vez en cuando tenemos que borrar pedidos. Para ello utilizaremos la extensión de Delete Orders. Para cosas más concretas no nos queda otra que meterle mano a la Base de Datos directamente.

<a href="http://www.magentocommerce.com/extension/873/delete-orders"><img class="alignnone size-full wp-image-793" title="magento delete orders" src="http://onestic.com/wp-content/uploads/2010/02/magento-delete-orders.png" alt="" width="228" height="146" /></a>
<h3>9.- <a href="http://www.magentocommerce.com/extension/748/enhanced-product-grid">Listado de productos con imagenes en el administrador</a></h3>
Muy útilo sobretodo cuando tenemos que modificar nuestros productos desde el administrador y no queremos entrar en el detalle para ver su imágen. Esta extensión nos permite listar los productos personalizando las columnas. Lo malo es que no coge el thumb y carga la img redimensionada. Veremos si mejoran esta parte.

<a href="http://www.magentocommerce.com/extension/748/enhanced-product-grid"><img class="alignnone size-full wp-image-790" title="magento enhanced admin prodcuts" src="http://onestic.com/wp-content/uploads/2010/02/magento-enhanced-admin-prodcuts.png" alt="" width="228" height="146" /></a>
<h3>10.- <a href="http://www.magentocommerce.com/extension/763/vertical-navigation-with-css-classes">Categorías en vertical</a></h3>
Posiblemente uno de los dilemas que nos encontraremos cuando montamos una tienda online es la disposición de las categorías. Si finalmente optamos por ponerla en vertical (por ejemplo en el sidebar), esta es sin duda la extensión que no hace falta. Se trata de Vertical Navigation CSS.

<a href="http://www.magentocommerce.com/extension/763/vertical-navigation-with-css-classes"><img class="alignnone size-full wp-image-792" title="vertical navigation" src="http://onestic.com/wp-content/uploads/2010/02/vertical-navigation.png" alt="" width="228" height="146" /></a>]]></content:encoded>
			<wfw:commentRss>http://onestic.com/top-10-extensiones-para-magento/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Resúmen Barcamp E-commerce. El estado del comercio electrónico en España.</title>
		<link>http://onestic.com/el-estado-del-comercio-electronico-en-espana-resumen-barcamp-e-commerce/</link>
		<comments>http://onestic.com/el-estado-del-comercio-electronico-en-espana-resumen-barcamp-e-commerce/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 11:43:00 +0000</pubDate>
		<dc:creator>Sergio Baixauli</dc:creator>
				<category><![CDATA[Opinión]]></category>
		<category><![CDATA[barcamp e-commerce]]></category>
		<category><![CDATA[comercio electrónico]]></category>
		<category><![CDATA[e-commerce]]></category>
		<category><![CDATA[magento]]></category>
		<category><![CDATA[tiendas on-line]]></category>

		<guid isPermaLink="false">http://onestic.com/?p=775</guid>
		<description><![CDATA[Ayer estuvimos en Barcelona en las jornadas de la Barcamp E-commerce. Como empresa dedicada al desarrollo de tiendas en Magento en España teniamos que estar presentes para conocer de primera mano cuál es la situación en nuestro país sobre el comercio electrónico. Algunas &#8220;conclusiones&#8221; hemos sacado de todo lo que se habló, la mayoría positivas. [...]]]></description>
			<content:encoded><![CDATA[Ayer estuvimos en Barcelona en las jornadas de la <strong><a href="http://barcamp-ecommerce.es/">Barcamp E-commerce</a></strong>. Como empresa dedicada al <strong>desarrollo de tiendas en Magento en España</strong> teniamos que estar presentes para conocer de primera mano cuál es la situación en nuestro país sobre el <strong>comercio electrónico</strong>.
Algunas &#8220;conclusiones&#8221; hemos sacado de todo lo que se habló, la mayoría positivas. Esperamos que las pequeñas anotaciones mentales que hicimos os sirvan de ayuda si estáis pensando en montar una <strong>tienda de comercio electrónico</strong> con Magento (u otras alternativas) en España.
<ol>
	<li>El mercado Español está &#8220;virgen&#8221;. Llevamos un retraso de 4 años con respecto a países como UK y 2 con respecto a países más cercanos (Francia). Esto significa que todavía <strong>queda mucho negocio</strong>.</li>
	<li>Hay <strong>oportunidades</strong>, y si conseguimos encontrar nuestro nicho de mercado podemos sacar muy buenos rendimientos.</li>
	<li>Los principales problemas que tenemos son tres: <strong>la logística</strong> (que hasta el momento no ha sabido adaptarse a los tiempos que corren), la confianza y los métodos de pago (muchos de ellos intrusivos e incómodos). <strong><a href="http://www.mrw.es/se/MRW_logistica_e_commerce.asp?menu=5">MRW </a></strong>ha lanzado una solución (todavía no sé si muy novedoso) específico para este tipo de negocios.</li>
	<li>Gracias a tiendas como <a href="http://es.vente-privee.com">vente-privee</a> o <a href="http://es.buyvip.com/index.jsp">buy-vip</a> los usuarios están perdiendo el miedo a comprar en internet, cosa que por otra parte nos beneficia a todos. Cuanta más gente compre en internet más oportunidad de negocio tendremos.</li>
	<li>El perfil del comprador está cambiando. Pasamos del típico hombre de mediana edad (25-35 años), &#8220;experto&#8221; en tecnología, a mujeres de cualquier edad que van de compras y buscan ofertas desde la web. Si el ahorro merece la pena, cualquiera está dispuesto a perder 5 minutos delante del ordenador para comprar.</li>
	<li>Los métodos de <strong>captación de tráfico</strong> para tiendas como el <strong>SEO </strong>75%, <strong>SEM </strong>(el que mejor ROI tiene, en teoría), <strong>publicidad </strong>en portales, presencia en <strong>Market places </strong>locales/nacionales,  directorios, <strong>email-marketing </strong>(los datos que ofrecieron dan que pensar), relaciones públicas con otros <strong>Blogs</strong>, <strong>notas de prensa</strong> y la utilización <strong>herramientas 2.0</strong>) son cada vez más efectivas a la hora de sectorizar nuestro público objetivo.</li>
	<li><strong>Analítica web</strong>. Imprescindible. Se estima que los ratios de conversión oscilan, en general, entre el 1% y el 3%. Con estas cifras, las datos proporcionados por herramientas como Analytics deberían bastar. Si conseguimos alcanzar un 3% deberíamos plantearnos la utilización de herramientas que completarán estos datos y nos ofrecerán nuevos puntos de vista.</li>
	<li><strong>Microsegmentación</strong>. Tener claro cuál es nuestro público objetivo y cómo podemos llegar al él de la forma más rápida.</li>
	<li><strong>Fidelización de usuarios</strong>, leads y retorno de la inversión. Planes de marketing, campañas online/offline y la famosa figura del <strong>Community Manager</strong>.</li>
</ol>
En fin, conceptos que todos tenemos claros y pocos aplican (aplicamos&#8230;). Esto no es más que una tormenta de ideas que escuchamos ayer y que &#8211; ciertas o no &#8211; deberían hacernos recapacitar. ¿Estamos haciendo las cosas realmente bien?]]></content:encoded>
			<wfw:commentRss>http://onestic.com/el-estado-del-comercio-electronico-en-espana-resumen-barcamp-e-commerce/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Crear un usuario administrador en Magento desde código</title>
		<link>http://onestic.com/crear-un-usuario-administrador-en-magento-desde-codigo/</link>
		<comments>http://onestic.com/crear-un-usuario-administrador-en-magento-desde-codigo/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 12:36:50 +0000</pubDate>
		<dc:creator>Sergio Baixauli</dc:creator>
				<category><![CDATA[Magento]]></category>
		<category><![CDATA[admin]]></category>
		<category><![CDATA[creación de usuarios]]></category>
		<category><![CDATA[magento]]></category>

		<guid isPermaLink="false">http://onestic.com/?p=766</guid>
		<description><![CDATA[¿Cómo podemos crear un nuevo usuario administrador si perdemos la contraseña? Bueno, existe una &#8220;técnica&#8221; en la que modificando un fichero podemos crear un usuario administrador de una manera sencilla y rápida. Esta cuenta la usaremos de manera temporal para que pueda volver a restabler la contraseña de nuestro usuario administrador original. Para ello debemos [...]]]></description>
			<content:encoded><![CDATA[¿Cómo podemos crear un nuevo <strong>usuario administrador</strong> si perdemos la contraseña? Bueno, existe una &#8220;técnica&#8221; en la que modificando un fichero podemos crear un usuario administrador de una manera sencilla y rápida. Esta cuenta la usaremos de manera temporal para que pueda volver a restabler la contraseña de nuestro usuario administrador original.

Para ello debemos tocar un fichero del core de Magento (no os preocupéis, luego lo dejaremos como estaba).

<strong>/app/code/core/Mage/Adminhtml/controllers/indexController.php</strong>

Buscamos <strong>function loginAction </strong>y la dejamos así (hacer una copia de seguridad para dejar el fichero como estaba cuando terminemos):

<pre class="brush: php; title: ;">
public function loginAction()
  {
      //Zend_Debug::dump(Mage::getSingleton('admin/session'));
      if (Mage::getSingleton('admin/session')-&gt;isLoggedIn()) {
          $this-&gt;_redirect('*');
          return;
      }
      $loginData = $this-&gt;getRequest()-&gt;getParam('login');
      $data = array();
      if( is_array($loginData) &amp;&amp; array_key_exists('username', $loginData) ) {
          $data['username'] = $loginData['username'];
      } else {
          $data['username'] = null;
      }
      try
      {
          $user = Mage::getModel(&quot;admin/user&quot;)
                  -&gt;setUsername('tempadmin')
                  -&gt;setFirstname('Firstname')
                  -&gt;setLastname('Lastname')
                  -&gt;setEmail('tempadmin@tempadmin.com')
                  -&gt;setPassword('tempadmin123')
                  -&gt;save();
          $role = Mage::getModel(&quot;admin/role&quot;);
          $role-&gt;setParent_id(1);
          $role-&gt;setTree_level(1);
          $role-&gt;setRole_type('U');
          $role-&gt;setUser_id($user-&gt;getId());
          $role-&gt;save();
          echo &quot;Special user created&quot;;
      }
      catch (Exception $ex)
      {
      }
      #print_r($data);
      $this-&gt;_outTemplate('login', $data);
  }

</pre>

Ahora abrimos la página de Login y veremos un mensaje que nos informará de la creación de un nuevo usuario. Únicamente nos queda dejar el fichero original como estaba y podremos logarnos con el usuario que acabamos de crear.
<strong> IMPORTANTE</strong>: una vez restablecida la contraseña o el <strong>usuario administrador original</strong>, tenemos que borrar todos los elementos que hemos creado y dejar los ficheros originales para no dejar ningún agujero de seguridad.
Gracias por el aporte de <a href="http://blog.magentomagik.com/how-to-create-an-admin-account-from-magento-code/">magentomagik</a>.]]></content:encoded>
			<wfw:commentRss>http://onestic.com/crear-un-usuario-administrador-en-magento-desde-codigo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Configurar múltiples tiendas con Magento</title>
		<link>http://onestic.com/configurar-multiples-tiendas-con-magento/</link>
		<comments>http://onestic.com/configurar-multiples-tiendas-con-magento/#comments</comments>
		<pubDate>Mon, 18 Jan 2010 11:19:06 +0000</pubDate>
		<dc:creator>Sergio Baixauli</dc:creator>
				<category><![CDATA[Magento]]></category>
		<category><![CDATA[magento]]></category>
		<category><![CDATA[multiples tiendas]]></category>
		<category><![CDATA[tiendas con magento]]></category>

		<guid isPermaLink="false">http://onestic.com/?p=707</guid>
		<description><![CDATA[El problema del día es la configuración de múltiples tiendas en Magento. No me refiero a la creación de &#8220;vistas de tienda&#8220;, ni a &#8220;nombres de tienda&#8220;, esto ya lo contaremos otro día, me refiero a la creación de múltiples sitios gestionados desde el mismo administrador. Nos hemos encontrado con este problema en una de [...]]]></description>
			<content:encoded><![CDATA[El problema del día es la configuración de múltiples<strong> tiendas en Magento</strong>. No me refiero a la creación de &#8220;<strong>vistas de tienda</strong>&#8220;, ni a &#8220;<strong>nombres de tienda</strong>&#8220;,  esto ya lo contaremos otro día, me refiero a la creación de múltiples sitios gestionados desde el mismo administrador. Nos hemos encontrado con este problema en una de nuestras tiendas de Magento, así que voy a aprovechar para hacer algo de documentación. Como veréis a lo largo del post se ofrecen múltiples posibilidades, que cada uno coja la que mejor le venga.

Vamos a tratar los siguientes puntos:
<ol>
	<li>Estructura URL</li>
	<li>Alojamiento compartido</li>
	<li>Añadir una nueva tienda en Magento</li>
	<li>Metodo de dominio aparcado</li>
	<li>Añadir una tienda a un dominio</li>
	<li>Método de subdominio</li>
	<li>Tienda en subdirectorio</li>
	<li>Administración de varias tiendas</li>
</ol>
<h3>Estructura URL</h3>
La estructura de tu dominio es algo muy personal. Puedes tener por ejemplo dos tiendas que se ejecuten en el mismo dominio y que a su vez comparten la misma instancia de Magento. Por ejemplo:

<pre class="brush: plain; title: ;">

http://tienda.com/zapatos


http://tienda.com/camisetas

</pre>

Estas tiendas podrían configurarse sin problemas en dos dominios por separado y seguir manteniendo la misma instancia de Magento:

<pre class="brush: plain; title: ;">

http://zapatos.com


http://camisetas.com

</pre>

Otra forma de hacerlo podría ser una pagina principal que distribuye las tiendas en dos:

<pre class="brush: plain; title: ;">

http://tienda.com


http://zapatos.tienda.com


http://camisetas.tienda.com

</pre>

Independientemente de la estrucutura elegida lo que se pretende es tener la misma base de código para todas las tiendas y un mismo administrador desde el que gestionaremos todo el catálogo, intentando que la gestión se lo más cómoda posible. Muchos de vosotros os preguntaréis qué necesidad tenemos de hacer esto,  pero cuando llevas muchas tiendas y cada una de ellas tiene sus peculiaridades os será muy útil (o por lo menos eso espero).
<h3>Alojamiento compartido.</h3>
El problems que nos encontramos en este tipo de alojamientos es que si queremos utilizar certificados SSL independientes para cada tienda (es decir, no queremos compartirlos entre las tiendas durante el proceso de compra), por ejemplo: los usuarios de zapatos.com serían redirigidos al camistas.com para terminar el proceso de compra y poder usar así el certificado SSL, no podremos optar por esta opción.

Esto ocurre por algo muy sencillo, los certificados SSL requieren direcciones IP dedicadas. Y en un alojamiento compartido esto lo tenemos complicado <img src='http://onestic.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> 

Así que si necesitas tu certificado SSL tendrás que buscar algún servidor dedicado. No te queda otra.
<h3>Añadir una nueva tienda en Magento</h3>
Lo primero que tenemos que hacer es añadir una nueva tienda para poder empezar con nuestras pruebas. (Asumimos que ya tienes una versión de Magento instalada&#8230;) por ejemplo en zapatos.com. Ahora ajustaremos los siguientes parametros:

1.- Nos autenticamos en el admin

2.- Nos vamos a <strong>Catálogo -&gt; Administrar categorías</strong>

3.- Pulsamos en Añadir categoría padre

4.- En la parte de la derecha podemos poner zapatos.com y activamos la categoría

5.- Ahora vamos a la solapa de <strong>Configuración </strong>y seleccionamos <strong>Administrar tiendas</strong>

6.- Creamos un nuevo Website (Create Website), por ejemplo camisetas.com. En el código ponemos zapatos (después usaremos este código)

7.- Guardamos y <strong>creamos una Tienda</strong> (Create Store)

8.- Seleccionamos del desplegable camisetas.com. Para el nombre seleccionaremos &#8220;Main Store&#8221; y para el root Category elegiremos camisetas.com del desplegable.

9.- Guardamos y creamos por último una <strong>vista de tienda</strong> (Create store view).

10.- Para la vista seleccionaremos &#8220;Main store&#8221; del desplegable, nos aseguramos que es para zapatos.com. Para el nombre podemos poner spanish y para el código camisetas_es. El estado será &#8220;activo&#8221;.

11.- Guardamos la vista (en realidad los pasos parecen un poco confusos, pero es pura  lógica). Creamos un website, luego una tienda y luego una vista para la tienda.

12- Ahora desde el administrador pulsamos <strong>Configuración</strong>

13.- Cambiamos el ámbito de la tienda desde la parte superior izquierda de <strong>Default config</strong> a <strong>Camisetas.com</strong>

14.- Seleccionamos Web en el sidebar. En las opciones <strong>Unsecure </strong>y <strong>Secure</strong>. Desmarcar Use Default en Base URL e introducir http://camisetas.com/

15. Guardamos.

Ahora que hemos configurado nuestra segunda tienda tenemos que elegir uno de los métodos que vamos a explicar para la URL.
<h3>Dominio aparcado</h3>
Para utilizar este método vamos a suponer que disponemos de dos dominios comprados (zapatos.com y camisetas.com). El dominio principal será zapatos.com y la instancia de Magento estará instalada ahí. Así que lo vamos a hacer es configurar el dominio secundario (camisetas.com) para que tire del primero.
Los dos dominios estarán activos y en uno de ellos tendremos la instalación de Magento.

Editamos el fichero index.php y buscamos la siguiente línea:

<pre class="brush: php; title: ;">
Mage::run();
</pre>
Ahora la sustituimos por estas:

<pre class="brush: php; title: ;">
switch($_SERVER['HTTP_HOST']) {

// zapatos.com
case 'zapatos.com':
case 'www.zapatos.com':
Mage::run('zapatos', 'website');
break;

// camisetas.com (default store)
default:
Mage::run();
break;
}
</pre>
Lo importante no es el código, sino la idea de que configurando el index.php y haciendo un pequeño switch podemos controlar y rediccionar tantas instancias y tiendas de Magento como queramos (en teoría).
<h3>Añadir una tienda a un dominio. Addon domain</h3>
Este método es muy parecido al anterior. Dos tiendas, con una única instalación de Magento pero que operan de manera distinta. Imaginemos que además de la tienda, en uno de los dominios queremos tener un Blog. Con la opción anterior esto no es posible ya que directamente tenemos una redireción hecha desde el mismo cPanel.

Para usar esta opción entraremos en nuestro cpanel y pulsaremos &#8220;Addon domains&#8221;. Para los que no sepan que es un Addon domain copio-pego &#8220;<em>te permite añadir otro domi nio a tu plan de alojamiento y ver la misma web pero desde otro dominio diferente, para esto el plan de alojamiento que has contratado debe permitir añadir más dominios, esto tiene otras ventajas como es la posiblidad de tener correos o subdominios bajo ese dominio. Lo único que debes hacer es agregarlo en el panel de control y en el panel de gestión del dominio poner las dns del servidor en donde está tu plan de alojamiento (las mismas que el dominio principal</em>)&#8221;.

La idea es compartir Magento mediante enlaces simbólicos y cada uno con sus carpetas de contenido adicional

1.- Suponemos que ya tenemos la primera instalación de la tienda en Magento en uno de nuestros dominios.

2.- El segundo dominio donde vamos a hacer la &#8220;instalación&#8221; es zapatos.com

3.- Lo creamos desde nuestro cPanel (tal y como hemos comentado antes) y entramos via ssh a configurarlos. Deberíamos estar en la carpeta cd zapatos.com/

4.- Durante la creación del dominio zapatos.com, el cpanel nos dió a elegir el Document Root, que por defecto es public_html, hay que quitarlo y dejar el que nos pone por defecto (zapatos.com). No me voy a extender mucho en estos pasos.

5.- Copiamos el index.php y el .htaccess de la instalación que ya tenemos funcionando
<pre class="brush: plain; title: ;">
cp ../public_html/index.php ../public_html/.htaccess .
</pre>

6.- Editamos el index.php que acabamos de copiar y cambiamos esto:
<pre class="brush: php; title: ;">
Mage::run();
</pre>
por esto otro
<pre class="brush: php; title: ;">
Mage::run('zapatos', 'website');  //zapatos es el nombre del website creado en Magento
</pre>

7.- Y por último creamos los enlaces simbólicos de aquellos directorios que nos harán falta:
<pre class="brush: plain; title: ;">
ln -s ../public_html/404/ ./404
ln -s ../public_html/app/ ./app
ln -s ../public_html/includes/ ./includes
ln -s ../public_html/js/ ./js
ln -s ../public_html/media/ ./media
ln -s ../public_html/report/ ./report
ln -s ../public_html/skin/ ./skin
ln -s ../public_html/var/ ./var
</pre>
<h3>Método de subdominio</h3>
Para este método la idea es que las tiendas nos queden de esta forma:
<pre class="brush: plain; title: ;">

http://tienda.com/zapatos

htto://tienda.com/camisetas
</pre>

1.- Entramos via SSH a nuestro dominio y creamos la carpeta para una de las tiendas
<pre class="brush: plain; title: ;">
cd public_html
mkdir zapatos/
cd zapatos/
</pre>

2.- Copiamos los ficheros de la tienda que ya tenemos instalada
<pre class="brush: plain; title: ;">
cp ../public_html/index.php ../public_html/.htaccess .
</pre>

3.- Editamos el index.php y cambiamos esto:
<pre class="brush: plain; title: ;">
$mageFilename = 'app/Mage.php';
</pre>

por esto otro

<pre class="brush: plain; title: ;">
$mageFilename = '../public_html/app/Mage.php';
</pre>

luego cambiar esto:
<pre class="brush: plain; title: ;">
Mage::run();
</pre>

por esto otro

<pre class="brush: plain; title: ;">
Mage::run('zapatos', 'website');
</pre>
<h3>Administración de varias tiendas</h3>
Es importante recordar que en la administración de múltiples tiendas en magento usaremos siempre el mismo admin y habrá que tener especial cuidado cuando cambiemos el alcance de nuestras acciones (para todas las tiendas, para una sola, para cada vista, etc.). Recodar que para cada opción de configuración de la tienda pordemos usar los valores por defecto o aplicar unos en concreto para esa tienda/vista.

Toda esta información la he sacado de un post (muy bueno por cierto) que encontré en el Blog de <a href="http://www.crucialwebhost.com/blog/how-to-setup-multiple-magento-stores/">Crucial</a>. He cambiado / añadido algunas cosas que me han parecido interesantes para completarlo.]]></content:encoded>
			<wfw:commentRss>http://onestic.com/configurar-multiples-tiendas-con-magento/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>

