Mostrar todos los productos cuando la búsqueda está en blanco (Opencart 2.3.x)

Objetivos del blog.

Después de leer este blog, podrá mostrar todos los productos cuando la búsqueda esté en blanco.

Planteamiento del problema

Actualmente en Opencart, cuando el usuario busca cualquier cadena con la función de búsqueda, no se devuelve ningún producto si no se ha encontrado ningún producto de búsqueda en la base de datos. Queremos que devuelva todos los productos cuando la búsqueda esté vacía.

Implementación de Código

Para lograr esto, tendremos que hacer algunos cambios en la función de modelo que estamos usando para obtener productos de la base de datos en base a la palabra clave de búsqueda ingresada. Aquí estamos haciendo cambios en getProducts () ?function of model catálogo / modelo / catálogo / producto.php ya que estamos utilizando esta función para mostrar los resultados en base a la palabra clave de búsqueda.

Nota: puede hacer los mismos cambios en la función de modelo que está utilizando para obtener productos. Aquí está el código que hemos añadido en el modelo:

/ * Se verificó si el resultado estaba vacío (filas 0 afectadas) de la consulta que se está ejecutando para recuperar datos en base a la palabra clave de búsqueda. * Si es así, entonces se agrega una nueva consulta para obtener nuevos productos agregados y se ejecuta igual. * Al hacer esto, mostraremos nuestros nuevos productos en la página de búsqueda en lugar de mostrar una página en blanco. * / if ($ query-> num_rows == 0) {$ sql = "SELECT DISTINCT p.product_id FROM". DB_PREFIX. "producto p ÚNICA IZQUIERDA". DB_PREFIX. "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN". DB_PREFIX. "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW () AND p2s.store_id = '". (int) $ this-> config-> get ('config_store_id'). "'GROUP BY p.product_id ORDEN POR p.product_id DESC LIMIT 20"; $ query = $ this-> db-> query ($ sql); }

Agregue este código justo después de ejecutar la consulta principal o justo después de la línea ($ consulta = $ esto-> db-> consulta ($ sql)). En este código, primero hemos verificado el número de filas afectadas por la consulta principal (utilizada para obtener datos en función de la palabra clave de búsqueda). Si la fila afectada es 0 ($ query-> num_rows == 0) Luego agregamos nuestra consulta para buscar nuevos productos añadidos. Al hacer esto, mostraremos nuestros nuevos productos en la página de búsqueda en lugar de mostrar una página en blanco.

Nota: Aquí hemos escrito una consulta para obtener nuevos productos agregados de la base de datos si la búsqueda está vacía. También puede agregar consultas para obtener productos más vendidos o especiales de acuerdo con sus requerimientos.

Resumen

Después de realizar los siguientes cambios en el archivo modelo, los nuevos productos agregados se mostrarán cuando la búsqueda esté vacía.


Obtén los últimos productos sin precios especiales (Opencart 2.3)

Objetivos del blog.

Después de leer este blog, podrá obtener productos de la base de datos de Opencart sobre la base del parámetro que se pasa desde la URL.

Requisito

Tenemos que mostrar los últimos productos sobre la base del parámetro pasado en la URL. Usando este parámetro, tenemos que decidir si debemos mostrar productos especiales o no.

Implementación de Código

Para implementar esto necesitamos hacer cambios en nuestro controlador y modelo. En el controlador, agregamos la condición para pasar el parámetro y en el modelo realizaremos cambios en la consulta de acuerdo con el parámetro pasado. Para manejar la condición estamos usando show_special Parámetro en el código. A continuación se muestra el código que tenemos que añadir en el controlador (catálogo / controlador / extensión / módulo / latest.php):

/ * Comprobación de la clave show_special en el parámetro get * Esta clave ($ show_special) se utilizará para recuperar condicionalmente datos de la base de datos. * es decir, si $ show_special = 1 muestra productos que * special $ show_special = 0 muestra productos que no tienen especial * else * muestra todos los productos independientemente de special * / if (isset ($ this-> request-> get [' show_special '])) {// pasando el valor en la variable si se establece en la URL $ show_special = $ this-> request-> get [' show_special ']; } else {// De lo contrario, se pasará una cadena vacía $ show_special = ''; } // Crear una variable para pasar al modelo $ filter_data = array ('start' => ($ page - 1) * $ limit, 'limit' => $ limit, 'show_special' => $ show_special); // Llamando a la función de modelo para obtener datos de la base de datos de acuerdo con los datos pasados ​​en la matriz filter_data. $ results = $ this-> model_catalog_product-> getProductLatest ($ filter_data);

En este código primero hemos comprobado que si 'show_special'parámetro está configurado en la URL o no. Si es así, establezca el valor del parámetro en una variable $ show_special y si no, entonces establezca la variable como en blanco. Entonces hemos creado una matriz ($ default_data) con los valores en nombre de los cuales tenemos que buscar productos de la base de datos. Entonces hemos llamado función de modelo. getProductLatest () para obtener los últimos productos de acuerdo con la variable pasada ($ filter_data) en la función. Aquí está la función que tenemos que agregar en el modelo (catálogo / modelo / catálogo / producto):

función pública getProductLatest ($ data = array ()) {// Configurando los parámetros $ join y $ condition para obtener datos de productos especiales si ($ data ['show_special'] == '1') {$ join = "LEFT JOIN" . DB_PREFIX. "product_special ps ON (ps.product_id = p.product_id)"; $ condition = "AND ps.customer_group_id = '". (int) $ this-> config-> get ('config_customer_group_id'). "'AND ((ps.date_start =' 0000-00-00 'OR ps.date_start <NOW ()) AND (ps.date_end =' 0000-00-00 'OR ps.date_end> NOW () O ps.date_end = '0001-01-01')) "; } // Configurando los parámetros $ join y $ condition para obtener datos de productos que no son específicos ($ data ['show_special'] == '0') {$ join = "LEFT JOIN". DB_PREFIX. "product_special ps ON (ps.product_id = p.product_id)"; $ condition = "AND ps.product_id IS NULL"; } else {// Estableciendo los parámetros $ join y $ condition para obtener datos de todos los productos, independientemente de la especial $ join = ''; $ condición = ''; } // Consulta para obtener datos de productos de la base de datos. Se agregaron los parámetros $ join y $ condition en la consulta para obtener datos en consecuencia $ sql = "SELECT DISTINCT p.product_id FROM". DB_PREFIX. "producto p ÚNICA IZQUIERDA". DB_PREFIX. "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN". DB_PREFIX. "product_to_store p2s ON (p.product_id = p2s.product_id) $ join WHERE p.status = '1' AND p.date_available <= NOW () AND p2s.store_id = '". (int) $ this-> config-> get ('config_store_id'). "'$ condition GROUP BY p.product_id ORDER BY p.product_id DESC"; // Establecer el límite en la consulta si se pasa LIMIT desde el controlador. if (isset ($ data ['start']) || isset ($ data ['limit'])) {if ($ data ['start'] <0) {$ data ['start'] = 0; } if ($ data ['límite'] <1) {$ data ['límite'] = 20; } $ sql. = "LIMIT". (int) $ datos ['inicio']. ",". (int) $ datos ['límite']; } $ product_data = array (); // Ejecutar consulta $ consulta = $ esto-> db-> consulta ($ sql); // Bucle para establecer los datos recuperados en la variable para pasar en el controlador. foreach ($ consulta-> filas como $ resultado) {$ product_data [$ resultado ['product_id']] = $ this-> getProduct ($ result ['product_id']); } // Devolver los datos de los productos al controlador. devuelve $ product_data; }

En el modelo hemos establecido variables. $ unirse y $ condición Sobre la base de las siguientes tres condiciones:

  1. Si show_special es 1: En este caso solo hemos mostrado productos que son especiales. Como en Opencart, los datos de productos especiales se almacenan en la tabla oc_product_special, por lo que hemos agregado la combinación de oc_product table con la tabla oc_product_secial para obtener datos de productos especiales únicamente.
  2. Si show_special es 0: En este caso, hemos mostrado productos que no están configurados como especiales. Entonces, para encontrar productos que no sean especiales, tenemos que buscar productos que están en una tabla especial pero en la tabla oc_product_special. Para esto hemos agregado la combinación IZQUIERDA de la tabla oc_product con la tabla oc_product_secial y la condición agregada "ps.product_id IS NULL".
  3. Si show_special es distinto de 0 y 1: En este caso, tenemos que buscar todos los productos, ya sean especiales o no. Así que para esto hemos obtenido directamente datos de la tabla oc_product.

Después de agregar las tres condiciones posibles, hemos escrito la consulta y la ejecutamos. Entonces hemos puesto todos los datos recuperados en $ product_data Array y devuelve lo mismo al controlador.

Nota: aquí para obtener los últimos productos que acabamos de utilizar 'Ordenar por product_id DESC' en la consulta. Si desea obtener datos de productos que se agregaron en los últimos días, puede agregar una condición más en la cláusula WHERE, es decir, fecha_added> 'cualquier fecha'.

Resumen

Después de seguir el procedimiento anterior, podrá obtener los últimos productos especiales sobre la base del parámetro pasado para productos especiales en la URL.