Jump to content

problema override de clases


mar7in

Recommended Posts

Hola amigos,

 

estoy desarrollando mi primer cambio en Prestashop y voy siguiendo toda la ayuda y documentación que he encontrado online, pero me rindo.

 

Quiero hacer algo tan básico como modificar funcion getNbProducts($id) de la clase CartCore (Cart.php)

 

En definitiva, la funcion original es:

public static function getNbProducts($id)

{

if (isset(self::$_nbProducts[$id]) && self::$_nbProducts[$id] !== NULL)

return self::$_nbProducts[$id];

self::$_nbProducts[$id] = (int)(Db::getInstance()->getValue('

SELECT SUM(`quantity`)

FROM `'._DB_PREFIX_.'cart_product`

WHERE `id_cart` = '.(int)($id)));

return self::$_nbProducts[$id];

}

 

he creado el fichero Cart.php dentro del directorio override/classes y este es su contenido:

class Cart extends CartCore

{

public static function getNbProducts($id)

{

global $_nbProducts;

if (isset(self::$_nbProducts[$id]) && self::$_nbProducts[$id] !== NULL)

return self::$_nbProducts[$id];

self::$_nbProducts[$id] = (int)(Db::getInstance()->getValue('

SELECT COUNT(*)

FROM `'._DB_PREFIX_.'cart_product`

WHERE `id_cart` = '.(int)($id)));

return self::$_nbProducts[$id];

}

}

 

 

Como verán, solo he modificado el SELECT SUM(`quantity`) por el SELECT COUNT(*), pero NO ME FUNCIONA! Me devuelve siempre el SUM(`quantity`). Es como que no me redefine la función, pero eso sí, si dentro de la nueva funcion pongo código erróneo de php, me peta, o sea que sí carga el fichero.

 

Si alguien es tan amable y me dice qué puede estar pasando....

 

Gracias.

Martín.

Link to comment
Share on other sites

Hola amigos,

 

estoy desarrollando mi primer cambio en Prestashop y voy siguiendo toda la ayuda y documentación que he encontrado online, pero me rindo.

 

Quiero hacer algo tan básico como modificar funcion getNbProducts($id) de la clase CartCore (Cart.php)

 

En definitiva, la funcion original es:

public static function getNbProducts($id)

{

if (isset(self::$_nbProducts[$id]) && self::$_nbProducts[$id] !== NULL)

return self::$_nbProducts[$id];

self::$_nbProducts[$id] = (int)(Db::getInstance()->getValue('

SELECT SUM(`quantity`)

FROM `'._DB_PREFIX_.'cart_product`

WHERE `id_cart` = '.(int)($id)));

return self::$_nbProducts[$id];

}

 

he creado el fichero Cart.php dentro del directorio override/classes y este es su contenido:

class Cart extends CartCore

{

public static function getNbProducts($id)

{

global $_nbProducts;

if (isset(self::$_nbProducts[$id]) && self::$_nbProducts[$id] !== NULL)

return self::$_nbProducts[$id];

self::$_nbProducts[$id] = (int)(Db::getInstance()->getValue('

SELECT COUNT(*)

FROM `'._DB_PREFIX_.'cart_product`

WHERE `id_cart` = '.(int)($id)));

return self::$_nbProducts[$id];

}

}

 

 

Como verán, solo he modificado el SELECT SUM(`quantity`) por el SELECT COUNT(*), pero NO ME FUNCIONA! Me devuelve siempre el SUM(`quantity`). Es como que no me redefine la función, pero eso sí, si dentro de la nueva funcion pongo código erróneo de php, me peta, o sea que sí carga el fichero.

 

Si alguien es tan amable y me dice qué puede estar pasando....

 

Gracias.

Martín.

El planteamiento que comentas no es correcto.

 

Un saludo

Link to comment
Share on other sites

Pues si seria bueno que pudieras explicar un poco, yo he intentado poner archivos php completos solo con algun ligero cambio pero para tratar de dejar los originales los he puesto en overrive en su respectiva carpeta y nunca me funcionan simpre me tiran error, pongo el archivo en classes o donde corresponda y ahi si me funciona, no se cual sea el procedimiento para hacerle entender a prestashop que tenemos ese archivo en overrive y que ese sea el que nos lea.

Creo que ese es el problema que tienes mar7in, casi estoy seguro que si sobreescribes el original te funcionara perfectamente.

Link to comment
Share on other sites

Si si, obviamente si modifico la funcion getNbProducts($id) dentro del fichero original funciona correctamente. Mi objetivo es camibar la funcion para que en vez de ejecutar un SUM ejecute un COUNT.

Pero como dices, no entiendo cómo Prestashop ignora el cambio en la función que pongo en el directorio override. Estoy haciendo exactamente lo que pone en el help de PS y código que encuentro en foros, pero no funciona.

 

aQs: recuerda que no se pueden copiar los ficheros tal cual desde classes a override/classes, hay que cambiar el nombre de las clases y el extends.

 

Saludos!

Link to comment
Share on other sites

Podrias subir el archivo que original y el que tratas de usar en overrive, la verdad me interesa saber que cambios necesita el archivo de overrive, mencionas que hay que cambiar el nombre de la clase pero no se si te refieras al prefijo que he visto en algunos "_" y menos donde cambiar el extend, si tienes algunos que actualmente te funcionen, podria subir al menos un original y el que usas en overrive?

Link to comment
Share on other sites

Me interesa este tema del overrive, cual será la solución a tu problema, modificar y sustituir directamente el archivo original sin ponerlo en overrive?, yo eh intentado crear mis propios archivos en overrive y simplemente ninguno a funcionado, quizá sea por el problema que comentas, creo k seria mas sencillo si PS simplemente omitiera los archivos originales si encuentra que existe uno con ese nombre en overrive, asi podríamos usar el mismo archivo solamente haciendo los cambios necesarios y no afectaríamos al original y no seria nada complicado con eso del extended y con lo que ahora mencionas.

Link to comment
Share on other sites

  • 2 months later...

Hola,

 

¿llegasteis a alguna solucion con esto?

 

Yo por mi parte, he extendido el controller del carrito, y va todo bien. El problema viene cuando intento llamar a alguna funcion del modelo, con self::cart()->mifuncion() Aquí me devuelve un error, en mi caso "mifuncion()" es una funcion nueva, añadida al extender el modelo Cart.php. ¿alguna idea?

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...