Jump to content

Saber que categorías tienen promoción (Optimizar)


MFLM

Recommended Posts

Hola a todos

 

Tengo un archivo PHP que genera un resultado donde aparecen las categorías de una tienda enseguida el código:

if(Tools::getValue("boutique"))
{

	
	Shop::setIdShop(Tools::getValue('boutique'));
	$cntxt =  Context::getContext();
	$cntxt->shop = new Shop(Tools::getValue('boutique'));
	
	$categories = Category::getCategories($context->language->id);
	
	$resultat = array();
	$row = array();
	
	foreach($categories as $cat)
	{
		
		foreach($cat as $c)
		{
			
			$row = array();
			$categorie = New Category($c["infos"]["id_category"]); 
			$row['id_category']=$c["infos"]["id_category"];
			$row['id_parent']=$c["infos"]["id_parent"];
			$row['titre']=$c["infos"]["name"];
			$row['level_depth']=$c["infos"]["level_depth"];
			$row['nbProduct'] = $categorie->getProducts($context->language->id,0,1000000 , null ,null , true);
			
			foreach ($row as $key => $value) {
				if ($value == NULL) {
					$row[$key]='';
				}
			}
			$resultat[]=$row;
		}
	}
	echo json_encode($resultat);
} 

Ahora me gustaría saber, ¿que categorías tienen promoción en alguno de sus productos?

                 $query='
	         SELECT COUNT(p.`id_product`) as totalProducts
	         FROM `'._DB_PREFIX_.'product` p , `'._DB_PREFIX_.'product_shop` ps
	         WHERE p.`active` = 1
	         AND p.`id_product` = ps.`id_product`
	         AND ps.`id_shop` = '.$cntxt->shop->id.'';
			 

		
			$result_product_count = Db::getInstance()->ExecuteS($query);
	        $countt = $result_product_count[0]['totalProducts'];
			
			$promos = Product::getPricesDrop($id_lang = 1, $page_number = 0, $nb_products = $countt, $count = false,
			
			$order_by = null, $order_way = null, $beginning = false, $ending = false,  $context = $cntxt);
			
			$products = $categorie->getProducts($context->language->id,0,$countt+1 , null ,null , false , $active = true, $random = false, $random_number_products = 1, $check_access = true, $context = $cntxt);
			
			$products = $categorie->getProducts($context->language->id,0,$countt+1 , null ,null , false , $active = true, $random = false, $random_number_products = 1, $check_access = true, $context = $cntxt);
			$row['hasSold'] = 0; 
		
			foreach($products as $p)
			{
				if (count(promos)>0) {
					foreach($promos as $promo)
					{
						if ($promo['id_product'] == $p['id_product']){
						$row['hasSold']= 1; 
							
						}
					}
				}
			}

Tengo el código anterior que va dentro del foreach($cat as $c) pero este toma más de un minuto en obtener el resultado cuando la obtención de categorías lo da en 2 segundos.

 

¿Existe una forma de optimizar esta obtención de variable? o ¿Es la única manera?

 

Agradezco a todos sus comentarios

Edited by MFLM (see edit history)
Link to comment
Share on other sites

La instancia a las categorias de una tienda (id) la puedes tener añadiendo el parametro shop

$id_shop = '5';  // Shop ID
$categoryByShop = new Category((int)Tools::getValue('id_category'), $this->context->language->id, $id_shop);

Luego ya el resto no entiendo que quieres hacer, si que solo se muestren categorias con descuento en el product-list.tpl o si quieres crear una pagina especifica con esos productos con descuento 

Link to comment
Share on other sites

La instancia a las categorias de una tienda (id) la puedes tener añadiendo el parametro shop

$id_shop = '5';  // Shop ID
$categoryByShop = new Category((int)Tools::getValue('id_category'), $this->context->language->id, $id_shop);

Luego ya el resto no entiendo que quieres hacer, si que solo se muestren categorias con descuento en el product-list.tpl o si quieres crear una pagina especifica con esos productos con descuento 

Hola

Ya se obtener las categorías de la tienda y subcategorías correspondientes. 

 

Lo que necesito es lo siguiente:

Que muestre todas las categorías, y las que tienen promoción aparezcan diferentes con una imagen

 

Pienso obtener todos los productos de promoción, guardarlos en un arreglo y después en el foreach compararlo.

 

Es que ya hago el proceso pero tarda demasiado para dar el resultado.

Link to comment
Share on other sites

Hola

Ya se obtener las categorías de la tienda y subcategorías correspondientes. 

Viendo tu código no me ha quedado claro

Lo que necesito es lo siguiente:

Que muestre todas las categorías, y las que tienen promoción aparezcan diferentes con una imagen

Crea una variable que diferencie a esas categorias

Pienso obtener todos los productos de promoción, guardarlos en un arreglo y después en el foreach compararlo.

existe una clase para ello, filtros en el modulo de facetas que puedes crear, o criterios de ordenación de los productos en base a lo que necesites

Es que ya hago el proceso pero tarda demasiado para dar el resultado.

no me extraña nada

 

Intenta basarte en el core porque sino vas a tener problemas de rendimiento seguro

Link to comment
Share on other sites

Hola a todos

 

En una aplicación móvil al momento de mostrar las categorías en un menú, quisiera saber que categorías tiene promoción, para así mostrar una imagen diferente.

 

Se que al momento de obtener las categorías, tengo que hacer un foreach a los productos que tienen promoción y compararlos. Pero si tengo muchos productos y muchas categorías esto tardara demasiado.

 

Espero me ayuden

Gracias

 

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