Jump to content

Modul keresés: termékek a kezdőlapon


gyula21
 Share

Recommended Posts

Sziasztok

Egy olyan modult keresek, ami a termékeim közül random megjelenít 8-at a főoldalon. Tudom, hogy van a PS-be beépítve egy "kiemelt termékek a főoldalon" modul, de én olyat keresek, amely az összes termék közül randomba megjelenít x darabot (mondjuk 8-at) és nem csak a home kategóriához hozzáadottakat

A válaszokat előre is köszönöm

Share this post


Link to post
Share on other sites

Jó ötlet, csak sajnos nem mutatja a képeket illetve csak egy kategóriát enged kiemelni és az alkategóriát nem engedi :/

(pl.: ha kiemelem a "szórakoztató elektronika" kategóriát, akkor csak azokat mutatja amik abban vannak benne, de az alkategóriáit, mint pl.: TV-k, Házimozi rendszerek, stb-ket nem mutatja)

Share this post


Link to post
Share on other sites

akkor próbáld meg ezt:

/modules/homefeatured/homefeatured.php fájlt nyisd meg

 

keresd ki ezt a részt:

 

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

99. sor körül van, majd utána szúrd be ezt:

 

if ($products) { shuffle($products); array_splice($products, ($nb ? $nb : 10)); }

 

és nézzük meg mit mutat!

Edited by pattila01 (see edit history)

Share this post


Link to post
Share on other sites

8 darab is van beállítva vagy több?

 

készítsünk egy új változót 20-as értékkel:

$nb1 = 20;

 

ezt szúrd be a

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

sor elé, majd írjuk át hogy ezt is használja:

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

 

Tehát összességében így:

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

Edited by pattila01 (see edit history)

Share this post


Link to post
Share on other sites

hát nem volt egyszerű de talán sikerült. Ki kell próbálnod hogy lássuk tényleg működik-e.

modules/homefeatured/homefeatured.php-t kell szerkeszteni.

 

Ez után a sor után:

$nb = (int)(Configuration::get('HOME_FEATURED_NBR'));

(valahol a 105. sor környékén) törölj ki mindent (természetesen mentés legyen az eredeti fájlról) és illeszd be az alábbi kódot egészen a végéig:

$products = HomeFeatured::getHProducts(intval($params['cookie']->id_lang), ($nb ? $nb : 100));
if ($products) {
shuffle($products);
array_splice($products, ($nb ? $nb : 100));
}
 $this->smarty->assign(array(
  'products' => $products,
  'add_prod_display' => Configuration::get('PS_ATTRIBUTE_CATEGORY_DISPLAY'),
  'homeSize' => Image::getSize(ImageType::getFormatedName('home')),
 ));
 return $this->display(__FILE__, 'homefeatured.tpl');
}
/**********************************************************************/
public static function getHProducts($id_lang, $nb)
{
$seed = intval(date('ndH'));
 $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('
 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`, m.`name` AS manufacturer_name, 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 AS new,
  (p.`price` * ((100 + (t.`rate`))/100)) AS orderprice, pa.id_product_attribute
 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 OUTER JOIN `'._DB_PREFIX_.'product_attribute` pa ON (p.`id_product` = pa.`id_product` AND `default_on` = 1)
 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`)
 LEFT JOIN `'._DB_PREFIX_.'manufacturer` m ON (m.`id_manufacturer` = p.`id_manufacturer`)
 WHERE p.`active` = 1
ORDER BY RAND('.$seed.') LIMIT '.$nb);
 if (!$result)
  return false;
 $productsIds = array();
 foreach ($result as $row)
  $productsIds[] = $row['id_product'];
 // Thus you can avoid one query per product, because there will be only one query for all the products of the cart
 Product::cacheFrontFeatures($productsIds, $id_lang);
 return Product::getProductsProperties((int)$id_lang, $result);
}
}

 

Természetesen mellékelem az én fájlomat is, ha gondolod akkor csak cseréld ki.

Nézzük meg!

 

Nekem most 8 termék van beállítva mutatásra a modul beállításaiban, és 8 termék is van a shopban (alapból ugye), ebből 4-nél kiszedtem a pipát azért hogy ne legyenek benne a home kategóriában (így imitálva hogy minden kategóriából szedjen termékeket) és random mutassa őket.

Nekem működik, 8 terméket mutat, minden frissítéskor másokat/más sorrendben. Az eredeti kóddal, az eredeti beállításokkal 4-et mutatna sorrendben.

Attila

homefeatured.php

Edited by pattila01 (see edit history)

Share this post


Link to post
Share on other sites

Chromeban tökéletesen fut, firefoxnál meg kapok egy ilyen hibaüzenetet az oldal tetején:

Warning: Function getDefaultCountryId() is deprecated in /wwwroot/modules/homefeatured/homefeatured.php on line 136

in /wwwroot/classes/Tools.php on line 1777

Mitől van ez?

Share this post


Link to post
Share on other sites

megvan mi volt a gond: nem működött a catalog price rules és azt olvastam vhol, hogy ilyenkor a defines.inc.php-ban kell egy értéket módosítani, hogy kiírja, hogy mi a hiba

de miután megoldottam a catalog price rulesnél a hibát elfelejtettem visszaállítani az értéket

Share this post


Link to post
Share on other sites

  • 10 months later...

Haliho!

 

pattila01: letöltöttem amit felraktál file-ot ez önmagában működik is, mint ahogy gyula21 is írta állandóan ugyanazt a 8-at randomolja.

 

Próbáltam beírni a módosítást (amatőr vagyok, tuti én cseszek el valamit), de az után nem jelenik meg a webshop, hiba nélkül üres képernyő marad.

 

Presta 1.5.4 és van theme rajt.

ötlet?

előre is köszönöm!

Share this post


Link to post
Share on other sites

Csak próbaképpen csináld meg:

az utolsó sql lekérdezés-részt (141.sor körül) töröld ki, tehát ez helyett:

...WHERE p.`active` = 1
	ORDER BY RAND('.$seed.') LIMIT '.$nb);
ez legyen csak:

WHERE p.`active` = 1');

Felmásoltam a phpdat, úgy működik, csak nekem is ugyanazokat kevergeti, viszont ha ezt a sort kitörlöm, akkor fehér oldal, error_on-ra sem ír semmi hibát.

Presta 1.5.6.1

Share this post


Link to post
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
 Share

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More