Mostrando entradas con la etiqueta Magento. Mostrar todas las entradas
Mostrando entradas con la etiqueta Magento. Mostrar todas las entradas

viernes, 30 de diciembre de 2011

Magento: Enviar correo transaccional, con atachment y bcc

Esto muestra como manejar los correos transaccionales, así como la forma de agregar atachments y el uso del bcc en los correos transaccionales.

Precondiciones:
Tener un al menos un correo transaccional.


<?php

$transactionalMail = Mage::getModel('core/email_template')->load('Nombre del Template','template_code');
$storeId = 1;
$area = 'frontend'; //$area = 'admin';
$fromEmail = array('name' => 'CONTACT', 'email' => 'support@domain.com');
$fileName = '/path/to/some/attachment.zip';
$fileConent = file_get_contents($fileName);
$toEmail = 'customer@domain.com';
$toName = 'Customer Customer';
$vars = array('var1' => 1, 'var2' => 2);

$transactionalMail->setDesignConfig(array('area'=>$area, 'store'=>$storeId));
$transactionalMail->getMail()->createAttachment($fileConent,'application/zip')->filename = basename($fileName);
$transactionalMail->getMail()->addBcc(array('name' => 'ADMIN', 'email' => 'admin@domain.com'));

$transactionalMail->sendTransactional(
$transactionalMail->getId(),
$fromEmail,
$toEmail,
$toName,
$vars,
$storeId);

Magento: Como sobreescribir un controller

Plantilla básica de un config.xml para hacer sobreescribir un cotroller, incluye la version para sobreescribir un controller del front como la del admin.

Variables (Respetar las mayúsculas es importante):

{{Empresa}} ó {{empresa}} Nombre de espacio dentro de ./app/code/local
{{Modulo}} ó {{modulo}} Nombre del modulo dentro del nombre de espacio, debe estar dentro de ./app/code/local/{{Empresa}}
{{controller}} Nombre del modelo del controller.
{{modulonativo}} Nombre del modulo al que pertenece el controller que vamos a sobreescribir.
{{controllernativo}} Nombre del controller que vamos a sobreescribir.

Precondiciones:
    Tener declarado el modulo con el archivo ./app/etc/{{Empresa}}_{{Modulo}}.xml
    Tener ya la estructura de directorios del modulo, y el controller.
    Tener el archivo config.xml del modulo
Los conotrollers no respetan la nomenclatura standard del autoinclude de Magento, por lo que es necesario hacer un require_once
Para hacer una reutilización optima del código del core, la clase del controller debe extender a la clase del controller que vamos a sobreescribir.

<?xml version="1.0"?>
<config>
    <modules>
        <{{Empresa}}_{{Modulo}}>
            <version>0.1.1</version>
        </{{Empresa}}_{{Modulo}}>
    </modules>
    <frontend>
        <routers>
            <{{modulo}}>
                <use>standard</use>
                <args>
                    <module>{{Empresa}}_{{Modulo}}</module>
                    <frontName>{{modulo}}</frontName>
                </args>
            </{{modulo}}>
        </routers>
    </frontend>
    <admin>
        <routers>
            <{{modulo}}>
                <use>admin</use>
                <args>
                    <module>{{Empresa}}_{{Modulo}}</module>
                    <frontName>{{empresa}}{{modulo}}</frontName>
                </args>
            </{{modulo}}>
        </routers>
    </admin>
<global>
        <rewrite>
            <{{empresa}}_{{modelo}}_{{controller}}>
                <from><![CDATA[#^/{{modulonativo}}/{{controllernativo}}/#]]></from>
                <to>/{{empresa}}{{modulo}}/{{controller}}/</to>
            </{{empresa}}_{{modelo}}_{{controller}}>
        </rewrite>
</global>
</config>

jueves, 22 de diciembre de 2011

Magento: Como configurar un cron

Para configurar un cron usando el motor de crons de Magento se seben seguir los siguientes pasos:

Variables (Respetar las mayúsculas es importante):
    {{Empresa}} ó {{empresa}} Nombre de espacio dentro de ./app/code/local
    {{Modulo}} ó {{modulo}} Nombre del modulo dentro del nombre de espacio, debe estar dentro de ./app/code/local/{{Empresa}}
    {{modelo}} Nombre del modelo del modulo.
    {{metodo}} Nombre del metodo del modelo que se va a ejecutar.
    {{cron_name}} Nombre del cron con el que sera identificado dentro de la tabla cron_schedule.

Precondiciones:
    Tener declarado el modulo con el archivo ./app/etc/{{Empresa}}_{{Modulo}}.xml
    Tener ya la estructura de directorios del modulo, y almenos un modelo.
    Tener el archivo config.xml del modulo

En el archivo config.xml solo debemos seguir esta estructura:

<?xml version="1.0"?>
<config>
    <modules>
        <{{Empresa}}_{{Modulo}}>
            <version>0.1.0</version>
        </{{Empresa}}_{{Modulo}}>
    </modules>
...
    <global>
        <models>
            <{{modulo}}>
                <class>{{Empresa}}_{{Modulo}}_Model</class>
            </{{modulo}}>
        </models>
    </global>
...
    <crontab>
        <jobs>
            <{{cron_name}}>
                <schedule><cron_expr>0 * * * *</cron_expr></schedule>
                <run><model>{{metodo}}/{{empresa}}_{{modulo}}_{{modelo}}::{{metodo}}</model></run>
            </{{cron_name}}>
        </jobs>
    </crontab>
</config>


El valor del nodo <cron_expr>, equivale a una expresion del programa crontab de linux.

    <schedule><cron_expr>0 * * * *</cron_expr></schedule>

martes, 20 de diciembre de 2011

Magento: Como sobre cargar un bloque

Ejemplo:
Para sobre cargar este bloque:
    Mage_Adminhtml_Block_Sales_Order_Grid
  
Antes de comenzar
Empresa: significa el nombre de espacio dentro de la carpeta de
./app/code/local

Declarar un modulo nuevo si no lo tienes, para declarar el mdolulo debemos crear un archivo llamado Empresa_Adminhtml.xml en :
./app
    /etc
        /modules
            /Empresa_Adminhtml.xml
          
El contenido del archivo debe ser:
<?xml version="1.0"?>
<config>
    <modules>
        <Empresa_Adminhtml>
            <active>true</active>
            <codePool>local</codePool>
        </Empresa_Adminhtml>
    </modules>
</config>

Luego debemos configurar el modulo, para ello creamos un archivo de configuración que debe quedar en:

./app
    /code
        /local
            /Empresa
                /Adminhtml
                    /etc
                        /config.xml
                  
El contenido minímo que debe tener tu archivo config.xml es:
<?xml version="1.0" encoding="utf-8"?>
<config>
    <modules>
        <Empresa_Adminhtml>
            <version>0.1.0</version>
        </Empresa_Adminhtml>
    </modules>
    <global>
        <blocks>
            <adminhtml>
                <rewrite>
                    <sales_order_grid>Empresa_Adminhtml_Block_Sales_Order_Grid</sales_order_grid>
                </rewrite>
            </adminhtml>
        </blocks>
    </global>
</config>
    
Ahora si creamos la clase que sobre cargara a la calse original, el archivo debe quedar en:

./app
    /code
        /local
            /Empresa
                /Adminhtml
                    /Block
                        /Sales
                            /Order
                                /Grid.php
                          
El archivo debe tener como minimo este contenido, noten que nuestra clase extiende del bloque que estamos sobrecargando, lo cual sirve para tener que implementar solo los cambios especificos en el bloque.

<?php
class Empresa_Adminhtml_Block_Sales_Order_Grid extends Mage_Adminhtml_Block_Sales_Order_Grid
{
    /**
     * @todo
     */
}

Magento: No puedo entrar al backend

Cuando no se puede entrar al backend en Magento solo debes ir al archivo

/app/code/core/Mage/Core/Model/Session/Abstract/Varien.php

Cerca de la linea 78 tenemos

$cookieParams = array(
            'lifetime' => $cookie->getLifetime(),
            'path'     => $cookie->getPath(),
            'domain'   => $cookie->getConfigDomain(),
            'secure'   => $cookie->isSecure(),
            'httponly' => $cookie->getHttponly()
        );

Solo lo debemos cambiar

$cookieParams = array(
            'lifetime' => $cookie->getLifetime(),
            'path'     => $cookie->getPath(),
            /*'domain'   => $cookie->getConfigDomain(),
            'secure'   => $cookie->isSecure(),
            'httponly' => $cookie->getHttponly()*/
        );