Jump to content

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


gyula21

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

Link to comment
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)

Link to comment
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)
Link to comment
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)
Link to comment
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)
Link to comment
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?

Link to comment
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

Link to comment
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!

Link to comment
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

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