Obtenha os mais recentes produtos sem preços especiais (Opencart 2.3)

Objetivos do blog

Depois de ler este blog, você será capaz de buscar produtos do banco de dados Opencart com base no parâmetro que é passado da URL.

Exigência

Temos que exibir os produtos mais recentes com base no parâmetro passado no URL. Usando este parâmetro, temos que decidir se temos que exibir produtos especiais ou não.

Implementação de Código

Para implementar isso, precisamos fazer mudanças em nosso controlador e modelo. No controlador nós adicionamos a condição para passar o parâmetro e no modelo faremos mudanças na consulta de acordo com o parâmetro passado. Para lidar com condição estamos usando show_special parâmetro no código. Abaixo está o código que temos que adicionar no controlador (catalog / controller / extension / module / latest.php):

/ * Checando a chave show_special no parâmetro get * Esta chave ($ show_special) será usada para buscar dados condicionalmente do banco de dados. * ie if $ show_special = 1 então exibe produtos que especiais * $ show_special = 0 então exibem produtos que não têm especiais * else * exibem todos os produtos independentemente de especiais * / if (isset ($ this-> request-> get [' show_special '])) {// passando o valor na variável se definido na URL $ show_special = $ this-> request-> get [' show_special ']; } else {// Caso contrário, uma string vazia será passada $ show_special = ''; } // Criando uma variável a ser passada para o modelo $ filter_data = array ('start' => ($ page - 1) * $ limite, 'limite' => $ limite, 'show_special' => $ show_special); // Chamando a função model para buscar dados do banco de dados de acordo com os dados passados ​​na matriz filter_data. $ results = $ this-> model_catalog_product-> getProductLatest ($ filter_data);

Neste código, primeiro verificamos se 'show_special'parâmetro é definido no URL ou não. Se sim, defina o valor do parâmetro em uma variável $ show_special e se não, defina a variável como em branco. Então nós criamos uma matriz ($ default_data) com os valores em nome dos quais temos que buscar produtos do banco de dados. Então nós chamamos a função modelo getProductLatest () para buscar os produtos mais recentes de acordo com a variável passada ($ filter_data) na função. Aqui está a função que temos que adicionar no modelo (catálogo / modelo / catálogo / produto):

public function getProductLatest ($ data = array ()) {// Definindo $ join e $ condition parameters para buscar dados de produtos especiais se ($ 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 'OU ps.date_start <NOW ()) AND (ps.date_end =' 0000-00-00 'OU ps.date_end> AGORA () OU ps.date_end = '0001-01-01')) "; } // Configurando os parâmetros $ join e $ condition para buscar dados de produtos que não são specil elseif ($ 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 {// Definindo os parâmetros $ join e $ condition para buscar dados de todos os produtos, independentemente do especial $ join = ''; $ condition = ''; } // Consulta para buscar dados de produtos do banco de dados. Adicionado $ join e $ condition parâmetro na consulta para buscar dados de acordo $ sql = "SELECT DISTINCT p.product_id FROM". DB_PREFIX. "product p LEFT JOIN". 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) $ aderir WHERE p.status = '1' E p.date_available <= NOW () E p2s.store_id = '". (int) $ this-> config-> get ('config_store_id'). "'$ condition GROUP BY p.product_id ORDER BY p.product_id DESC"; // Configurando o limite na consulta se passou LIMIT do controlador. if (isset ($ data ['iniciar']) || isset ($ data ['limite'])) {if ($ data ['início'] <0) {$ data ['início'] = 0; } if ($ data ['limite'] <1) {$ data ['limite'] = 20; } $ sql. = "LIMITE". (int) $ data ['iniciar']. ",". (int) $ data ['limite']; } $ product_data = array (); // Execute a consulta $ query = $ this-> db-> query ($ sql); // Loop para definir dados buscados na variável para passar no controlador. foreach ($ query-> linhas como $ result) {$ product_data [$ resultado ['product_id']] = $ this-> getProduct ($ resultado ['product_id']); } // Retorna os dados dos produtos para o controlador. return $ product_data; }

No modelo, definimos variáveis $ join e $ condition com base nas seguintes três condições:

  1. Se show_special for 1: Neste caso, exibimos apenas produtos que são especiais. Como em todo o caso, os dados de produtos especiais são armazenados na tabela oc_product_special, por isso adicionamos a junção da tabela oc_product à tabela oc_product_secial para buscar dados apenas de produtos especiais.
  2. Se show_special for 0: Neste caso, exibimos produtos que não estão configurados como especiais. Então, para encontrar produtos que não são especiais, temos que buscar produtos que estão em uma tabela especial, mas na tabela oc_product_special. Para isso, adicionamos a junção LEFT da tabela oc_product com a tabela oc_product_secial e a condição adicionada "ps.product_id IS NULL".
  3. Se show_special for diferente de 0 e 1: Neste caso, temos que buscar todos os produtos, sejam eles especiais ou não. Então, para isso, buscamos diretamente os dados da tabela oc_product.

Depois de adicionar todas as três condições possíveis, escrevemos a consulta e a executamos. Em seguida, definimos todos os dados buscados $ product_data matriz e retornar o mesmo para o controlador.

Nota: aqui para buscar os produtos mais recentes, acabamos de usar 'Order by product_id DESC' na consulta. Se você deseja buscar dados de produtos que foram adicionados nos últimos dias, então você pode adicionar mais uma condição na cláusula WHERE, ou seja, date_added> 'any date'.

Resumo

Depois de seguir o procedimento acima, você poderá buscar os produtos especiais mais recentes com base no parâmetro passado para produtos especiais na URL.


Shivika Tomar

Shivika Tomar

Shivika Tomar is a passionate PHP developer. Her area of interest is website development. She loves to bring healing to stressful and sad peoples.

Leave a Reply

Your email address will not be published. Required fields are marked *