Jump to content

Prodotti RANDOM nella home page RISOLTO


Recommended Posts

PRODOTTI RANDOM NELLA HOME:

A) RANDOM DEI NEW PRODUCT nella homepage:
--> leggi quà sotto

B) RANDOM DEI PRODOTTI PRESENTI NELLA CATEGORIA HOME IN homepage
C) RANDOM DEI PRODOTTI PRESENTI IN UNA CATEGORIA NELLA homepage
D) RANDOM DI TUTTI I PRODOTTI NELLA homepage
link alle soluzioni B C D:

http://www.prestashop.com/forums/viewreply/265628/

By Vassag0


FILE classes/Product.php

Search

Get new products
, you would see

/**
   * Get new products
   *
   * @param integer $id_lang Language id
   * @param integer $pageNumber Start from (optional)
   * @param integer $nbProducts Number of products to return (optional)
   * @return array New products
   */


Over this codec add

/*************** Ramdom New Products *****************/
   /*
   * Get new products random
   *
   * @param integer $id_lang Language id
   * @param integer $pageNumber Start from (optional)
   * @param integer $nbProducts Number of products to return (optional)
   * @return array New products
   */
   static public function getNewProductsRandom($id_lang, $pageNumber = 0, $nbProducts = 10, $count = false, $orderBy = NULL, $orderWay = NULL)
   {
       global $link, $cookie;

       if ($pageNumber < 0) $pageNumber = 0;
       if ($nbProducts < 1) $nbProducts = 10;
       if (empty($orderBy)) $orderBy = 'date_add';
       if (empty($orderWay)) $orderWay = 'DESC';
       if ($orderBy == 'id_product' OR $orderBy == 'price' OR $orderBy == 'date_add')
           $orderByPrefix = 'p';
       elseif ($orderBy == 'name')
           $orderByPrefix = 'pl';
       if (!Validate::isOrderBy($orderBy) OR !Validate::isOrderWay($orderWay))
           die(Tools::displayError());

       if ($count)
       {
           $result = Db::getInstance()->getRow('
           SELECT COUNT(`id_product`) AS nb
           FROM `'._DB_PREFIX_.'product`
           WHERE `active` = 1');
           return intval($result['nb']);
       }

       $result = Db::getInstance()->ExecuteS('
           SELECT p.*, pl.`description`, pl.`description_short`, pl.`link_rewrite`, pl.`meta_description`, pl.`meta_keywords`, pl.`meta_title`, pl.`name`, p.`ean13`,
               i.`id_image`, il.`legend`, t.`rate`, m.`name` AS manufacturer_name
           FROM `'._DB_PREFIX_.'product` p
           LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON (p.`id_product` = pl.`id_product` AND pl.`id_lang` = '.intval($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` = '.intval($id_lang).')
           LEFT JOIN `'._DB_PREFIX_.'tax` t ON (t.`id_tax` = p.`id_tax`)
           LEFT JOIN `'._DB_PREFIX_.'manufacturer` m ON (m.`id_manufacturer` = p.`id_manufacturer`)
           WHERE p.`active` = 1
           AND DATEDIFF(p.`date_add`, DATE_SUB(NOW(), INTERVAL '.(Validate::isUnsignedInt(Configuration::get('PS_NB_DAYS_NEW_PRODUCT')) ? Configuration::get('PS_NB_DAYS_NEW_PRODUCT') : 20).' DAY)) > 0
           ORDER BY RAND() LIMIT '.intval($pageNumber * $nbProducts).', '.intval($nbProducts));
       if ($orderBy == 'price')
           Tools::orderbyPrice($result, $orderWay);
       if (!$result)
           return false;
       return Product::getProductsProperties($id_lang, $result);
   }

/*************** End Ramdom New Products *****************/



Salvate la modifica.

ora modificate il file del modulo /modules/homefeatured/homefeatured.php come segue:

Ricordatevi di fare una copia di backup del file PRIMA.

Cercate sul fondo:


$products = $category->getProducts(intval($params['cookie']->id_lang), 1, ($nb ? $nb : 10));



E sostituitelo con:


/*NEW*/
       $products = Product::getNewProductsRandom(intval($params['cookie']->id_lang), 1, ($nb ? $nb : 10));
       /*END NEW*/



Ecco il pezzo di listato completo per individuarlo meglio (io ho mantenuto la stringa originale commentata).

Se invece volete che il random sia SOLO sui prodotti che voi inserite come categoria HOME (motlo utile per crearsi una "categoria" con i prodotti più appetibili e mandarli in random) [ANCORA DA VERIFICARE]

Sostituite sempre a questa stringa:


$products = $category->getProducts(intval($params['cookie']->id_lang), 1, ($nb ? $nb : 10));



IN FASE DI TEST .... come passare alla funzione random la categoria home...

Ricordatevi di fare una copia di backup del file PRIMA.

FILE /modules/homefeatured.php (parte di fondo)

function hookHome($params)
   {
       global $smarty;
       $category = new Category(1);
       $nb = intval(Configuration::get('HOME_FEATURED_NBR'));



       /*MODIFICA_RANDOM $newProducts = Product::getNewProductsRandom(intval($params['cookie']->id_lang), 0, Configuration::get('NEW_PRODUCTS_NBR'));*/
       /*OLD: $products = $category->getProducts(intval($params['cookie']->id_lang), 1, ($nb ? $nb : 10));*/

       /*NEW*/
       $products = Product::getNewProductsRandom(intval($params['cookie']->id_lang), 1, ($nb ? $nb : 10));
       /*END NEW*/
       $smarty->assign(array(
           'allow_buy_when_out_of_stock' => Configuration::get('PS_ORDER_OUT_OF_STOCK', false),
           'max_quantity_to_allow_display' => Configuration::get('PS_LAST_QTIES'),
           'category' => $category,
           'products' => $products,
           'currency' => new Currency(intval($params['cart']->id_currency)),
           'lang' => Language::getIsoById(intval($params['cookie']->id_lang)),
           'productNumber' => sizeof($products),
           'homeSize' => Image::getSize('home')
       ));
       return $



LINK ai FILE COMPLETI

Link to comment
Share on other sites

Segnalo già che ci sono che la funzione Random è utilizzabile in tutti gli altri moduli che visualizzano prodotti.
Può essere utile inserirla nel blocco NEW PRODUCT per visualizzare ogni volta 2 prodotti random tra quelli appena inseriti!



BLOCCO NUOVI PRODOTTI CON FUNZIONE RANDOM:

modulo: blocknewproducts

Cercate nel file blocknewproducts.php

$newProducts = Product::getNewProducts(intval($params['cookie']->id_lang), 0, Configuration::get('NEW_PRODUCTS_NBR'));



e sostituite con:

$newProducts = Product::getNewProductsRandom(intval($params['cookie']->id_lang), 0, Configuration::get('NEW_PRODUCTS_NBR'));



Trovate il file RAR da scaricare al link sopra.

Link to comment
Share on other sites

  • 2 weeks later...
  • 3 weeks later...

Eccola.. Sciolto l'arcano.
homefeatured.php nn si aggancia di default alla funzione getProducts di Product.php ma di Categories.php che di suo gia' supporta il random.
Per far ruotare in maniera random i prodotti in vetrina attinti dalla categoria Home e' sufficiente modificare cosi' il file homefeatured.php .
Non server aggiungere la funzione Random al file Product.php a meno che nn si voglia usarla nel blocco nuovi prodotti.

Nel file homefeatured.php

$products = $category->getProducts(intval($params['cookie']->id_lang), 1, ($nb ? $nb : 10)); 


Mettete

$products = $category->getProducts(intval($params['cookie']->id_lang), 0,($nb ? $nb : 10),NULL,NULL,false,true,true,($nb ? $nb : 10) );



A me va una bomba.
Ciao ragazzi.

Link to comment
Share on other sites

ma in questo caso ti fa il random solo dei prodotti nella categoria home giusto..?
e se volessi fare il random di tutti i prodotti pubblicati..?

Sinceramente non mi sono posto il problema, perche' a me basta ed avanza la home.
Come ho tempo do un occhiata..
Link to comment
Share on other sites

Intanto ti dico che le categorie che il modulo scandaglia sono modificabili da homefeatured.php...

$category = new Category(1);


1 e' l'id della categoria home, se vuoi cambiare categoria basta mettere il numero corrispondente della categoria che vuoi mettere.
Ho fatto anche le modifiche per il giro di tutti i prodotti disponibili in tutte le categorie.
Faccio due test e ti dico.

Link to comment
Share on other sites

Scusate per l'assenza :P si quella modifica mi fa il random SOLO dei nuovi prodotti, perchè io volevo appunto eliminare la sezione HOME che è una BRUTTISIMA GESTIONE per conto mio!

Il random della sola home ti obbliga a cambiare di continuo categoria ai prodotti!

Così facendo io invece vado a mostrare un random dei prodotti più nuovi, che sono poi quelli che normalmente si trovano nelle home dei negozi!


Per fare il random di tutti i prodotti NON potete usare la funzione che ho inserito io, in quanto quella è una funzione di random che pesa appunto solo dai prodotti "new"!

Attendiamo vitwagen per il random completo!!

PS


CERCATE di postare soluzioni complete e dettagliate, altrimenti chi entra a post iniziato fa solo confusione!!

Link to comment
Share on other sites

Ricapitoliamo da zero....
Quindi illustriamo come modificare il modulo homefeatured per consentire una rotazione
1)Random di una categoria specifica
2)Random di tutti i prodotti nelle loro categorie

Fare un backup dei file
modules/homefeatured/homefeatured.php
classes/Category.php

Modifica del file homefeatured.php
cercare

$products = $category->getProducts(intval($params['cookie']->id_lang), 1, ($nb ? $nb : 10));


Cancellare la riga in questione ed inserire

/*OLD: $products = $category->getProducts(intval($params['cookie']->id_lang), 1, ($nb ? $nb : 10));*/$products = $category->getProducts(intval($params['cookie']->id_lang), 0,($nb ? $nb : 10),NULL,NULL,false,true,true,($nb ? $nb : 10) );



Modifica del file Category.php
cercare le due righe dove compare

WHERE cp.`id_category` = '.intval($this->id).($active ? ' AND p.`active` = 1' : '').'


Sostituire SOLTANTO la seconda riga non la prima con

*/WHERE cp.`id_category` = '.intval($this->id).($active ? ' AND p.`active` = 1' : '').'/*
WHERE cp.`id_category` '.($this->id == 0 ? 'LIKE "%"' : '= '.intval($this->id)).($active ? ' AND p.`active` = 1' : '').'



Come vedete ho lasciato la vecchia commentata non si sa mai si voglia tornare indietro.

Ora il modulo sta randomizzando i prodotti in vetrina presenti nella categoria home, ed e' pronto a ruotarli tutti in maniera random.
Per fare questo e' sufficiente agire su una riga del file
homefeatured.php

$category = new Category(1);


Il numero "1" identifica la categoria home, e puo' essere sostituito con qualunque altro identificativo di altre categorie nel caso vogliate fare girare altre categorie in random sulla home.
Adesso per farle girare tutte le categorie random,
modificate la riga di sopra in questa maniera.

$category = new Category(0);


in pratica lo 0 ora identifica tutte le categorie.
NB: Fate attenzione che se qualche prodotto viene duplicato nella vetrina e' perche' e' ancora presente nella categoria home oltre che quella di appartenenza, o perche' e' presente in piu' categorie.
Fatemi sapere se ci sono problemi, e consideratela una modifica in fase di test! ;-)

Link to comment
Share on other sites

Idem.. Non trova prodotti, 0, mentre se lo tolgo in featured e esce uno.

Inoltre faccio notare che ho fatto entrambe le modifiche, sia 1) che 2) e di righe con il codice

*/WHERE cp.`id_category` = '.intval($this->id).($active ? ' AND p.`active` = 1' : '').'/*
WHERE cp.`id_category` '.($this->id == 0 ? 'LIKE "%"' : '= '.intval($this->id)).($active ? ' AND p.`active` = 1' : '').'

ne ho trovate 3 nel file e non due.

inoltre secondo me questo * che c'è piazzato davanti potrebbe essere un errore perchè quando lo incollo, utilizzando DREAWEVER cambia colore la sintassi.

cmq ho modificato e mi scompare l'intero sito. tutto bianco.

Quindi quale occorre usare per avere il FEATURED che mostri in modo random tutti i prodotti.

Non potresti creare un file gia pronto da copiare senza andarea modificare il codice, soprattutto per chi non ci capisce nietne.

GRazie mille cmq per l'interesse.

Link to comment
Share on other sites

Idem.. Non trova prodotti, 0, mentre se lo tolgo in featured e esce uno.

Inoltre faccio notare che ho fatto entrambe le modifiche, sia 1) che 2) e di righe con il codice

*/WHERE cp.`id_category` = '.intval($this->id).($active ? ' AND p.`active` = 1' : '').'/*
WHERE cp.`id_category` '.($this->id == 0 ? 'LIKE "%"' : '= '.intval($this->id)).($active ? ' AND p.`active` = 1' : '').'

ne ho trovate 3 nel file e non due.

inoltre secondo me questo * che c'è piazzato davanti potrebbe essere un errore perchè quando lo incollo, utilizzando DREAWEVER cambia colore la sintassi.

cmq ho modificato e mi scompare l'intero sito. tutto bianco.

Quindi quale occorre usare per avere il FEATURED che mostri in modo random tutti i prodotti.

Non potresti creare un file gia pronto da copiare senza andarea modificare il codice, soprattutto per chi non ci capisce nietne.

GRazie mille cmq per l'interesse.

L'asterisco seguito con lo slash significa che bisogna commentare la riga.
In pratica invece di cancellarla la si commenta.
Visto che ti esce tutto bianco hai un errore di sintassi nel php.
Fai cosi,
1)fai un backup di Category.php
2)Cerca la riga (sono 2 in tutto quindi devi fare 2 sostituzioni)

WHERE cp.`id_category` = '.intval($this->id).($active ? ' AND p.`active` = 1' : '').'

Rimuovila ed al suo posto metti

WHERE cp.`id_category` '.($this->id == 0 ? 'LIKE "%"' : '= '.intval($this->id)).($active ? ' AND p.`active` = 1' : '').'

Io ho testato su prestashop 1.3.1 e mysql

Fammi sapere
Link to comment
Share on other sites

  • 1 year later...

Eccola.. Sciolto l'arcano.

homefeatured.php nn si aggancia di default alla funzione getProducts di Product.php ma di Categories.php che di suo gia' supporta il random.

Per far ruotare in maniera random i prodotti in vetrina attinti dalla categoria Home e' sufficiente modificare cosi' il file homefeatured.php .

Non server aggiungere la funzione Random al file Product.php a meno che nn si voglia usarla nel blocco nuovi prodotti.

Nel file homefeatured.php

$products = $category->getProducts(intval($params['cookie']->id_lang), 1, ($nb ? $nb : 10)); 

Mettete

$products = $category->getProducts(intval($params['cookie']->id_lang), 0,($nb ? $nb : 10),NULL,NULL,false,true,true,($nb ? $nb : 10) );

A me va una bomba.

Ciao ragazzi.

 

Ciao, io su 1.4.4.1 ho modificato come sopra riportato ed effettivamente mi ha mixato i prodotti in home, però aggiornando o rientrando nel sito il risultato è statico....

Non ho toccato nient'altro perché inserisco comunque tutti i prodotti nella categoria home...

Sai dirmi come posso far si che si abbia un ricambio continuo di prodotti?

Grazie in anticipo!!!

Link to comment
Share on other sites

  • 1 year later...

Ciao,

 

il modulo che avete modificato si avvicina molto alle mie esigenze ma io avrei la necessità di un modulo Prodotti casuali in Vetrina il quale rispetti alcuni requisiti:

 

1) possibilità di scegliere il numero di prodotti da determinate categorie.

2) possibilità di attivare/disattivare i prodotti da far ruotare i quali risultano non disponibili o comunque aventi quantità uguale a zero.

3) possibilità di ordinare i prodotti in base al prezzo e far ruotare magari quelli con prezzo migliore

 

Al momento ho trovato diversi moduli free e non free che non soddisfano tutti questi requisiti, forse questo modulo potrebbe fare al mio caso, ma non ne sono sicuro:

http://addons.prestashop.com/en/front-office-features-prestashop-modules/2846-Home-categories-products.html

ma considerando che voi ci siete andati molto vicino, sarebbe da aggiungere una variabile relativa alla scelta delle varie categorie, quindi perchè spendere cifre inutili?

Considerando che non ci capisco molto, qualcuno di voi riesce ad inserire queste features?

 

Apprezzerò molto il vostro suggerimento o aiuto.

Grazie, a presto!

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