Připojení obsahu na konec layoutu
- Machy8
- Člen | 59
Ahoj
vytvářím si rozšíření pro web, ve kterém bych chtěl mít část
šablony a několik js, css souborů uložených pohromadě ve vendoru.
Bádám nad tím, jak načíst tyto části (soubory) na konec layoutu (vždy a jakéhokoliv), pokud možno bez nutnosti registrace v config.neon nebo alespoň nezávisle na presenterech.
Mám na mysli stejné vkládání, jako se vkládá například tracy debugger panel.
Když to shrnu:
- Jak tyto soubory vložit na konec layoutu automaticky bez volání funkcí v presenterech?
- Je možné to provést „obecně“ bez registrace v config.neon?
Předem děkuju za každou odpověď.
Editoval Machy8 (11. 12. 2015 19:31)
- Hurass
- Člen | 114
Ve vendor složce by si nikdy neměl nic dělat (nahrávat, mazat, upravovat) ručně. Můžeš si je ale uložit do jedné složky, kterou budeš mít ve složce www a poté procházet všechny soubory složky v BasePresenteru v metodě beforeRender, která ti všechny soubory předá šabloně.
Editoval Hurass (11. 12. 2015 19:38)
- ViPEr*CZ*
- Člen | 817
Ano jak píše Hurass… vendor se generuje a tam se nic měnit nemá.
Ostatně sám to poznáte, jestli někdy v budoucnu zavoláte update :-)
To co popisujete je tak trochu abstrakce. Nechcete něco volat v jednotlivých
presenterech, tak proč právě nepoužít abstrakce. A je to tu, již
zmiňovaný BasePresenter. Již zmiňovaná metoda beforeRender se pak volá pro
každý konkrétní a tudíž dokáže všem potomkům nastavit cokoliv do
šablony.
- Machy8
- Člen | 59
Ve vendoru nic mazat ani upravovat nechci. Mám spíše na mysli, jak načíst tyto soubory po stažení celého rozšíření composerem (moje chyba, špatně jsem to vysvětlil).
Po stažení bych chěl toto rozšíření maximálně (pokud to jinak nejde) zaregistrovat v config.neon. Stránka by se poté načetla již s panelem.
Nevím ale, jak předat obsahy latte, css a js souborů (uložených ve vendoru spolu s rozšířením), a jak tento obsah umístit na správné místo na konec layoutů.
- CZechBoY
- Člen | 3608
Napíšeš do návodu k instalaci, že se musí na konec šablony přidat komponenta s js, která se vytvoří kdesi v basepresenteru (pokud to chceš mít všude). viz třeba návod k webloaderu
- Machy8
- Člen | 59
@greeny: Zkusil jsem to pomocí register_shutdown_function a funguje to. Díky!
Ve výsledku (zjednodušeně) to vypadá takto:
Autoload
1. Composerem – autoload_files.php
Test.php
ob_start();
function test ()
{
require "helloWorld.latte";
}
ob_end_clean();
register_shutdown_function('test');
Autoload_files.php
// autoload_files.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
...
$vendorDir . '/just/test/src/test.php',
);
2. RobotLoader (lepší to v test.php rozepsat do tříd)
Test.php
class Test
{
public function __construct ()
{
register_shutdown_function([$this, 'helloWorld']);
}
public function helloWorld ()
{
ob_start();
require "helloWorld.latte";
ob_end_clean();
}
}
Bootstrap.php
$configurator->createRobotLoader()
...
->addDirectory(__DIR__.'/../vendor/just/test/src')
->register();
new Test();
HelloWorld.latte
<?php echo "Hello world"; ?>
Teď jen přemýšlím, zda-li je to „špatně“ vkládat tento obsah až za body. To ještě musím poladit.
Editoval Machy8 (13. 12. 2015 17:13)