Archivo de la categoría: Php

MWI: Integrando Magento y WordPress

MWI (http://mwi-plugin.com/) es un plugin gratuito para WordPress que nos permite mostrar bloques de Magento en nuestro blog. Es muy útil para proyectos en los que necesitamos un buen CMS como WordPress para manejar todas las secciones de texto del sitio y dejar a Magento solo a cargo de los productos y el carrito de compras.

No entrare en mucho detalle sobre la instalación (ya el plugin incorpora su guia), si no en los problemas que he encontrado y como los he solucionado:

  1. Magento y WordPress no comparten las cookies: Este problema hace que básicamente, no se puedan agregar productos al carrito de compras desde ninguna pagina de WordPress. Para solucionarlo es necesario modificar el archivo wp-config.php en la instalación de wordpress y agregar la linea:
    define( 'COOKIE_DOMAIN', '.tu-dominio.com' );

    No importa si la dirección de tu pagina es un subdominio y si empieza o no con «www».
    En en administrador de magento, en System > Configuration > Web > Session Cookie Management editar las configuraciones para que sean:

    Cookie Path "/"
    Cookie Domain to ".tu-dominio.com"

    Si tu instalación de magento es 1.8 o 1.8.1, es recomendable instalar el plugin https://github.com/deivisonarthur/Inovarti_FixAddToCartMage18

  2. La session se cierra al cambiar de pagina. En System > Configuration > Web > Session Cookie Management editar las configuraciones para que sean:
    Cookie Lifetime "0" si quieres que la session se cierre cuando se cierre el navegador, o "86400" para que dure un dia de conexion.
    Use HTTP Only "No"

Es importante recordar como en casi todo lo que se hace en magento, limpiar las carpeta «var/cache» y «var/session» luego de hacer cambios en el sitio.

Algunos de los sitios que he trabajado con este sistema son:

WordPress: Redireccionar una página a la primer sub-página

Muchos usuarios de WordPress usan una estructura de paginas -> sub-paginas para mantener ordenada su información. En algunos casos, las paginas principales quedan vacias y aunque su existencia es importante, su contenido no. En estos casos es útil crear una nueva plantilla en el tema, que hace una redirección a la primer sub-página de la pagina actual:

<?php
/*
Template Name: Redirect To First Child
*/
if (have_posts()) {
  while (have_posts()) {
    the_post();
    $pagekids = get_pages("child_of=".$post->ID."&sort_column=menu_order");
    $firstchild = $pagekids[0];
    wp_redirect(get_permalink($firstchild->ID));
  }
}
?>

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

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

Mover un sitio WordPress a otro dominio

Les ha pasado alguna vez al terminar el desarrollo de un sitio en WordPress, que al mover el código al servidor del cliente, se pierden configuraciones, widgets, o menús?

El procedimiento que sigue la mayoría de personas es simplemente descargar la base de datos del sitio, buscar y reemplazar el nombre del dominio en el archivo SQL y luego subir este script modificado en el dominio nuevo.  Puede parecer que de esta forma todo esta bien, pero el problema esta en la forma como WordPress guarda la información de los widgets/menus en la base de datos: Serialized Data. Básicamente son cadenas de texto para el contenido y una variable para el tamaño de la cadena. Al buscar y reemplazar, la mayoría de las veces el nuevo nombre de dominio tiene mas o menos letras que el dominio que usamos para hacer el desarrollo y php al cargar el Serialized Data, rechaza el valor ya que el tamaño es diferente.

Desde el sitio oficial de WordPress nos dan la solucion al problema: utilizar el script http://spectacu.la/search-and-replace-for-wordpress-databases/ para hacer el cambio de dominio. Los pasos a seguir son:

  1. Descargar el script de la base de datos del sitio original.
  2. Sin hacer ninguna modificación, subir el script de la base de datos al servidor de destino.
  3. Instalar el script searchreplacedb2.php en el directorio public_html del servidor de destino y abrirlo en el navegador (ejemplo http://nuevoservidor.com/searchreplacedb2.php).
  4. Seguir las instrucciones en pantalla para buscar/reemplazar el nombre del dominio viejo, por el nombre de dominio nuevo.
  5. Borrar el script searchreplacedb2.php del servidor cuando termines! 

Es siempre recomendado bajar la última versión del archivo desde la pagina del desarrollador, pero por si acaso, aqui puedes bajar la version que utilice a la hora de escribir esta entrada:  searchreplacedb2.php