Jump to content

Recommended Posts

Hola.

 

Hay algo que no logro entender en la configuración multitienda.

 

Necesito que el cliente pueda comprar artículos de las distintas tiendas, todo en el mismo carrito. Creo que lo que tengo que hacer es configurar el grupo de tiendas con todas las opciones a Sí: Compartir registro, pedido y stock.

 

Concretamente lo que necesito es que se comparta el pedido. Si embargo para ello es obligatorio que se compartan también las existencias. Y esto es lo que no entiendo, porque aun compartiendo carrito desearía que cada tienda administrara las existencias del producto de forma independiente.

 

Supongo que algo parecido como hace Amazon, que te dice que el producto lo tienen tal y cual tienda, y que cada uno tiene tanto y cuanto disponible.

 

Seguramente estoy bastante confundido con la idea de multitienda, si alguien me puede aclarar un poco las cosas lo agradecería mucho.

 

Un saludo

 

1.6.0.14

 

Edited by Antonio Sánchez (see edit history)
Link to comment
Share on other sites

Pongamos por caso:

  • www.mimultitienda.com
  • www.mimultitienda.com/tienda1
  • www.mimultitienda.com/tienda2
  • www.mimultitienda.com/tienda3

¿Tampoco se podría compartir carrito así?

 

Por otra parte dice la ayuda en pantalla:

 

Comparta pedidos: Una vez que esta opción está establecida (lo que es posible sólo si clientes y cantidades disponibles son compartidas entre las tiendas), el carrito del cliente será compartido por todas las tiendas del grupo. De esta forma, cualquier compra iniciada en una tienda podrá ser completada en otra tienda del mismo grupo. Atención: No le está permitido deshabilitar esta opción una vez que ha comenzado a aceptar pedidos.

 

Lo que yo entiendo de eso es que sí se puede compartir el carrito, pero quizás la documentación está confundiendo.

 

O quizás estoy yo confundiendo el concepto de multitienda, por eso hago la pregunta. Lo que yo entiendo de multitieda es algo mas que una herramienta que te permita manejar distintas tiendas desde un mismo panel de control. Concretamente que además de eso exista la posibilidad de que esas tiendas puedan participar en común en por ejemplo un proceso de compra, añadiendo al carrito productos que pertenecen a distintas tiendas, y que el pedido se pueda completar en todas sus fases desde este solo sitio: pago, envío, etc... Creo que mas o menos es lo que hace un Amazon. Por ello insisto en que lo que pregunto es si yo tengo la idea equivocada acerca de la multitienda y de hecho solo sirve para administrar tiendas independientes desde un mismo sitio.

Edited by Antonio Sánchez (see edit history)
Link to comment
Share on other sites

En el caso que comentas del mismo dominio (con subcarpetas o con subdominios) seguramente vaya ok, pero con dominios distintos...no es posible por una restricción con las cookies

 

http://forge.prestashop.com/browse/PSCSX-3683

-So I'm right and the Share orders feature is completely useless in a multidomain environment?

-Unfortunately, yes, browsers doesn't support multi domain cookies.
If you really want use multiple domains, your customers must login on all the shops they visit

Best Regards,

 

 

http://jordiob.com/2015/02/entrevistas-ecommerce-juan-vidal-ceo-de-arrobaparktienda-com/#comments

 

El concepto de 2 tiendas con un solo carrito creo que es pionero en España (si lo hay, no lo hemos encontrado). La idea a medio plazo es ir cubriendo diferentes mascotas con tiendas verticales especializadas.

 

  • Like 2
Link to comment
Share on other sites

  • 7 months later...
  • 2 months later...

Hola a todos, os explico mi solución que es sencilla y efectiva, a ver si os vale. Vamos a suponer que tenemos un prestashop con multitienda y cada una de ellas con un dominio (exampl1.com, example2.com,example3.com...),da igual el número de dominios/tiendas que tengais.

 

Paso 1) Codificamos las cookies del dominio actual (creamos una cadena) y se las pasamos al .tpl dónde tengamos los links de las diferentes tiendas. Para hacerlo, vamos al PHP que "genera" los datos para el .tpl (en mi caso es un simple módulo que genra un menu superior dónde estan los enlaces a las diferentes tiendas).

 

Así, en el PHP:

//config. Multicarrito

//codificamos la variable global $_COOKIE
$cookies_compartidas=htmlentities(base64_encode(serialize($_COOKIE)));

// Y la metemos en smarty para que el tpl la pueda leer
$this->smarty->assign('cookies_compartidas', $cookies_compartidas);

 

Seguidamente, vamos a editar el tpl que és el que muestra el menu. en Mi caso es una lista <UL><LI> con CSS para hacerlo bonito: La cuestión es que cuándo hagamos click sobre el enlace para ir a otra tienda/dominio, envíe esa cookie que hemos codificado al nuevo dominio al que queremos ir.

 

Modificamos el .tpl:

{* creamos un formulario "invisible" que enviará las cookies *}
<form action="foo" method="post" id="frmC000" STYLE='display:none;'>
<input type='hidden' id='shC000' name='shC000' value='{$cookies_compartidas}'>
</form>
<div class="menu_tiendas">
<ul>
{* links a las diferentes tiendas, la etiqueta Alt contiene la URL de la tienda, que lo ponemos como 'action' al formulario*}
<li>
<A alt="http://www.dominio1.com" onClick="$('#frmC000').attr('action',$(this).attr('alt'));$('#frmC000').submit();">Tienda 1</A>
</li>
<li>
<A alt="http://www.dominio2.com" onClick="$('#frmC000').attr('action',$(this).attr('alt'));$('#frmC000').submit();">Tienda 2</A>
</li>
<li>
<A alt="http://www.dominio3.com" onClick="$('#frmC000').attr('action',$(this).attr('alt'));$('#frmC000').submit();">Tienda 3</A>
</li>
</ul>

Ahora, con eso, cuándo hagámos click en cualquier enlace a nuestras tiendas, en vez de ir directamente al dominio, irá pero enviando la cookie.

 

Paso 2) leemos las cookies. Ahora, debemos leer esas cookies justo antes de actualizar nuestro carrito. Para ello, sobreescribiremos la función init del FrontController (recordad crear un nuevo FrontController.php en override/classes/controller para que con las actualizaciones continuen funcionando).

class FrontController extends FrontControllerCore
{
    public function init()
    {
// la variable $_POST ya debería ser global, pero por algún motivo, si no la declaro, no funciona
global $_POST;
// BY SAM, hemos recibido cookies??
if(isset($_POST['shC000'])){
//descodificamos las cookies
$cookies_import=ToolsCore::unSerialize(base64_decode($_POST['shC000']),true);
$cookie_lifetime = time() + 24 * 3600);
foreach($cookies_import as $nombre=>$valor)
{
//borramos la cooki anterior
setcookie($nombre,'',time()-3600*100,'/', $_SERVER['HTTP_HOST'],isset($_SERVER['HTTPS'])?true:false);
// establecemos la nueva cookie
setcookie($nombre,$valor,$cookie_lifetime,'/', $_SERVER['HTTP_HOST'],isset($_SERVER['HTTPS'])?true:false);

// si descomentamos, generará una linea en en log de errores para ver si se establecen
//error_log("Cookie establecida en ".$_SERVER['HTTP_HOST'].": ".$nombre."=".$valor,0);
}
}
// lamamos al init de la clase FrontController original
parent::init();
    }

Et voilà, magia hecha, rápido y funcional.

  • Like 1
Link to comment
Share on other sites

  • 3 months later...
  • 3 years later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...