Jump to content

Hook Displaybeforecarrier


victorgh

Recommended Posts

Buen dia,

 

Acabo de crear un nuevo modulo para carriers, pero lo que pretendo hacer es que estos no se instalen si no que se muestren desde un archivo que tengo de php en mi propio servidor.

 

He leido que esto puede ser por medio del hook displaybeforecarrier, pero no tengo idea de como implementarlo aqui en prestashop, hago esto en woocommerce, por medio de un webhook muestro mi carrier, pero aqui en presta no se como realizarlo.

 

Ya se como enviar las variables que ocupare para validar  y de igual manera se como enviar la respuesta, pero no se como mostrar la respuesta en la lista de carriers.

 

El modulo que hasta el momento tengo lo instala en la tienda pero no deseo que sea asi, si no que sea live por asi decir.

 

Espero puedan ayudarme.

Link to comment
Share on other sites

Por la forma en la que realizas la pregunta, me da la sensación de que no tienes muy claro lo que estás haciendo.

Quizás deberías repasar primero la documentación acerca de la creación de modulos

 

De todas formas, lo único que necesitas es que tu módulo implemente la función hookdisplayCarrierList.

Una vez echo esto, solo tienes que colocar el modulo en dicho hook,  a traves de modulos -> posiciones de los modulos -> insertar en un hook (arriba a la derecha).

Aqui seleccionas tu modulo y el hook al que quieres pasarlo.

Edited by Gabriel Perez (see edit history)
  • Like 1
Link to comment
Share on other sites

Por la forma en la que realizas la pregunta, me da la sensación de que no tienes muy claro lo que estás haciendo.

Quizás deberías repasar primero la documentación acerca de la creación de modulos

 

De todas formas, lo único que necesitas es que tu módulo implemente la función hookdisplayCarrierList.

Una vez echo esto, solo tienes que colocar el modulo en dicho hook,  a traves de modulos -> posiciones de los modulos -> insertar en un hook (arriba a la derecha).

Aqui seleccionas tu modulo y el hook al que quieres pasarlo.

Gracias por la respuesta y te explico un poco mas mi situación,

 

Me encuentro trabajando en una empresa que es de logística web, ofrecemos dos tipos de envíos por eso mi modulo, pero veo que mi modulo aparece fijo como el método de envío que viene por default.

 

Lo que yo busco hacer es tomar el código postal del cliente que pretende realizar la compra en X tienda, validar el codigo postal en la base de datos que tenemos en la empresa y regresarla una respuesta al modulo, si es un código postal que tenemos en base de datos los metodos de envio se mostraran, si no lo tenemos ocultar los metodos.

 

Esa es mi idea principal

Link to comment
Share on other sites

Claro pensé hacer lo de las provincias, pero ¿Te imaginas realizarlo para todas las tiendas a las cuales les daremos servicio?, al menos creo que lo que pretendo hacer es automatizado, solo me encargaría de hacerles llegar el modulo y listo todo se hace desde mi servidor.

 

aprovechando un poco el tema, ¿sabes como puedo obtener los productos ya comprados? osea de la orden ya hecha, no se si me explique.

Link to comment
Share on other sites

En ese caso lo que necesitas no es engancharte al hook, sino sobreescribir la funcion _getCarrierList de OrderOpcController, y controlar ahí si permites o no que se muestre la lista de transportistas.

 

Para obtener los productos de una orden (si no está hecha no es una orden, sino un carrito) , tienes varios métodos :

Order->getProducts
Order->getCartProducts
Order->getProductsDetail
Edited by Gabriel Perez (see edit history)
Link to comment
Share on other sites

Te explico esta ultima parte,

 

Una vez que el cliente selecciona nuestro metodo de envio y finaliza la la compra, ya es una orden.

 

Por que requiero los datos de la orden, ya que al momento de que la tienda haga un cambio de estado (Enviado) usando actionOrderStatusUpdate, validando si es un status 4 (enviado), se dispara el envio de datos a nuestro sistema y la orden sera generada en automatico.

 

Una vez explicado esto, con las variables que me acabas de comentar, puedo obtener el nombre del producto, cantidad y el peso?

Link to comment
Share on other sites

Con cualquiera de los tres obtendrás las lineas del pedido : id de producto, id de combinación, cantidad, precios ...

Si quieres los datos de nombre y peso, tendrás que instanciar cada uno de los productos y coger esa info de sus datos.

Destacar por ultimo que el nombre del producto es un array, donde cada posición corresponde al id del idioma.

Link to comment
Share on other sites

Disculpa, estoy buscando documentacion respecto a la funcion _getCarrierList de OrderOpcController, pero no encuentro nada que pueda ayudarme o me oriente ha realizar lo que necesito, podrias ayudarme con esto ya sea apoyandome con alguna documentacion que tengas o si tu puedas apoyarme? por favor

Link to comment
Share on other sites

Revisando el código, me he dado cuenta de que quizás te sea mas fácil sobreescribir el método simulateCarriersOutput de la clase Cart.

Lo único que tendrías que hacer seria comprobar al principio del método si permites que ese cliente acceda a los métodos de transporte.

En caso afirmativo, dejas que la función se ejecute con normalidad, en caso contrario, retornas un array vacío.

 

 

public function simulateCarriersOutput(Country $default_country = null, $flush = false)
{
    /* comprobar si es codigo postal valido */
    if(!codigo_postal_valido )
        return;

    static $cache = false;
    if ($cache !== false && !$flush)
        return $cache;


    $delivery_option_list = $this->getDeliveryOptionList($default_country, $flush);

    
...

Para sobreescribir una función en un módulo, tan solo necesitas incluir, en el directorio de tu modulo, las carpetas override/clases y dentro de esta, el archivo Cart.php

De esta forma, cuando instales tu módulo, prestashop realizará automáticamente la sobreescritura.

class Cart extends CartCore
{
    public function simulateCarriersOutput(Country $default_country = null, $flush = false)
    {
        ...
    }
}
Edited by Gabriel Perez (see edit history)
Link to comment
Share on other sites

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...