Jump to content

Più prodotti modulo Block Special


Vincenzo

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

Link to comment
Share on other sites

  • 4 months later...

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

Link to comment
Share on other sites

  • 9 months later...

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

  • 3 weeks later...

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

Link to comment
Share on other sites

  • 1 month later...

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

  • 1 month later...
  • 4 months later...
  • 2 months later...

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