Univerzální modul pro správu vyskakovacích oken (modalů) a informačních barů pro Nette Framework.
Instalace
composer require czechgroup/modal-popup
Konfigurace
Přidejte do konfigurace aplikace (config/common.neon):
extensions:
modalPopup: Czechgroup\ModalPopup\DI\ModalPopupExtension
modalPopup:
# ID menu, ze kterého se načítají položky pro modaly/bary (povinné)
menuId: 17
# ID supplementu, který určuje typ - modal/bar (povinné)
typeSupplementId: 42
# ID supplementu, který určuje šablonu (volitelné)
templateSupplementId: 43
# ID supplementu pro custom delay v sekundách (volitelné)
delaySupplementId: 44
# ID supplementu pro custom expiraci cookie v hodinách (volitelné)
expirationSupplementId: 45
# ID supplementu pro perex (volitelné)
perexSupplementId: 8
# ID supplementu pro text tlačítka (volitelné)
# Tlačítko odkazuje na URL položky (viz linkService)
buttonTextSupplementId: 5
# ID supplementu pro nastavení, zda kliknutí na tlačítko zastaví zobrazování modalu (volitelné)
# Hodnota supplementu: "1"/"true"/"yes"/"ano" = zastaví, jinak ne
buttonStopsShowingSupplementId: 110
# Výchozí hodnota pro buttonStopsShowing, pokud není nastaveno přes supplement (výchozí: true)
buttonStopsShowingDefault: true
# Pattern pro cestu k obrázku - <id> bude nahrazeno skutečným ID menu_item
imagePathPattern: '/userfiles/menuitem/big/img-<id>-4.jpg'
# Služba pro generování odkazů (volitelné)
# Používá se pro generování URL tlačítka z url položky
linkService: Filters\Link
# Výchozí delay v sekundách (výchozí: 5)
defaultDelay: 5
# Výchozí expirace cookie v hodinách (výchozí: 8760 = 1 rok)
defaultExpiration: 8760
# Mapování typů na šablony
templates:
modal: 'modal.latte'
bar: 'bar.latte'
header-bar: 'header-bar.latte'
# Cesta k custom šablonám v projektu (přepisuje výchozí)
customTemplatePath: '%appDir%/presenters/Front/templates/components/modalPopup'
Použití
1. Registrace komponenty v presenteru
// BasePresenter.php
use Czechgroup\ModalPopup\Control\ModalPopupControl;
use Czechgroup\ModalPopup\Control\ModalPopupControlFactory;
abstract class BasePresenter extends Presenter
{
#[Inject]
public ModalPopupControlFactory $modalPopupFactory;
protected function createComponentModalPopup(): ModalPopupControl
{
$control = $this->modalPopupFactory->create();
$control->setLang($this->lang); // nastavení aktuálního jazyka
return $control;
}
}
2. Vykreslení v šabloně
V @layout.latte nebo jiné šabloně:
3. Přidání SCSS stylů
Importujte SCSS soubory do svého projektu nebo jej zkopírujte do svého projektu:
V případě kopírování nastavte proměnné v souboru _variables.scss. Jinak upravte ve svém SCSS souboru před importem z vendoru.
4. Přidání JavaScriptu
Zkopírujte soubor assets/js/modal-popup.js do svého projektu a načtěte ho:
JavaScript se automaticky inicializuje, pokud najde globální proměnnou _modalPopupConfig, kterou generuje komponenta.
Databázová struktura
Modul očekává následující tabulky:
menu_item
menu_item_x_supplement
supplement
Filtrování položek
Modul automaticky filtruje položky podle:
hidden = 0- pouze viditelné položkydate_enable- pokud je nastaveno, položka se zobrazí až po tomto datudate_disable- pokud je nastaveno, položka se přestane zobrazovat po tomto datuposition- položky s vyšší pozicí překrývají položky s nižší pozicí (vyšší z-index)
Supplementy
Modul používá supplementy pro nastavení jednotlivých položek:
| Supplement | Popis | Příklad hodnoty |
|---|---|---|
| Typ | Určuje typ položky | modal, bar, header-bar |
| Šablona | Název šablony (volitelné) | newsletter, promo, header-bar |
| Perex | Krátký popis pro bary | Akce: sleva 20%! |
| Delay | Zpoždění zobrazení v sekundách | 10 |
| Expirace | Expirace cookie v hodinách | 24 |
| Detail | Tlačítka (Text:::URL na řádku) | Více info:::https://... |
| Text tlačítka | Text tlačítka v modalu | Zjistit více |
| Button stops showing | Zda tlačítko zastaví zobrazování | 1, true, yes, ano |
Tlačítko v modalu
Modul podporuje zobrazení tlačítka v modalu s následující logikou:
- Text tlačítka - načítá se ze supplementu (
buttonTextSupplementId) - URL tlačítka - generuje se z
urlpoložky pomocílinkService(pokud je nakonfigurováno) - Chování po kliknutí - lze nastavit, zda kliknutí na tlačítko:
- Uloží cookie a zastaví další zobrazování modalu (
buttonStopsShowing: true) - Pouze zavře modal bez uložení cookie (
buttonStopsShowing: false)
- Uloží cookie a zastaví další zobrazování modalu (
Tlačítko používá CSS třídy button button--brand z vašeho projektu.
Typy barů
Modul obsahuje dva typy informačních lišt:
Bar (výchozí)
- Pozice: Fixovaný dole na stránce
- Šablona:
bar.latte - CSS třída:
.bar - Animace: Vysouvá se zespodu
Header Bar
- Pozice: Pod hlavičkou stránky (není fixovaný)
- Šablona:
header-bar.latte - CSS třída:
.header-bar - Animace: Vysouvá se shora
- Použití: Ideální pro upozornění zobrazená hned pod navigací
Pro použití header-bar nastavte v supplementu Typ hodnotu header-bar nebo použijte šablonu header-bar.
Obrázky
Obrázky se načítají pomocí patternu definovaného v konfiguraci:
imagePathPattern: '/userfiles/menuitem/big/img-<id>-4.jpg'<id>je nahrazeno skutečným ID menu_item
Přepsání šablon
Vytvořte soubory v cestě definované v customTemplatePath:
V případě, že je nadefinovaný customTemplatePath, pak je šablona nejprve hledána zde a poté případně až v defaultTemplatePath.
Dostupné proměnné v šablonách
V custom šablonách se doporučuje includovat templateType:
Cookie logika
- Po zavření modalu/baru se uloží cookie s hashem obsahu
- Pokud se obsah změní (jiný hash), modal se znovu zobrazí
- Expirace je konfigurovatelná globálně i per-položka
- Kliknutí na tlačítko může (dle nastavení) také uložit cookie
Z-index a překrývání
Modaly s vyšší hodnotou position překrývají modaly s nižší hodnotou:
position: 1→ z-index: 10000position: 2→ z-index: 10001- atd.
JavaScript API
Integrace s custom_modal.js
Pokud máte v projektu custom_modal.js, modul automaticky použije jeho API:
element.customModal().openModal()element.customModal().closeModal()
Pokud custom_modal.js není k dispozici, použije se fallback s display: block/none.
SCSS proměnné
Můžete přepsat následující proměnné před importem SCSS:
Licence
Proprietary - CZECHGROUP