Archivo de la categoría: Desarrollo Web

Magento: Refrescar estadísticas automáticamente

Al tener una tienda en magento, siempre un problema tener que ir a refrescar manualmente las estadísticas del sitio para poder ver los reportes de ventas. La solución: crear un cron que haga esta tarea por nosotros cada determinado tiempo.

Lo primero es crear un archivo .php (en mi caso se llama refresh_statistics.php) en el directorio /shell de la instalación de Magento con el siguiente código:

<?
require_once 'abstract.php';

class Mage_Shell_Refresh_Statistics extends Mage_Shell_Abstract
{
   
    protected function _getCodes()
    {
        $allcodes = array(
            '0'     => 'sales/report_order',
            '1'       => 'tax/report_tax',
            '2'  => 'sales/report_shipping',
            '3'  => 'sales/report_invoiced',
            '4'  => 'sales/report_refunded',
            '5'   => 'salesrule/report_rule',
            '6' => 'sales/report_bestsellers',
        );
        return $allcodes;
    }

   
    /**
     * Run script
     *
     */
    public function run()
    {
        if ($this->getArg('refresh')) {
            $allCodes = $this->_getCodes();
            try {
                foreach ($allCodes as $collectionName) {
                    Mage::getResourceModel($collectionName)->aggregate();
                }
                Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('adminhtml')->__('Lifetime statistics have been updated.'));
            } catch (Mage_Core_Exception $e) {
                Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
            } catch (Exception $e) {
                Mage::getSingleton('adminhtml/session')->addError(Mage::helper('adminhtml')->__('Unable to refresh lifetime statistics.'));
                Mage::logException($e);
            }
           
            echo "Statistics Refreshed!";
           
        } else {
            echo $this->usageHelp();
        }
    }

    /**
     * Retrieve Usage Help Message
     *
     */
    public function usageHelp()
    {
        return <<<USAGE
Usage:  php -f refresh_statistics.php -- [options]
       
  refresh            Resfresh the lifetime statistics
  help              This help

USAGE;
    }
}

$shell = new Mage_Shell_Refresh_Statistics();
$shell->run();

El script esta hecho para no poder ser ejecutado desde el navegador, asi que no puedes usar curl para ejecutarlo. Se debe ejecutar de la siguiente forma

php -f PATH_A_TU_ARCHIVO -- refresh

En cpanel se veria algo como esto

Terminado! Ya tendremos siempre las estadísticas de magento actualizadas en todo momento.

WordPress: Redireccionar una pagina al Home

Algunas veces creamos paginas en wordpress como parte de la estructura de un sitio (una columna por ejemplo) y no queremos que sea vista por nuestros usuarios. Podemos entonces crear una nueva plantilla que redireccione a nuestros usuarios al Home del sitio:

<?php
/*
Template Name: Redirect To Home
*/
if (have_posts()) {
  while (have_posts()) {
    the_post();
    wp_redirect(home_url());
  }
}
?>

Solo crea un nuevo archivo con este código, de nombre single-redirect-home.php (o como quieras nombrarla) y asignala como plantilla en la pagina que quieres usar la redirección.

WordPress: Configuraciones para mantener el codigo intacto en el editor TinyMCE

Por defecto wordpress usa como editor de texto en paginas y posts el TinyMCE, un gran plugin que funciona bien en la mayoría de los casos pero que cuando necesitas publicar código html sin que te modifique nada puede dar problemas.

Para lograr esto, regularmente hago 2 cosas:

  1. En el archivo functions.php del tema activo agrego esta linea para evitar que wordpress agregue automáticamente el tag <p>
    remove_filter ('the_content', 'wpautop');
  2. Instalar el plugin Preserved HTML Editor Markup, que lo encuentran en el sitio oficial de wordpress, en la dirección http://wordpress.org/plugins/preserved-html-editor-markup/ . En caso que no lo encuentren, el archivo esta adjunto a esta nota y lo pueden descargar dando click en: preserved-html-editor-markup.

Todo listo! ahora el editor de texto no borrara o agregara tags que rompan nuestro código y eviten que las paginas se vean tal como queremos!

Redirecciones con .htaccess

Algunas veces necesitamos que nuestros sitios web funcionen en una única dirección web, ya sea por razones de SEO o para evitar que algunos scripts que hacen llamados ajax saquen errores.

Para hacer que todos los links del sitio sean redireccionados a el dominio con www:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

Para hacer que todos los links del sitio sean redireccionados a el dominio sin wwww:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^dominio\.com$ [NC]
RewriteRule ^(.*)$ http://dominio.com/$1 [R=301,L]

Para redireccionar una pagina a SSL (https) con www

RewriteCond %{HTTPS} off
# primero redireccionar a HTTPS:
# No poner www. aqui, se pondra en la siguiente regla
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# reescribir a www
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Algunas operaciones básicas con Cpanel XMLAPI

En un proyecto reciente para uno de mis clientes debía crear automáticamente cuentas de FTP, borrarlas luego de una semana y en otra semana mas, borrar el directorio con todos sus archivos. Resulta que en un servidor con Cpanel es mucho mas fácil de lo que parece, utilizando las funciones de Cpanel XMLAPI y con el nombre de usuario y contraseña de la cuenta.

Configuración básica para usar xmlapi.php: recuerda poner esta configuración antes de incluir la librería.

$cpanelConnection = array (
'host' => 'ip o nombre de dominio del servidor',
'port' => '2083',
'user' => 'nombre de usuario cpanel',
'pass' => 'contraseña cpanel') ;

Crear una cuenta de FTP:

require_once("xmlapi.php");

$xmlapi = new xmlapi($cpanelConnection['host']);
$xmlapi->password_auth($cpanelConnection['user'],$cpanelConnection['pass']);

$xmlapi->set_port($cpanelConnection['port']);
$xmlapi->set_debug(1);

$args = array( 
    'user'=>strtolower('nombre de usuario de la nueva cuenta de ftp, sin espacios o simbolos'),
    'pass'=>'password de la nueva cuenta de ftp',
    'quota'=>0, //0 si es ilimitado
    'homedir'=>'ruta al directorio de la nueva cuenta de ftp'
);

$xmlapi->api2_query($cpanelConnection['user'], 'Ftp', 'addftp', $args);

Borrar una cuenta de FTP (sin borrar sus archivos):

require_once("xmlapi.php");

$xmlapi = new xmlapi($cpanelConnection['host']);
$xmlapi->password_auth($cpanelConnection['user'],$cpanelConnection['pass']);

$xmlapi->set_port($cpanelConnection['port']);
$xmlapi->set_debug(1);

$args = array( 
    str_replace('.','','nombre de usuario ftp a eliminar')
);

$xmlapi->api1_query($cpanelConnection['user'], 'Ftp', 'delftp', $args);

Luego de crear y borrar las cuentas de ftp, debía borrar el directorio con todos sus archivos. Normalmente se puede hacer en PHP  con un script recursivo; pero cuando se crea la cuenta de FTP desde Cpanel, se crea también un archivo .ftpquota, que no puede ser borrado ya que pertenece a otro usuario. Así que puse manos a la obra a buscar como borrar el directorio con el mismo usuario de Cpanel con que se creo el directorio:

require_once("xmlapi.php");

$xmlapi = new xmlapi($cpanelConnection['host']);
$xmlapi->password_auth($cpanelConnection['user'],$cpanelConnection['pass']);

$xmlapi->set_port($cpanelConnection['port']);
$xmlapi->set_debug(1);

$xmlapi->api2_query($cpanelConnection['user'], 'Fileman', 'fileop', array("op"=>"unlink", "sourcefiles"=>'Ruta de la carpeta a eliminar'));

Hay muchas otras funciones para explorar y automatizar un poco mas los procesos que escribimos en nuestros scripts.

En caso que no encuentren la librería en el sitio del desarrollador, la pueden descargar aqui: xmlapi.php