Jump to content
  • 0

Tylko produkty "On Sale" (Wyprzedaż) w prices-drop.php


Detro

Question

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

16 answers to this question

Recommended Posts

  • 0

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

  • 0

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 by deejay3 (see edit history)
Link to comment
Share on other sites

  • 0

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 by hering (see edit history)
Link to comment
Share on other sites

  • 0

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

  • 0

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.

  • Like 1
Link to comment
Share on other sites

  • 0

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

  • 0

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

  • 0

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

  • 0

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 by ewul (see edit history)
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...