Página 1 de 1

[DICA] Produtos Aleatórios no Módulo de Produtos em Destaque

Enviado: 16 Mar 2012, 12:12
por lelekorodrigues
Bom Dia Pessoal,

Achei legal postar essa dica, adaptei um codigo para que os produtos fiquem aleatórios no modulo de produtos em destaque.
Basta configurar 02 parametros:
Passo 1 - Abra o arquivo index.php da raiz de sua loja.
Passo 2 - Procure pela palavra "// Dispatch".
Passo 3 - Cole o código a seguir exatamente antes da linha encontrada no passo 2, em seguida altere os parâmetros $qt_itens_destaque e $id_setting de acordo com sua necessidade.

//produtos aleatorios do Destaque
//configuração
//quantidade de itens que apareceção no modulo de destaque
$qt_itens_destaque="20";

//id do registro da tabela setting correspondente aos produtos em destaque
//(procure pelo registro onde o campo key='featured_product' e o campo group='featured')
$id_setting="20753";
//fim da configuração
$contador = 0;
$varcodigos = "";
$con = mysql_connect( DB_HOSTNAME,DB_USERNAME,DB_PASSWORD);
mysql_select_db(DB_DATABASE, $con);
$produto_destaque = mysql_query("select * from product order by rand() limit ".$qt_itens_destaque) or die(mysql_error());
while($array = mysql_fetch_array($produto_destaque)){
if ($contador =0){
$varcodigos = (string) $array['product_id'];
}else{
$varcodigos = $varcodigos.",".(string) $array['product_id'];
}
$contador++;
}
if ($contador >0){
$produto_destaque = $db->query("update setting set value='".$varcodigos."' where setting_id=".$id_setting);
}
//fim

Obs.: Eu utilizo a Versão 1.5.0.5 e funcionou legal.

Até mais.

Leandro

Re: [DICA] Produtos Aleatórios no Módulo de Produtos em Dest

Enviado: 16 Mar 2012, 13:02
por Manoel Vidal
Parabéns pela contribuição! :D

Re: [DICA] Produtos Aleatórios no Módulo de Produtos em Dest

Enviado: 16 Mar 2012, 13:17
por lelekorodrigues
Obrigado Manoel

Re: [DICA] Produtos Aleatórios no Módulo de Produtos em Dest

Enviado: 17 Mar 2012, 02:29
por Renato Frota
Essa alteração (na index.php) faz uma varredura em todo o banco de dados, ordena os resultados por rand() (que é viciado, segundo a própria documentação do MySQL), e atualiza o banco de dados com o set de IDs retornados, TODA vez que uma página é carregada (não somente nas páginas em que o módulo de destaques aparece). Ou seja, você abre o carrinho, o script roda. Você faz um cadastro, o script roda. Você chama um ajax (do passo 1 para o passo 2 da finalização de um pedido, por exemplo) e o script roda de novo. Você abre a sua conta, o script roda. Um intermediador de pagamento faz um request pra atualizar o status de uma transação, o script roda.... enfim.. TODA url chamada da loja (que sempre carrega a index), vai fazer uma varredura (sem cláusula WHERE), uma ordenação viciada, e um UPDATE (num dado que, em 99% dos casos, já está com o valor que você está atualizando).

Resumo da ópera: incremento de load do seu servidor mysql em 30-50% e do seu servidor web em 10%, pelo menos.

Re: [DICA] Produtos Aleatórios no Módulo de Produtos em Dest

Enviado: 17 Mar 2012, 17:01
por lelekorodrigues
Ok Renato, valeu pelas informações.....
tenho muito pouco conhecimento em MySql e principalmente php, mas vou tentar achar uma melhor forma de implementar essa funcionalidade.

Leandro

Re: [DICA] Produtos Aleatórios no Módulo de Produtos em Dest

Enviado: 17 Mar 2012, 17:35
por Renato Frota
leleko,

neste tópico tem outra implementação https://forum.opencartbrasil.com.br/ ... f=41&t=723 que foi convertida em um módulo pelo feliperohde aqui https://forum.opencartbrasil.com.br/ ... =39&t=2886

usaram o model getProducts, que exige uma cláusula de limite, definiram 10 x o número de produtos a serem visualizados e ordenaram por rand() o resultado, como você vez. Se você aplicar lá a sua consulta mysql_query direta em vez de usar a função getProducts, já melhora o resultado, sem tanto aumento de carga (ainda tem um incremento leve de uso de processamento, pois usa srand e microtime e tem randomização aplicada tando na query quanto no PHP, mas ainda é melhor do que a sua solução, pois a sua carrega em todos os requests, mesmo aqueles onde o módulo não aparece). Só não será, ainda, uma randomização perfeita pois, como eu mencionei, o rand() é "viciado".

Re: [DICA] Produtos Aleatórios no Módulo de Produtos em Dest

Enviado: 17 Mar 2012, 18:58
por lelekorodrigues
Certo Renato, vou dar uma olhada..

Obrigado.

Leandro

Re: [DICA] Produtos Aleatórios no Módulo de Produtos em Dest

Enviado: 21 Mar 2014, 13:58
por glbatista
Para quem esta usando a versão 1.5.6.1:

editar o arquivo:
catalog/controller/module/featured.php

Procurar a linha:
$products = array_slice($products, 0, (int)$setting['limit']);

adicionar acima desta linha, o codigo:
shuffle($products);

Antes da alteração:
Código: Selecionar todos
                if (empty($setting['limit'])) {
                        $setting['limit'] = 5;
                }
                $products = array_slice($products, 0, (int)$setting['limit']);

Após a alteração:
Código: Selecionar todos
                if (empty($setting['limit'])) {
                        $setting['limit'] = 5;
                }
                shuffle($products);
                $products = array_slice($products, 0, (int)$setting['limit']);

Re: [DICA] Produtos Aleatórios no Módulo de Produtos em Dest

Enviado: 30 Jul 2015, 11:31
por acheiprimeiro
Caro glbatista,

Obrigado por compartilhar, fiz a edição conforme você disse, e funcionou 100%