PrestaShop Forums: Più prodotti modulo Block Special - PrestaShop Forums

Jump to content


Welcome to the PrestaShop Forum! We hope you'll share your comments and suggestions with us. We ask that you please post in English to the main sections of the PrestaShop Forum. If you want to write in another language, please post in the corresponding PrestaShop Community section below.

Please note that PrestaShop Community sections are largely self-moderated. PrestaShop team members may or may not participate in non-English sections. To improve the chances of receiving feedback to your question or comment, please post it in English to the main sections of our Forum.

NYC

Vous parlez français ? par ici !


Più prodotti modulo Block Special


Più prodotti modulo Block Special

#1 Guest_Vincenzo_*

  • --
  • Guests

Posted 28 July 2010 - 10:33 PM

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 Guest__*

  • --
  • Guests

Posted 29 July 2010 - 12:39 PM

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 Guest__*

  • --
  • Guests

Posted 29 July 2010 - 10:13 PM

Risolto, grazie lo stesso

#4 Guest__*

  • --
  • Guests

Posted 18 December 2010 - 07:10 PM

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 Guest_supialus_*

  • --
  • Guests

Posted 07 October 2011 - 04:09 PM

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 Guest_GIG_*

  • --
  • Guests

Posted 07 October 2011 - 07:40 PM

Puoi mettere una immagine del risultato finale che hai ottenuto ?
Saluti.
GIG. ^_^

#7 Guest_supialus_*

  • --
  • Guests

Posted 10 October 2011 - 09:13 AM

Ciao GIG,

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

Posted Image


Saluti.
Supialus

#8 Guest_3o33y_*

  • --
  • Guests

Posted 14 October 2011 - 03:51 PM

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 Guest_diana13_*

  • --
  • Guests

Posted 04 November 2011 - 10:07 PM

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


#10 Guest_tatygrassini_*

  • --
  • Guests

Posted 17 December 2011 - 04:52 AM

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 Guest_GIG_*

  • --
  • Guests

Posted 19 December 2011 - 01:25 AM

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 Guest_Flaunt_*

  • --
  • Guests

Posted 08 February 2012 - 02:21 PM

Been looking for something like this. Worked brilliantly and first time! Many thanks, supialus :D





1 user(s) are reading this topic

0 members, 1 guests, 0 anonymous users