PrestaShop Forum

The best place in the world to ask questions about PrestaShop and get advice from our passionate community!

PrestaShop Forum

Jump to content

 

Più prodotti modulo Block Special

11 replies to this topic
#1
Vincenzo

    PrestaShop Newbie

  • Members
  • Pip
  • 12 posts
Salve ragazzi,
ho dei piccoli problemi per quanto riguarda il modulo block special...
Se ho capito bene mostra i prodotti in offerta.
Sono riuscito, sistemando gli hook, a sistemarlo nella parte centrale dell'homepage, e non nella colonna di destra...
Ora nasce un problema, non potendolo configurare da BO il modulo, come posso far mostrare più di un prodotto in offerta?
Grazie anticipatamente, ciao!

#2
Vincenzo

    PrestaShop Newbie

  • Members
  • Pip
  • 12 posts
Da quanto vedo, usa una funzione random per mostrare l'articolo..
Nessuno che riesce a sistemare la cosa?

edit: ci sono 4 "1" nella funzione.. Uno di quelli forse indica il numero di prodotti da mostrare in home?

#3
Vincenzo

    PrestaShop Newbie

  • Members
  • Pip
  • 12 posts
Risolto, grazie lo stesso

#4
GIG

    PrestaShop Apprentice

  • Members
  • PipPip
  • 91 posts
Ciao ragazzi io sono alle prime armi...
vorrei sapere solo come posso aumentare il numero di prodotti in offerta
visualizzati nella pagina iniziale ( lasciando invariata la loro posizione)
PS* adesso me ne visualizza solo 1 , per gli altri devo cliccare sul
pulsante sotto : visualizza tutte ele offerte.
BYE BYE
;-P

#5
supialus

    PrestaShop Newbie

  • Members
  • Pip
  • 3 posts
Salve,
Forse a qualcuno potrebbe interessare:
Prestashop Versione 1.4.4.0

File: classes/Product.php
Funzione: getRandomSpecial()
Tip: Invece di prendere un prodotto a random, modifichiamo la prima query per individuare diversi "id" (non solo uno) dei prodotti speciali a random e poi construiamo la seconda query con un numero limitato degli "id" presi prima (nel esempio lo limitiamo a 5, la prima variabile dichiarata)

public static function getRandomSpecial($id_lang, $beginning = false, $ending = false)
{
  // Numero di prodotti RandomSpecial da visualizzare nell'homepage
  $Numero_Prodotti_Speciali = 5;
 
		$currentDate = date('Y-m-d H:i:s');
  $ids_product = self::_getProductIdByDate((!$beginning ? $currentDate : $beginning), (!$ending ? $currentDate : $ending));
  $groups = FrontController::getCurrentCustomerGroups();
  $sqlGroups = (count($groups) ? 'IN ('.implode(',', $groups).')' : '= 1');
  // Please keep 2 distinct queries because RAND() is an awful way to achieve this result
  $sql = '
  SELECT p.id_product
  FROM `'._DB_PREFIX_.'product` p
  WHERE 1
  AND p.`active` = 1
  AND p.`id_product` IN ('.implode(', ', $ids_product).')
  AND p.`id_product` IN (
   SELECT cp.`id_product`
   FROM `'._DB_PREFIX_.'category_group` cg
   LEFT JOIN `'._DB_PREFIX_.'category_product` cp ON (cp.`id_category` = cg.`id_category`)
   WHERE cg.`id_group` '.$sqlGroups.'
  )
  ORDER BY RAND()';
 
  $id_products = array();
  if ($results = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS($sql))
   foreach ($results as $row)
	$id_products[] = $row['id_product'];
  
  $rowsql = 'SELECT p.*, pl.`description`, pl.`description_short`, pl.`link_rewrite`, pl.`meta_description`, pl.`meta_keywords`, pl.`meta_title`, pl.`name`, p.`ean13`,  p.`upc`,
   i.`id_image`, il.`legend`, t.`rate`
  FROM `'._DB_PREFIX_.'product` p
  LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON (p.`id_product` = pl.`id_product` AND pl.`id_lang` = '.(int)($id_lang).')
  LEFT JOIN `'._DB_PREFIX_.'image` i ON (i.`id_product` = p.`id_product` AND i.`cover` = 1)
  LEFT JOIN `'._DB_PREFIX_.'image_lang` il ON (i.`id_image` = il.`id_image` AND il.`id_lang` = '.(int)($id_lang).')
  LEFT JOIN `'._DB_PREFIX_.'tax_rule` tr ON (p.`id_tax_rules_group` = tr.`id_tax_rules_group`
			   AND tr.`id_country` = '.(int)Country::getDefaultCountryId().'
			   AND tr.`id_state` = 0)
  LEFT JOIN `'._DB_PREFIX_.'tax` t ON (t.`id_tax` = tr.`id_tax`)
  WHERE';
 
  // Loop per inserire gli "id" dei prodotti con il limite impostato all'inizio della funzione
  $i = 0;
  foreach ($id_products as $id_product) {
   $rowsql .= " p.id_product = ".(int)$id_product." ||";
   if (++$i == $Numero_Prodotti_Speciali) break;
  }
 
  // Togliamo gli ultimi due caratteri alla fine della stringa = ||
  $rowsql = substr($rowsql, 0, -2);
 
  $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS($rowsql);
  if (!$result)
   return false;
 
  // Ritorniamo un array di prodotti con le sue proprietà, invece di un solo prodotto
  return Product::getProductsProperties($id_lang, $result);
}


File: modules/blockspecials.php
Funzione: hookRightColumn()
Tip: cambiata la variabile "special" per "specials"

public function hookRightColumn($params)
{
  if (Configuration::get('PS_CATALOG_MODE'))
   return ;
 
  global $smarty;
  if (!$specials = Product::getRandomSpecial((int)($params['cookie']->id_lang)) AND !Configuration::get('PS_BLOCK_SPECIALS_DISPLAY'))
   return;
  $smarty->assign(array(
   'specials' => $specials,
   'mediumSize' => Image::getSize('medium')
  ));
  return $this->display(__FILE__, 'blockspecials.tpl');
}


File: themes/"yourtheme"/modules/blockspecials/blockspecials.tpl
Funzione: getRandomSpecial()
Tip: usiamo un foreach per percorrere i prodotti speciali e stamparli

<!-- MODULE Block specials MODIFICATO-->
<div id="special_block_right" class="block products_block exclusive blockspecials">
<h4><a href="{$link->getPageLink('prices-drop.php')}" title="{l s='Specials' mod='blockspecials'}">{l s='Specials' mod='blockspecials'}</a></h4>
<div class="block_content">
{if $specials}
<div id="forspecial">
{foreach from=$specials item=special name=products} <!-- nuovo -->
  <a href="{$special.link}">
   <ul class="products">
	<li class="product_image">
	 <img src="{$link->getImageLink($special.link_rewrite, $special.id_image, 'medium')}" alt="{$special.legend|escape:html:'UTF-8'}" height="{$mediumSize.height}" width="{$mediumSize.width}" title="{$special.name|escape:html:'UTF-8'}" />
	</li>
	<li>
 
	 <h5>{$special.name|escape:html:'UTF-8'}</h5>
	 <span class="price-discount">{displayWtPrice p=$special.price_without_reduction}</span>
	 {if $special.specific_prices}
	  {assign var='specific_prices' value=$special.specific_prices}
	  {if $specific_prices.reduction_type == 'percentage' && ($specific_prices.from == $specific_prices.to OR ($smarty.now|date_format:'%Y-%m-%d %H:%M:%S' <= $specific_prices.to && $smarty.now|date_format:'%Y-%m-%d %H:%M:%S' >= $specific_prices.from))}
	   <span class="reduction">(-{$specific_prices.reduction*100|floatval}%)</span>
	  {/if}
	 {/if}
	 <span class="price">{if !$priceDisplay}{displayWtPrice p=$special.price}{else}{displayWtPrice p=$special.price_tax_exc}{/if}</span>
	</li>
   </ul>
  </a>
 
{/foreach}  <!-- nuovo -->
<p>
  <a href="{$link->getPageLink('prices-drop.php')}" title="{l s='All specials' mod='blockspecials'}" class="button_large">{l s='All specials' mod='blockspecials'}</a>
</p>
{else}
  <p>{l s='No specials at this time' mod='blockspecials'}</p></div>
{/if}
</div>
</div>
<!-- /MODULE Block specials MODIFICATO-->


#6
GIG

    PrestaShop Apprentice

  • Members
  • PipPip
  • 91 posts
Puoi mettere una immagine del risultato finale che hai ottenuto ?
Saluti.
GIG. ^_^

#7
supialus

    PrestaShop Newbie

  • Members
  • Pip
  • 3 posts
Ciao GIG,

Ecco l'immagine. Come si vede i prodotti speciali sono nella colonna destra:

Posted Image


Saluti.
Supialus

#8
3o33y

    PrestaShop Apprentice

  • Members
  • PipPip
  • 31 posts
Ciao Supialus, forse puoi aiutarmi .. sto utilizzando prestashop con il suo tema base, e la lista dei prodotti mi viene visualizzata in verticale.

Come posso fare per fare visualizzare la lista prodotti uno di fianco all'altro e poi a capo come nell'immagine che hai postato tu?

Grazie anticipatamente
Ciao

#9
diana13

    PrestaShop Apprentice

  • Members
  • PipPip
  • 130 posts
Thanks a lot for your post. I used it in 1.4.5.1 and to display corectly the products, File: themes/"yourtheme"/modules/blockspecials/blockspecials.tpl should be:

<!-- MODULE Block specials -->
<div id="special_block_right" class="block products_block exclusive blockspecials">
<h4><a href="{$link->getPageLink('prices-drop.php')}" title="{l s='Promotii' mod='blockspecials'}">{l s='Promotii' mod='blockspecials'}</a></h4>
<div class="block_content">
{if $specials}
<ul class="products">
{foreach from=$specials item=special name=products}
   <li class="product_image">
	<a href="{$special.link}"><img src="{$link->getImageLink($special.link_rewrite, $special.id_image, 'medium')}" alt="{$special.legend|escape:html:'UTF-8'}" height="{$mediumSize.height}" width="{$mediumSize.width}" title="{$special.name|escape:html:'UTF-8'}" /></a>
   </li>
   <li>
	<h5><a href="{$special.link}" title="{$special.name|escape:html:'UTF-8'}">{$special.name|escape:html:'UTF-8'}</a></h5>
	<span class="price-discount">{if !$priceDisplay}{displayWtPrice p=$special.price_without_reduction}{else}{displayWtPrice p=$priceWithoutReduction_tax_excl}{/if}</span>
	   {if $special.specific_prices}
		   {assign var='specific_prices' value=$special.specific_prices}
		   {if $specific_prices.reduction_type == 'percentage' && ($specific_prices.from == $specific_prices.to OR ($smarty.now|date_format:'%Y-%m-%d %H:%M:%S' <= $specific_prices.to && $smarty.now|date_format:'%Y-%m-%d %H:%M:%S' >= $specific_prices.from))}
			<span class="reduction">(-{$specific_prices.reduction*100|floatval}%)</span>
			  {/if}
			 {/if}
	<span class="price">{if !$priceDisplay}{displayWtPrice p=$special.price}{else}{displayWtPrice p=$special.price_tax_exc}{/if}</span>
   </li>
  <div style="clear:both;"></div>
{/foreach}
</ul>
  <p>
   <a href="{$link->getPageLink('prices-drop.php')}" title="{l s='All specials' mod='blockspecials'}" class="button_large">{l s='All specials' mod='blockspecials'}</a>
  </p>
{else}
  <p>{l s='No specials at this time' mod='blockspecials'}</p>
{/if}
</div>
</div>
<!-- /MODULE Block specials -->

I've started a romanian shop with Cosmetice and one with Noni

#10
tatygrassini

    PrestaShop Newbie

  • Members
  • Pip
  • 8 posts
Any chance to add short description as well?? I tried copy/paste the homefeatured.tpl snippet {$product.description_short} and is not working, can't figure it out...

[SOLVED]
http://www.prestasho...945#entry708945

-------------------------------------------------------------------------------------------------

Now, how to place an Add to Cart button for each product within this Specials loop??

#11
GIG

    PrestaShop Apprentice

  • Members
  • PipPip
  • 91 posts
Ciao a tutti, ho fatto alcune prove ma non riesco ad ottenere il rislutato voluto, probabilmente
sbaglio da qualche parte nell'inserire il codice da voi gentilmenete fornito.
Potete mettere in allegato i vostri files gia' modificati ?
product.php
blockspecials.php
blockspecials.tpl
PS. la mia ver. di prestashop è 1.4.4.1

Ciao
GIG. ;)

#12
Flaunt

    PrestaShop Apprentice

  • Members
  • PipPip
  • 106 posts
Been looking for something like this. Worked brilliantly and first time! Many thanks, supialus :D
Prestashop Store Design and Development at www.hoonadesigns.com