Skip to content
Logo TECH-SAS
888 222 994
Pomoc zdalna
  • 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
    • ESET dla firmExpand
      • ESET Protect Entry
      • ESET Protect Advanced
      • ESET PROTECT Complete
  • SklepExpand
    • ProgramyExpand
      • AnyDesk
      • Bitdefender
      • G Data
      • ESET
      • Comarch
      • InsERT
      • Microsoft
  • Blog
  • Kontakt
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

    Poprzednie Poprzednie
    Już jest nowa wersja Comarch ERP Optima 2019.0.1
    DalejContinue
    Nowa wersja Comarch ERP Optima 2019.1.1!

    Podobne wpisy

    serwis

    Nowy cennik Abonamentów na aktualizacje

    ByTadeusz 2023-08-01

    Od 2 sierpnia 2023 zacznie obowiązywać nowy cennik Abonamentów na aktualizacje programów InsERT nexo/nexo PRO oraz InsERT GT.

    Read More Nowy cennik Abonamentów na aktualizacjeContinue

    serwis

    Otwieranie portów w routerze Netgear SRX5308

    ByTadeusz 2015-12-31

    Standardowa procedura: Logujemy się do routera Przechodzimy na zakładkę Security -> Firewall (Opcjonalnie) Definiujemy usługę w zakładce Services Dodajemy usługę w obszarze Inbound Services

    Read More Otwieranie portów w routerze Netgear SRX5308Continue

    serwis

    Naprawa Samsung Galaxy S10e SM-G970

    ByTadeusz 2021-05-21

    W Samsung Galaxy S10e o oznaczeniu SM-G970 wymienialiśmy pęknięte plecki oraz wadliwy buzzer – głośnik, który bzyczał gdy się pogłośniło na max.

    Read More Naprawa Samsung Galaxy S10e SM-G970Continue

    serwis

    Wymiana dotyku w tablecie Kiano Slim Tab 7 3GR

    ByTadeusz 2017-09-27

    Kiano Slim Tab 7 3GR z pękniętym dotykiem. Naprawa polegała na wymienia wadliwego elementu.

    Read More Wymiana dotyku w tablecie Kiano Slim Tab 7 3GRContinue

    serwis

    Konserwacja OKI C610dn

    ByTadeusz 2018-06-20

    Czyszczenie i konserwacja drukarki OKI C610dn. W drukarce był rozsypany toner oraz często dochodziło do zacięcia się papieru. Po przeprowadzeniu konserwacji urządzenie pracuje już bez zarzutu 🙂 

    Read More Konserwacja OKI C610dnContinue

    serwis

    Wymiana ekranu w Samsung Galaxy J5 (SM-J530F)

    ByTadeusz 2020-05-26

    Wymiana ekranu w Samsung Galaxy J5 ? Nic prostszego. Poniżej zdjęcia z wymiany w czarnym oraz złotym egzemplarzu.

    Read More Wymiana ekranu w Samsung Galaxy J5 (SM-J530F)Continue

    Dodaj komentarz Anuluj pisanie odpowiedzi

    Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

    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 szybka Tablet telefon temperatura vivo wyświetlacz xiaomi

    Logo TECH-SAS
    F.U.H. TECH-SAS Tadeusz Sasnal
    Żydów 2a
    32-125 Wawrzeńczyce

    © 2025 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
      • ESET dla firm
        • ESET Protect Entry
        • ESET Protect Advanced
        • ESET PROTECT Complete
    • Sklep
      • Programy
        • AnyDesk
        • Bitdefender
        • G Data
        • ESET
        • Comarch
        • InsERT
        • Microsoft
    • Blog
    • Kontakt