Detro Posted March 13, 2013 Share Posted March 13, 2013 Chciałbym aby w podstronie twoja-domena.pl/prices-drop.php wyświetlały się tylko produkty oznaczone "Wyprzedaż" (z wartością "on_sale") Jestem już prawie u celu, ponieważ znalazłem kod do podmienienia w pliku classes/Product.php chodzi o dodanie wartości "AND p.on_sale = 1" /** * Get prices drop * * @param integer $id_lang Language id * @param integer $pageNumber Start from (optional) * @param integer $nbProducts Number of products to return (optional) * @param boolean $count Only in order to get total number (optional) * @return array Prices drop */ public static function getPricesDrop($id_lang, $page_number = 0, $nb_products = 10, $count = false, $order_by = null, $order_way = null, $beginning = false, $ending = false, Context $context = null) { if (!Validate::isBool($count)) die(Tools::displayError()); if (!$context) $context = Context::getContext(); if ($page_number < 0) $page_number = 0; if ($nb_products < 1) $nb_products = 10; if (empty($order_by) || $order_by == 'position') $order_by = 'price'; if (empty($order_way)) $order_way = 'DESC'; if ($order_by == 'id_product' || $order_by == 'price' || $order_by == 'date_add') $order_by_prefix = 'p'; else if ($order_by == 'name') $order_by_prefix = 'pl'; if (!Validate::isOrderBy($order_by) || !Validate::isOrderWay($order_way)) die (Tools::displayError()); $current_date = date('Y-m-d H:i:s'); $ids_product = Product::_getProductIdByDate((!$beginning ? $current_date : $beginning), (!$ending ? $current_date : $ending), $context); $tab_id_product = array(); foreach ($ids_product as $product) if (is_array($product)) $tab_id_product[] = (int)$product['id_product']; else $tab_id_product[] = (int)$product; $front = true; if (!in_array($context->controller->controller_type, array('front', 'modulefront'))) $front = false; $groups = FrontController::getCurrentCustomerGroups(); $sql_groups = (count($groups) ? 'IN ('.implode(',', $groups).')' : '= 1'); if ($count) { $sql = 'SELECT COUNT(DISTINCT p.`id_product`) AS nb FROM `'._DB_PREFIX_.'product` p '.Shop::addSqlAssociation('product', 'p').' WHERE product_shop.`active` = 1 AND product_shop.`show_price` = 1 '.($front ? ' AND product_shop.`visibility` IN ("both", "catalog")' : '').' '.((!$beginning && !$ending) ? 'AND p.`id_product` IN('.((is_array($tab_id_product) && count($tab_id_product)) ? implode(', ', $tab_id_product) : 0).')' : '').' 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` '.$sql_groups.' )'; $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow($sql); return (int)$result['nb']; } if (strpos($order_by, '.') > 0) { $order_by = explode('.', $order_by); $order_by = pSQL($order_by[0]).'.`'.pSQL($order_by[1]).'`'; } $sql = 'SELECT p.*, product_shop.*, stock.out_of_stock, IFNULL(stock.quantity, 0) as quantity, pl.`description`, pl.`description_short`, product_attribute_shop.id_product_attribute, pl.`link_rewrite`, pl.`meta_description`, pl.`meta_keywords`, pl.`meta_title`, pl.`name`, image_shop.`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 FROM `'._DB_PREFIX_.'product` p '.Shop::addSqlAssociation('product', 'p').' LEFT JOIN '._DB_PREFIX_.'product_attribute pa ON (pa.id_product = p.id_product) '.Shop::addSqlAssociation('product_attribute', 'pa', false, 'product_attribute_shop.default_on=1').' '.Product::sqlStock('p', 0, false, $context->shop).' LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON ( p.`id_product` = pl.`id_product` AND pl.`id_lang` = '.(int)$id_lang.Shop::addSqlRestrictionOnLang('pl').' ) LEFT JOIN `'._DB_PREFIX_.'image` i ON (i.`id_product` = p.`id_product`)'. Shop::addSqlAssociation('image', 'i', false, 'image_shop.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 (product_shop.`id_tax_rules_group` = tr.`id_tax_rules_group` AND tr.`id_country` = '.(int)Context::getContext()->country->id.' 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 product_shop.`active` = 1 AND p.on_sale = 1 AND product_shop.`show_price` = 1 AND ((image_shop.id_image IS NOT NULL OR i.id_image IS NULL) OR (image_shop.id_image IS NULL AND i.cover=1)) AND (pa.id_product_attribute IS NULL OR product_attribute_shop.default_on = 1) ORDER BY '.(isset($order_by_prefix) ? pSQL($order_by_prefix).'.' : '').pSQL($order_by).' '.pSQL($order_way).' LIMIT '.(int)($page_number * $nb_products).', '.(int)$nb_products; $result += Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($another_sql); if ($order_by == 'price') Tools::orderbyPrice($result, $order_way); if (!$result) return false; return Product::getProductsProperties($id_lang, $result); } po podmienieniu kodu nie wyświetlają się wgl produkty w twoja-domena.pl/prices-drop.php Czy ma ktoś jakiś pomysł jak rozwiązać ten problem? Link to comment Share on other sites More sharing options...
0 vekia Posted March 13, 2013 Share Posted March 13, 2013 Chciałbym aby w podstronie twoja-domena.pl/prices-drop.php wyświetlały się tylko produkty oznaczone "Wyprzedaż" (z wartością "on_sale") Jestem już prawie u celu, ponieważ znalazłem kod do podmienienia w pliku classes/Product.php chodzi o dodanie wartości "AND p.on_sale = 1" po podmienieniu kodu nie wyświetlają się wgl produkty w twoja-domena.pl/prices-drop.php Czy ma ktoś jakiś pomysł jak rozwiązać ten problem? mało tu widać hehe Możesz podać wersję prestashop? Link to comment Share on other sites More sharing options...
0 design4VIP Posted June 28, 2013 Share Posted June 28, 2013 (edited) czy to 1.4 czy 1.5 tak czy siac trzeba zmienic classe Product.php piszesz ze dodales AND..... no i ok, pod warunkiem, ze masz produkt zarowno w promocji jak i (AND) z zaznaczonym "wyprzedaz". czyli produkty z sama promocja i zama wyprzedarza nie beda wyswietlane a wystarczy dac promocje LUB wyprzedaze (OR) i masz to i to. jezeli chcesz tylko wyprzedaze to musisz wyeliminowac produkty z promocji i wywalic je z zapytania SQL, ewentualnie tak jak wyzej, dodaj AND i pozniej jako dalszy ciag zapytania OR, pamietajac o warunkach dla produktow aktuwnych, wyswietlanaia cen itp. zasadnoczo mozna calosc zalatwic 4 linijkami Edited June 28, 2013 by deejay3 (see edit history) Link to comment Share on other sites More sharing options...
0 hering Posted December 30, 2013 Share Posted December 30, 2013 (edited) Wyświetlanie listy wyprzedawanych produktów (tyko wyprzedaż). Sam się z tym problemem zmagałem, a że nigdzie nie ma prostej i jasnej pomocy więc dla potomnych (PrestaShop 1.5.5.0): Wejść w panelu administracyjnym do Moduły > Moduły znaleźć "Górne menu poziome" wejść w "konfiguruj" i w "Dodaj linki górnego menu" w "Odnośnik": adres_strony/index.php?controller=prices-drop2 --- Skopiować prices-drop.php zmieniając nazwę na prices-drop2.php Zmienić w nowym pliku prices-drop na prices-drop2 Skopiować themes/default/prices-drop.tpl zmieniając nazwę na prices-drop2.tpl Zmienić w nowym pliku price drop na On Sale (3szt.) Wejść w panelu administracyjnym do Lokalizacja > Tłumaczenia wybrać odpowiednią flagę, znaleźć prices-drop2 i uzupełnić tłumaczenie Skopiować controllers/front/PricesDropController.php zmieniając nazwę na PricesDrop2Controller.php Zmienić w nowym pliku wszystkie prices-drop na prices-drop2 (2szt.) oraz PricesDrop na PricesDrop2 (3szt.) --- W classes/Product.php pod metodą "public static function getPricesDrop" wkleić dodatkową metodę: public static function getPricesDrop2($id_lang, $pageNumber = 0, $nbProducts = 10, $count = false, $orderBy = NULL, $orderWay = NULL, $onSale = false) { if (!Validate::isBool($count)) die(Tools::displayError()); if ($pageNumber < 0) $pageNumber = 0; if ($nbProducts < 1) $nbProducts = 10; if (empty($orderBy) || $orderBy == 'position') $orderBy = 'price'; 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()); $count == true; if ($count) { $sql = ' SELECT COUNT(DISTINCT p.`id_product`) AS nb FROM `'._DB_PREFIX_.'product` p WHERE p.`active` = 1 AND p.`show_price` = 1 AND p.`on_sale` = 1 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`) )'; $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow($sql); return (int)($result['nb']); } $sql = ' 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 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`) LEFT JOIN `'._DB_PREFIX_.'manufacturer` m ON (m.`id_manufacturer` = p.`id_manufacturer`) WHERE 1 AND p.`active` = 1 AND p.`show_price` = 1 AND p.`on_sale` = 1 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`) ) ORDER BY '.(isset($orderByPrefix) ? pSQL($orderByPrefix).'.' : '').'`'.pSQL($orderBy).'`'.' '.pSQL($orderWay).' LIMIT '.(int)($pageNumber * $nbProducts).', '.(int)($nbProducts); $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS($sql); if($orderBy == 'price') Tools::orderbyPrice($result,$orderWay); if (!$result) return false; return Product::getProductsProperties($id_lang, $result); } Edited January 10, 2014 by hering (see edit history) Link to comment Share on other sites More sharing options...
0 And63 Posted December 30, 2013 Share Posted December 30, 2013 (edited) Ja bym użył raczej operatora AND zamiast OR , ewentualnie w prices-drop.tpl wstawił warunek {if} $product.on_sale!=1 style="display:none" {/if} Edited December 30, 2013 by And63 (see edit history) Link to comment Share on other sites More sharing options...
0 vekia Posted December 30, 2013 Share Posted December 30, 2013 hmm a jakie było pytanie, bo zdążyłem się tylko załapać na: Link to comment Share on other sites More sharing options...
0 hering Posted December 30, 2013 Share Posted December 30, 2013 Chłopaki, dzięki za superszybką reakcję. Przepraszam za zamieszanie ale po niedługim czasie po napisaniu posta wpadłem na pomysła ;-) Chciałem skasować wiadomość ale chyba nie da rady więc ją wyczyściłem, a po przetestowaniu pomysła wstawiłem instrukcję. Na pewno uda mi się Was jeszcze "wykorzystać" ;-) Link to comment Share on other sites More sharing options...
0 And63 Posted December 30, 2013 Share Posted December 30, 2013 Chłopaki, dzięki za superszybką reakcję. Przepraszam za zamieszanie ale po niedługim czasie po napisaniu posta wpadłem na pomysła ;-) Chciałem skasować wiadomość ale chyba nie da rady więc ją wyczyściłem, a po przetestowaniu pomysła wstawiłem instrukcję. Na pewno uda mi się Was jeszcze "wykorzystać" ;-) Nie ma sprawy - czasem też tak mam - jeśli pomysł się sprawdził -podaj rozwiązanie, będzie dla innych gotowe. Skoro Ty chcesz mieć coś takiego, to na pewno znajdzie się następna osoba, która poszukuje takiego rozwiązania. 1 Link to comment Share on other sites More sharing options...
0 hering Posted December 30, 2013 Share Posted December 30, 2013 (edited) No i kicha. Po aktualizacji z 1.5.5.0 do 1.5.6.1 sposób przestał działać. Edited January 11, 2014 by hering (see edit history) Link to comment Share on other sites More sharing options...
0 ewul Posted January 4, 2015 Share Posted January 4, 2015 odkopie kotleta, zaimplementowałem kod wdł instrukcji i działa (presta 1,5,4) ale pod linkiem: twoja-domena.pl/prices-drop2 jak zrobić żeby działał pod modułem czyli pod linkiem: twoja-domena.pl/prices-drop Link to comment Share on other sites More sharing options...
0 design4VIP Posted January 5, 2015 Share Posted January 5, 2015 No i kicha. Po aktualizacji z 1.5.5.0 do 1.5.6.1 sposób przestał działać. no tak bywa jak sie robi zmiany silnika bezposrednio w klasach czy kontrolerach. takich zmian dokonuj przez katalog ./override i aktualizacja im nie grozi Link to comment Share on other sites More sharing options...
0 design4VIP Posted January 5, 2015 Share Posted January 5, 2015 odkopie kotleta, zaimplementowałem kod wdł instrukcji i działa (presta 1,5,4) ale pod linkiem: twoja-domena.pl/prices-drop2 jak zrobić żeby działał pod modułem czyli pod linkiem: twoja-domena.pl/prices-drop co ma "kotlet" do modulu prices-drop to nie modul tylko strona PS. jak chcesz zeby dzialalo bezposrednio pod wskazanym linkiem to albo wg powyzszego tworzysz nowy plik i kopiujesz zawartosc, dalej w ustawieniach URL zmianiasz friendly z '2' na bez i oryginalnego zmieniasz z bez na '2' i masz je zamienione. albo nie tworzysz pliku i wszystkie zmiany dokonujesz w oryginalnym pliku proces-drop tracac przy tym oryginalna funkcjonalnosc. Link to comment Share on other sites More sharing options...
0 ewul Posted January 6, 2015 Share Posted January 6, 2015 OK , Dzięki Panowie za pomoc, działa, ale pojawił się inny problem; chce włączyć przekreślone ceny (w promocji) do wszystkich produktów w sklepie i po przekroczeniu ok 10 000 produktów skep zwolnił niemal do zera strona ładuję się chyba z 2 minuty, oczywiście teraz wyłączyłem ceny promocyjne i zastanawiam się jak to naprawić i czy wogule jest to możliwe w prescie dla tekiej liczby produktów (obecnie ok 38 000), ew. zastanawiam się czy można zaimplementować stałą przekreśloną cenę powiększoną o np.10%, wyświetlać ją z produkt list .tpl, tylko gdzie dodać parametr cena * 10%? Link to comment Share on other sites More sharing options...
0 design4VIP Posted January 6, 2015 Share Posted January 6, 2015 ew. zastanawiam się czy można zaimplementować stałą przekreśloną cenę powiększoną o np.10%, wyświetlać ją z produkt list .tpl, tylko gdzie dodać parametr cena * 10%? daj rabat na plus dla grup klientow Link to comment Share on other sites More sharing options...
0 ewul Posted January 6, 2015 Share Posted January 6, 2015 tylko że w presta nie można dodać dodatniego rabatu, co do grup nie bardzo rozumiem, wcześniej dodawałem rabat do wszytskich grup (odwiedzający, gość, klient) Link to comment Share on other sites More sharing options...
0 ewul Posted January 6, 2015 Share Posted January 6, 2015 (edited) Zauważyłem że do każdej ceny jes nowe ID, być może serwer ma już dość (38 tyś produktów niektóre z atrybutami + 50 tyś kategorii) napisałem takie coś w produkt-list.tpl, ale nie działa, pomoże ktoś? ma TYLKO wyświetlać cenę powiększoną o 10% od ceny bazowej {if $product.price} {math equation="a*110%" a=$product.price} {convertPrice price=$pricedisplay} {$product.convertPrice} {/if} edit: zamieniłem % na ułamek i działa, ale nie do końca wkleiłem takie coś: {if $product.price} {math equation="a*1.1" a=$product.price} {convertPrice price=$price_without_reduction} {$product.convertPrice} {/if} tylko że nie moge edytować czcionki ceny bo razem z nią zmienia się czcionka krótkiego opisu, jak to rozdzielić? edit na zakończenie monologu załączam kod może się komuś przyda: wstawiamy po else (wyświetla przekreśloną cene zamiennie z przekreśloną ceną z promocji), wygląd bierze z product list css, z załaczonego wcześniej kodu po else: <div> {$product.without_reduction} <span class="old_price_productlist"> {math equation="a*1.1" a=$product.price} {l s="zł"} <style="height:2px;"> </div> wygląda to tak: http://topbrakes.pl/58411-1984-1989 Edited January 6, 2015 by ewul (see edit history) Link to comment Share on other sites More sharing options...
0 MarioCCH Posted September 16, 2015 Share Posted September 16, 2015 (edited) Panowie czy możliwość odseparowania produktów w "wyprzedaży" zadziała również w prestashop 1.6.1 ? Chciałbym o ile to możliwe wykorzystać oryginalne funkcjonalności.. Podpowiedziałby ktoś jak to wykonać ? Edited September 16, 2015 by MarioCCH (see edit history) 1 Link to comment Share on other sites More sharing options...
Question
Detro
Chciałbym aby w podstronie twoja-domena.pl/prices-drop.php
wyświetlały się tylko produkty oznaczone "Wyprzedaż" (z wartością "on_sale")
Jestem już prawie u celu, ponieważ znalazłem kod do podmienienia w pliku classes/Product.php
chodzi o dodanie wartości "AND p.on_sale = 1"
po podmienieniu kodu nie wyświetlają się wgl produkty w twoja-domena.pl/prices-drop.php
Czy ma ktoś jakiś pomysł jak rozwiązać ten problem?
Link to comment
Share on other sites
16 answers to this question
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now