Skip to content
Account LOGIN / REGISTER
Logo TECH-SAS
888 222 994
Pomoc zdalna
  • Twój koszyk 0
    Koszyk Produktów
    • Twój koszyk jest pusty

      W twoim koszyku nie ma produktów. Dalej, uzupełnić ją fakt, że się wam podoba!

      Rozpocznij Zakupy Już teraz
  • Główna
  • O nas
  • SerwisExpand
    • Telefony i TabletyExpand
      • Wymiana ekranów
      • Usuwanie blokad
    • Konsole i kontroleryExpand
      • Wymiana transmittera
      • Naprawa padów XBOX
      • Naprawa padów Playstation
    • DrukarkiExpand
      • Wymiana pochłaniacza
    • LaptopyExpand
      • Wymiana matrycy
    • InformacjeExpand
      • Zgłoszenie naprawy
      • Status zlecenia
  • Dla firmExpand
    • Comarch ERP OptimaExpand
      • Dysk w chmurze iBard
      • Aktualne wersje
      • Formularz zmiany obsługującego Partnera
    • Insert
  • SklepExpand
    • OprogramowanieExpand
      • Dla domu
      • Do firmy
  • Blog
  • Kontakt
Search
Logo TECH-SAS
Home / serwis / Jak wyświetlić więcej produktów w module Blok Promocji w Prestashop

Jak wyświetlić więcej produktów w module Blok Promocji w Prestashop

Od zlecenia się zaczęło.

Przygotowuję sklep internetowy dla klienta i dostosowuję szablon do jego potrzeb. Jedną z takich potrzeb była możliwość wyświetlenia większej ilości produktów w module „Blok promocji” (blockspecials), który zakotwiczony został w lewej kolumnie. Na początku wyglądało to mniej więcej tak: 

Dodam, że sklep oparty o silnik Prestashop w wersji 1.6 na standardowym szablonie default-bootstrap.

Zaczynamy od modyfikacji klasy modułu

W pliku /modules/blockspecials/blockspecials.php jest taka metoda hookRightColumn wygląda ona mniej więcej tak: 

[php] public function hookRightColumn($params) { if (Configuration::get(’PS_CATALOG_MODE’)) return; // We need to create multiple caches because the products are sorted randomly $random = date(’Ymd’).’|’.round(rand(1, max(Configuration::get(’BLOCKSPECIALS_NB_CACHES’), 1))); if (!Configuration::get(’BLOCKSPECIALS_NB_CACHES’) || !$this->isCached(’blockspecials.tpl’, $this->getCacheId(’blockspecials|’.$random))) { if (!($special = Product::getRandomSpecial((int)$params[’cookie’]->id_lang)) && !Configuration::get(’PS_BLOCK_SPECIALS_DISPLAY’)) return; $this->smarty->assign(array( 'special’ => $special, 'priceWithoutReduction_tax_excl’ => Tools::ps_round($special[’price_without_reduction’], 2), 'mediumSize’ => Image::getSize(ImageType::getFormatedName(’medium’)), )); } return $this->display(__FILE__, 'blockspecials.tpl’, (Configuration::get(’BLOCKSPECIALS_NB_CACHES’) ? $this->getCacheId(’blockspecials|’.$random) : null)); }[/php]

Przyglądając się bliżej mamy tutaj fragment kodu który pobiera jeden losowy produkt ze zniżką: 

[php]$special = Product::getRandomSpecial((int)$params[’cookie’]->id_lang)
[/php]

Musimy go nieco zmodyfikować, aby wyświetlił listę produktów objętych promocją

[php] $specials = Product::getPricesDrop((int)$params[’cookie’]->id_lang, 0, 3) [/php]

Skorzystamy tutaj z wbudowanej funkcji getPricesDrop która pobiera listę wszystkich aktywnych produktów z obniżą ceną, oraz stosuje paginację. Ponieważ nie potrzebujemy stronicowania, używamy drugiego parametru, aby poinformować metodę, że chcemy wyświetlić stronę 0 i pobrać np. 3 elementy. Oczywiście, możemy pobrać dowolną liczbę produktów, zmieniając wg. potrzeby ostatni parametr.

Ponieważ zmieniliśmy także nazwę zmiennej na specials, musimy również zmienić następującą część:

[php]$this->smarty->assign(array( 'special’ => $special, 'priceWithoutReduction_tax_excl’ => Tools::ps_round($special[’price_without_reduction’], 2), 'mediumSize’ => Image::getSize(ImageType::getFormatedName(’medium’)), ));[/php]

Zamieniam special na specials i usuwam drugi element tablicy, ponieważ odnosi się do pojedynczej ceny produktu.

[php] $this->smarty->assign(array( 'specials’ => $specials, 'mediumSize’ => Image::getSize(ImageType::getFormatedName(’medium’)), )); [/php]

W tym momencie metoda hookRightColumn powinna wyglądać następująco:

[php] public function hookRightColumn($params) { if (Configuration::get(’PS_CATALOG_MODE’)) return; // We need to create multiple caches because the products are sorted randomly $random = date(’Ymd’).’|’.round(rand(1, max(Configuration::get(’BLOCKSPECIALS_NB_CACHES’), 1))); if (!Configuration::get(’BLOCKSPECIALS_NB_CACHES’) || !$this->isCached(’blockspecials.tpl’, $this->getCacheId(’blockspecials|’.$random))) { if (!($specials = Product::getPricesDrop((int)$params[’cookie’]->id_lang, 0, 3)) && !Configuration::get(’PS_BLOCK_SPECIALS_DISPLAY’)) return; $this->smarty->assign(array( 'specials’ => $specials, 'mediumSize’ => Image::getSize(ImageType::getFormatedName(’medium’)), )); } return $this->display(__FILE__, 'blockspecials.tpl’, (Configuration::get(’BLOCKSPECIALS_NB_CACHES’) ? $this->getCacheId(’blockspecials|’.$random) : null )); } [/php]

Czas na dostosowanie wyglądu

Otwieram plik /themes/default-bootstrap/modules/blockspecials/blockspecials.tpl i mam tam taki oto fragment:

[php]
  • {$special.name|escape:’html’:’UTF-8′}
    {if isset($special.description_short) && $special.description_short}

    {$special.description_short|strip_tags:’UTF-8’|truncate:40}

    {/if}
    {if !$PS_CATALOG_MODE} {if !$priceDisplay} {displayWtPrice p=$special.price}{else}{displayWtPrice p=$special.price_tax_exc} {/if} {if $special.specific_prices} {assign var=’specific_prices’ value=$special.specific_prices} {if $specific_prices.reduction_type == 'percentage’ && ($specific_prices.from == $specific_prices.to OR ($smarty.now|date_format:’%Y-%m-%d %H:%M:%S’ <= $specific_prices.to && $smarty.now|date_format:'%Y-%m-%d %H:%M:%S' >= $specific_prices.from))} -{$specific_prices.reduction*100|floatval}% {/if} {/if} {if !$priceDisplay} {displayWtPrice p=$special.price_without_reduction}{else}{displayWtPrice p=$priceWithoutReduction_tax_excl} {/if} {hook h=”displayProductPriceBlock” product=$special type=”price”} {/if}
  • [/php]

    Najpierw usunąłem krótki opis gdyż jest on wg. mnie tam zupełnie niepotrzebny:

    [php] {if isset($special.description_short) && $special.description_short}

    {$special.description_short|strip_tags:’UTF-8’|truncate:40}

    {/if} [/php]

    Następnie skróciłem tytuł do 50 znaków:

    [php] {$special.name|escape:’html’:’UTF-8’|truncate:50} [/php]

    I co najważniejsze dodana została pętla foreach. Mój kod wygląda teraz tak: 

    [php] {foreach from=$specials item=special}
  • {$special.name|escape:’html’:’UTF-8’|truncate:50}
    {if !$PS_CATALOG_MODE} {if !$priceDisplay} {displayWtPrice p=$special.price}{else}{displayWtPrice p=$special.price_tax_exc} {/if} {if $special.specific_prices} {assign var=’specific_prices’ value=$special.specific_prices} {if $specific_prices.reduction_type == 'percentage’ && ($specific_prices.from == $specific_prices.to OR ($smarty.now|date_format:’%Y-%m-%d %H:%M:%S’ <= $specific_prices.to && $smarty.now|date_format:'%Y-%m-%d %H:%M:%S' >= $specific_prices.from))} -{$specific_prices.reduction*100|floatval}% {/if} {/if}
    {if !$priceDisplay} {displayWtPrice p=$special.price_without_reduction}{else}{displayWtPrice p=$priceWithoutReduction_tax_excl} {/if} {hook h=”displayProductPriceBlock” product=$special type=”price”} {/if}
  • {/foreach} [/php]

    Efekt pracy: 

    Nawigacja wpisu

    Previous Previous
    Już jest nowa wersja Comarch ERP Optima 2019.0.1
    NextContinue
    Nowa wersja Comarch ERP Optima 2019.1.1!

    Similar Posts

    serwis

    Uwaga na reklamy umożliwiające pobranie Bard AI od Google

    ByTadeusz 2023-05-02

    „Ai” rozwija się imponująco. Wyścig trwa. Dziś na Facebooku (i możliwe ze każdemu, kto interesuje się tematem) pokazała się reklama:

    Read More Uwaga na reklamy umożliwiające pobranie Bard AI od GoogleContinue

    serwis

    Wymiana matrycy w laptopie DELL Latitude E6420

    ByTadeusz 2019-10-16

    Dziś w serwisie… Laptop Dell Latitude E6420 z pękniętą matrycą. Usługa polegała na wymianie uszkodzonej matrycy na nową.

    Read More Wymiana matrycy w laptopie DELL Latitude E6420Continue

    serwis

    Naprawa Xiaomi Redmi Go M1903C3GG

    ByTadeusz 2020-05-14

    W Xiaomi Redmi Go M1903C3GG naprawialiśmy niedziałający włącznik.

    Read More Naprawa Xiaomi Redmi Go M1903C3GGContinue

    serwis

    Wymiana dotyku w LG K3 K100ds

    ByTadeusz 2017-09-26

    LG K3 (K100ds) z pękniętym dotykiem. Naprawa polegała na wymienia wadliwego elementu. 

    Read More Wymiana dotyku w LG K3 K100dsContinue

    serwis

    Wymiana ekranu w Xiaomi Redmi 9A (M2006C3LG)

    ByTadeusz 2022-06-04

    Xiaomi Redmi 9A o oznaczeniu M2006C3LG na naszym stole serwisowym. Wymieniliśmy stłuczony ekran na nowy.

    Read More Wymiana ekranu w Xiaomi Redmi 9A (M2006C3LG)Continue

    serwis

    Naprawa Asus X551C – programowanie BIOS

    ByTadeusz 2020-05-02

    Do mojego serwisu trafił laptop Asus X551C. Klient zgłosił problem z uruchamianiem się urządzenia. Po naciśnięciu przycisku zaświecała się dioda i po chwil gasła nie pokazując nic na ekranie.

    Read More Naprawa Asus X551C – programowanie BIOSContinue

    Poszukaj coś…

    Search

    aktualizacja antywirus apple asus bateria Bitdefender blokada blow chłodzenie comarch czyszczenie czyszczenie laptopa doogee dotyk eset FRP galaxy huawei insert instalacja iphone laptop Lenovo LG motorola naprawa nokia optima php prestashop program do faktur programowanie płatnik redmi samsung serwis smartfon sony subiekt szybka Tablet telefon wyświetlacz xbox xiaomi

    Logo TECH-SAS
    • Moje konto
    • Polityka Prywatności
    • Regulamin sklepu internetowego
    F.U.H. TECH-SAS Tadeusz Sasnal
    Żydów 2a
    32-125 Wawrzeńczyce

    © 2026 TECH-SAS Usługi informatyczne

    Wykonanie strony: wyrób własny

    Scroll to top
    • Główna
    • O nas
    • Serwis
      • Telefony i Tablety
        • Wymiana ekranów
        • Usuwanie blokad
      • Konsole i kontrolery
        • Wymiana transmittera
        • Naprawa padów XBOX
        • Naprawa padów Playstation
      • Drukarki
        • Wymiana pochłaniacza
      • Laptopy
        • Wymiana matrycy
      • Informacje
        • Zgłoszenie naprawy
        • Status zlecenia
    • Dla firm
      • Comarch ERP Optima
        • Dysk w chmurze iBard
        • Aktualne wersje
        • Formularz zmiany obsługującego Partnera
      • Insert
    • Sklep
      • Oprogramowanie
        • Dla domu
        • Do firmy
    • Blog
    • Kontakt