wakers / cms-base-module
Base module of Wakers CMS 5
1.0.3-alpha
2020-08-01 00:23 UTC
This package is auto-updated.
Last update: 2024-11-29 06:28:26 UTC
README
Základní modul celé aplikace, obsahuje společné třídy, komponenty, assety, atp. Spojuje celou aplikaci.
Namespace: Wakers\BaseModule\<folder>\*
.
Vzorová třída: Wakers\BaseModule\Component\Admin\BreadCrumb\BreadCrumb
Komponenty
Admin (site-manager)
Admin\BaseControl
- Předek všech Admin komponent - napříč celou aplikací (všechny Admin komponenty od něj dědí).Admin\NavBar
- generuje navigační (dropdown) menu v site-manageru.Admin\Bradcrumb
- generuje drobečkové menu v site-manageru.
Common (společné Admin i Frontend)
Common\BaseControl
- Předek všech Common komponent - napříč celou aplikací (všechny Common komponenty od něj dědí).Common\AssetLoader
- zajištuje načítání JS, CSS, Fontů a dalších statických souborů.Common\Logout (HandleLogout)
- zajištuje odhlašování uživatelů.Common\Modal (HandleModalToggle)
- zajištuje otevírání modálních oken skrze PHP.Common\Notification
- zajištuje výpis notifikací skrze PHP.Common\PermissionWatcher
- porovnává identitu přihlášeného uživatele (zda-li nebyla změněna v DB).
Frontend
Frontend\BaseControl
- Předek všech Frontend komponent - napříč celou aplikací (všechny Frontend komponenty od něj dědí).Frontend\DashboardModal
- modální okno s Dashboardem (sestaví podle použitých modulů - dle app.neonparameters.dashboard
).
Buildery
ACL Builder
Builder\AclBuilderFactory
- registuje celý ACL do DI podle použitých modulů.Builder\AuthorizatorBuilder
- předek všech Authorizátorů (osatatní od něj musí dědit).
Každý modulový Authorizator se musí registrovat v config.neon v sekci parameters.acl
.
Presenter a layout
Pro všechny modulové AdminPresentry - napříč celou aplikací existuje předek Presenter\BaseAdminPresenter
.
Presenter\BaseAdminPresenter
načítá výchozí layout:@layout.latte
, v modulech lze tedy používat pouze view.Presenter\AdminPresenter
- Admin presenter pro base-module (lze zde registrovat komponenty pro base-module).
Util
Ajaxová validace formulářů
Util\AjaxValidate
- traita s metodou success
, kterou lze využít při validaci formulářu.
- Př:
$form->onValidate[] = function (Form $form) { $this->validate($form) };
.
Práce se soubory
Pro práci se soubory slouží třída Wakers\BaseModule\Util\ProtectedFile
.
- Ukládá soubory do neveřejného adresáře.
- Pomocí 2 základních metod či maker lze soubory zpřístupnit.
- Zajištuje i generování náhledových obrázků (ořezů).
Nahrávání souboru
- Z formuláře přijde objekt typu
Nette\Http\FileUpload $fileUpload
. - Vytvoříme instanci
ProtectedFile $protectedFile
a uložíme soubor.
$protectedFile = new ProtectedFile('my-super/sub-folder/', NULL); $tmsName = $protectedFile->move($fileUpload); // vrací unikátní název // ... Název někam uložíme - třeba do DB
Odstranění souborů
- Načteme název souboru.
- Vytvoříme instanci
ProtectedFile $protectedFile
, již s názvem souboru. - Následně soubor odstraníme (z neveřejného i veřejného adresáře).
$name = 'nahled.jpg' // Načteno např. z DB $protectedFile = new ProtectedFile('my-super/sub-folder/', $name); $protectedFile->remove();
Publikování souboru / vytvoření ořezu
Publikování souboru či obrázku se může řešit na úrovni šablony viz latte šablona.
- Načteme název souboru.
- Vytvoříme instanci
ProtectedFile $protectedFile
s názvem souboru a přidáme mu i extra atribut. - Soubor vypíšeme v šabloně a vypíšeme i atribut.
Příklad PHP (Repository):
$name = 'nahled.jpg'; // Načteno např. z DB $title = 'Titulek obrázku'; // Načteno např. z DB $protectedFile = new ProtectedFile('my-super/sub-folder/', $name); $protectedFile->setAttr('title', $title);
Příklad Latte:
{* Makro file vytvoří kopii souboru do veřejného adresáře a vrátí cestu k souboru *} <a href="{file $protectedFile}">Odkaz na soubor</a> {* nebo *} <a href="{$basePath . $protectedFile->getFile()}">Odkaz na soubor</a> {* Makro img vytvoří oříznutý obrázek a vrátí cestu k souboru Pokud soubor ještě nebyl nahrán (neexistuje privátní soubor), vytvoří šedý obrázek *} <img src="{img $protectedFile, '1200xNULL', 'SHRINK_ONLY'}" title="{$protctedFile->getAttr('title')}"> {* nebo *} <img src="{$basePath . $protectedFile->getPublicImage('1200xNULL', 'SHRINK_ONLY')}" title="{$protectedFile->getAttr('title')}"> {* Vypíše pouze, pokud existuje privátní soubor - nevytváří tedy šedý obrázek *} {if $protectedFile->getPrivateFile()}) <img src="{img $protectedFile, '1200xNULL', 'SHRINK_ONLY'}" title="{$protctedFile->getAttr('title')}"> {/if}