WebLoader jako asset manager?
- Honza Marek
- Člen | 1664
Jedním z nepříjemných problémů pro vývojáře doplňků frameworku nebo různých modulů CMS a podobně je správa statických obrázků, CSS a JS souborů. Css a Js soubory už WebLoader obstojně řeší, ale teď mi napadlo, jestli by nemohl pomáhat i s těma obrázkama.
Než to začnu programovat, chtěl bych podiskutovat o tom, jak by to mělo být přesně realizované.
Zatím mám zhruba takovou představu:
// spravované adresáře bude registrovat asset manager
$assetManager->addDir('muj-super-plugin', APP_DIR . '/muj-super-plugin');
// bude umět vrátit cestu k souboru z www tempu
$assetManager->getPath('muj-super-plugin/logo.png');
// vrací $wwwDir/temp/muj-super-plugin/logo.png
// umí vyblejt všechny soubory do tempu
$assetManager->dumpAll();
Pro šablony by existoval helper, který by vracel cestu do tempu a případně ten soubor uměl zkopírovat.
<img src="{= 'muj-super-plugin/logo.png'|assetPath}">
Pak by se šiknul možná ještě filtr pro CssLoader.
Ještě něco by bylo potřeba? Myslím, že na implementaci by to mělo být celkem jednoduché, takže se dá předpokládat, že bych to moh realizovat.
Taky se těšim na tu bájnou situaci, až bude WebLoader mít Nettí container extension. Pak to bude fakt silnej nástroj. Hlásí se nějakej dobrovolník? :D
- Aearsis
- Člen | 57
Jak si představuješ tu extension? Co by měla umět? Neumím si představit nic co by nezvládla definice v services :)
P.S. Do WebLoaderu sem si přidal možnost „live“ kódu – že nepřidávám název souboru, ale přímo kód, obzvlášť u pluginů se to hodí např. na kód pro G. analytics – feature request, nebo mám poslat vlastní fuj fuj řešení?
Editoval Aearsis (10. 3. 2012 0:11)
- newPOPE
- Člen | 648
Privital by som este moznost invalidacie cache napr u JS a CSS a mozno aj obrazkov (pokial to tam uz nie je)
<?php
<img src="{= 'muj-super-plugin/logo.png'|assetPath}">
?>
vygeneruje nieco ako (ku vsetkym takymto suborom)
<?php
<img src=".../logo.png?c=123456789" /> //c=... je len example
?>
a po uprave sa len napr. prepisu subory + pregenrovanie identifikatora a mam istotu (domnievam sa) ze browsery cache invaliduju.
- Filip Procházka
- Moderator | 4668
Co takhle
<img n:src="img/picture.png" alt='' />
nebo lépe
<img n:src="myExtension/img/picture.png" alt='' />
- Honza Marek
- Člen | 1664
Aearsis napsal(a):
Jak si představuješ tu extension?
webloader:
tempPath: %wwwDir%/temp
css:
rootPath: %appDir%/css
default:
files:
- main.css
print:
files:
- print.css
js:
js:
files:
- web.js
Měla by umět generovat více webloaderů podle nějakého společného
nastavení. To by mohlo mít i nějaké defaultní hodnoty. Pak by to umělo
vyplivnout službu, kterou požádáš třeba o
->getControl('print')
a máš hotovou komponentu. Prostě by to
mělo maličko usnadnit nastavování, ale nemám to úplně do detailů
promyšlené.
P.S. Do WebLoaderu sem si přidal možnost „live“ kódu
Nestačilo by použít něco jako toto?
$compiler->addFilter(function ($code) {
return $code . '/* muj GA kod */';
});
newPope
u css a js už to je
- Filip Procházka
- Moderator | 4668
Já to mám založené na balíčcích.
{js '@packageName/js/main.js'}
zeptám se manageru, kde je balíček (třída dědící od
Kdyby\Packages\Package
, což je root balíčku) a pak z jeho
složky Resources
předám soubory do Assetic. S tím že tam
kolem toho mám ještě nějaké čarování, aby to v devu běhalo přes
router a soubory se obnovovaly v cachi. A na produkci se to vygeneruje jako
statický soubor do veřejné složky a odkazuje se ten.