:::: MENU ::::
Posts tagged with: php

Migraciones en PrestaShop

Últimamente ando liado con temas de migraciones de datos para PrestaShop y creo que es buen momento para explicar cuáles son los pasos a seguir para que el proceso de migración se lleve de la mejor manera posible.\r\n

Todo el proceso se puede resumir en 6 sencillos pasos, siempre y cuando partamos de la misma versión de PrestaShop instalado en los dos servidores y por supuesto con un archivo backup bien generado. Yo he partido de un archivo .zip que me ha dado PhpMyAdmin para la generación de backup.

Los pasos de migración son los siguiente:

1 – Restauración de datos a través de PhpMyAdmin

Para restaurar los datos a través de PhpMyAdmin vayan a la bases de datos donde quieran importar la nueva base de datos y pulse en importar seleccionando antes el archivo .zip el cual contiene los datos a restaurar.

2 – Configurar settings.inc.php

Como hemos hecho una restauración de datos manteniendo la misma versión de PrestaShop, vamos a configurar ciertos campos necesarios de este archivo alojado en la carpeta config de PrestaShop.

__PS_BASE_URI__ : ponga la raiz donde se va alojar ahora PrestaShop.

_DB_NAME_ :  el nombre de la base de datos nueva

_DB_SERVER_ : la url base (por ejemplo localhost)

_DB_USER_ : usuario de la base de datos

_DB_PASSWD_ : contraseña de la base de datos

Guarde los cambios.

3 – Regeneramos la contraseña del administrador con “Cookie Key”

Es normal que cuando queráis acceder al panel de administración de PrestaShop os den errores de acceso. Esto puede ser debido a varios motivos, pero si todo ha ido bien, lo normal es que os de únicamente problemas con las cookies que guarda el navegador. Para solucionar esto vamos a restaurar la clave del administrador del sitio de la siguiente manera.

En settings.inc.php tenemos una variable llamada _COOKIE_KEY_ pues la copiamos y lanzamos la siguiente consulta SQL en PhpMyAdmin:

update ps_employee set passwd=md5(“tucookieKeyTu-nuevaclave”) where email=”email del admin”

4 – Borrar Cookies del Navegador

Pues eso, nos vamos al navegador que estemos usando y borramos las cookies.(El proceso de borrado dependerá de cada navegador)

5 – Cambio de Url

En el panel de administración de PrestaShop en la zona de Preferencias / SEO&URL editamos los enlaces con tu nueva url, por ejemplo localhost.

6 – Compilamos PrestaShop

Vamos ahora a Preferencias – Rendimiento y forzamos la Compilación y activamos la Caché.

Ahora accedemos a la ruta de tu tienda PrestaShop (tarda un poco) para forzar la compilación del sitio. Una vez que tengamos acceso a la tienda, no olvidéis de desmarcar la opción de compilación del panel de administración. Así cuando entremos la próxima vez ya no tardará tanto en cargar.

Pues ya está, con estos 6 sencillos pasos tenemos PrestaShop migrado a otro Servidor. Recordad, esta prueba se ha llevado a cabo con las mismas versiones de PrestaShop.

Salud@s a todos.


Dispatcher en PrestaShop

Últimamente estamos avanzando bastante en la conexión de PrestaShop con OpenERP y ya casi lo tenemos funcionando en producción.

Una de las cosas que mas nos ha preocupado ha sido el “Dispatcher” de PrestaShop para la versión 1.4.0.17, ya que detectamos numerosos bugs para el buen uso del mismo con OpenERP. Y mas concretamente en servidores con 1and1.

Por si a alguien le interesa, aquí pongo el código del dispatcher.php que hemos reutilizado, localizado en la carpeta webservice de PrestaShop.

if (isset($_SERVER[''HTTP_AUTHORIZATION'']) && preg_match(''/Basic\\s+(.*)$/i'', $_SERVER[''HTTP_AUTHORIZATION''], $matches))
{
list($name, $password) = explode('':'', base64_decode($matches[1]));
$_SERVER[''PHP_AUTH_USER''] = strip_tags($name);
}


//echo "PHP_AUTH_USER:".$_SERVER[''PHP_AUTH_USER''];
//set http auth headers for apache+php-cgi work around if variable gets renamed by apache
if (isset($_SERVER[''REDIRECT_HTTP_AUTHORIZATION'']) && preg_match(''/Basic\\s+(.*)$/i'', $_SERVER[''REDIRECT_HTTP_AUTHORIZATION''], $matches))
{
list($name, $password) = explode('':'', base64_decode($matches[1]));
$_SERVER[''PHP_AUTH_USER''] = strip_tags($name);
}
ob_start();
require_once(dirname(__FILE__).''/../config/config.inc.php'');

// Use for image management (using the POST method of the browser to simulate the PUT method)
$method = isset($_REQUEST[”ps_method”]) ? $_REQUEST[”ps_method”] : $_SERVER[”REQUEST_METHOD”];

if (isset($_SERVER[”PHP_AUTH_USER”]))
$key = $_SERVER[”PHP_AUTH_USER”];
elseif (isset($_GET[”ws_key”]))
$key = $_GET[”ws_key”];
else
{
header($_SERVER[”SERVER_PROTOCOL”].” 401 Unauthorized”);
header(”WWW-Authenticate: Basic realm=”Welcome to PrestaShop Webservice, please enter the authentication key as the login. No password required.””);
die;
}

if (isset($_REQUEST[”xml”]))
{
// if a XML is in POST
$input_xml = stripslashes($_REQUEST[”xml”]);
}
else
{
// if no XML
$input_xml = NULL;

// if a XML is in PUT
if ($_SERVER[”REQUEST_METHOD”] == ”PUT”)
{
$putresource = fopen(“php://input”, “r”);
while ($putData = fread($putresource, 1024))
$input_xml .= $putData;
fclose($putresource);
}
}

$params = $_GET;
unset($params[”url”]);

$class_name = WebserviceKey::getClassFromKey($key);
$bad_class_name = false;
if (!class_exists($class_name))
{

$class_name = ”WebserviceRequest”;
$bad_class_name = true;
}
// fetch the request
$request = call_user_func(array($class_name, ”getInstance”));
$result = $request->fetch($key, $method, $_GET[”url”], $params, $bad_class_name, $input_xml);
// display result
if (ob_get_length() == 0)
header($result[”content_type”]);
else
header(”Content-Type: application/javascript”); // Useful for debug…
header($result[”status”]);
header($result[”x_powered_by”]);
header($result[”execution_time”]);
if (isset($result[”ps_ws_version”])){
header($result[”ps_ws_version”]);

}

if ($result[”type”] == ”xml”)
{
header($result[”content_sha1”]);
echo $result[”content”];
}
elseif ($result[”type”] == ”image”)
{
if ($result[”content_type”] == ”Content-Type: image/jpeg”)
imagejpeg(WebserviceRequest::getInstance()->_imageResource);
elseif ($result[”content_type”] == ”Content-Type: image/gif”)
imagegif(WebserviceRequest::getInstance()->_imageResource);
imagedestroy(WebserviceRequest::getInstance()->_imageResource);
}

ob_end_flush();

También es muy importante agregar al principio y al final del documento .htacces, localizado en la raiz de PrestaShop, lo siguiente:

RewriteBase /

RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization},last]

Saludos a todos. Espero que os haya servido de ayuda.