zmenit default sablon na /theme/ v root-e
- pn-pm
- Člen | 20
viem ze sa da nastavit v presenteri layout prikazom
$this->setLayout( $LayoutPath );
ale jak nastavit cestu, aby layout aj template pre actions hladalo VSETKY v roote v adresari theme ? Prezenter by som nechal napr /app/UI/Home, ale temy chcem dat vyssie aby ich lahsie nasiel aj menej zbehly grafik…
ako na to aby som mohol mat latecko v roote? Nejaky zapis do config.neon, alebo vytvorit nejak vlastny TemplateFactory class?
/theme/@layout.latte
/theme/Home/default.latte
/theme/ ... atd ...
mam v plane tam napr aj ukladat nekompilovane scss atd a bolo by fajn mat to v roote pokope
Editoval pn-pm (11. 9. 14:50)
- Martin Dřímal
- Člen | 20
V (base)presenteru můžeš přepsat funkce
formatLayoutTemplateFiles()
a formatTemplateFiles()
Editoval Martin Dřímal (11. 9. 16:33)
- Martin Dřímal
- Člen | 20
Obě ty funkce vrací pole možných cest k šablonám, ve výchozím stavu např. formatLayoutTemplateFiles() vrátí:
array(4) {
[0]=>
string(81) "/var/www/..../web/app/FrontendModule/templates/Home/@layout.latte"
[1]=>
string(81) "/var/www/..../web/app/FrontendModule/templates/Home.@layout.latte"
[2]=>
string(76) "/var/www/..../web/app/FrontendModule/templates/@layout.latte"
[3]=>
string(61) "/var/www/.../web/app/templates/@layout.latte"
}
Takže když si to v base presenteru přepíšeš na
public function formatLayoutTemplateFiles(): array
{
$layout_templates = [
'/nejaka/jina/cesta/k/@layoutu.latte',
'/taky/muze/byt/i/jinde/@layout.latte',
];
return $layout_templates;
}
Tak to bude hledat layout v těch tvých cestách a použije se první nalezená šablona. S formatTemplateFiles to stejné (stačí nakouknout na tu původní a upravit si ji). V některých projektech mám cesty i dynamické (jeden admin pro více webů, uživatelem přepínatelné šablony, atd..)
Editoval Martin Dřímal (11. 9. 20:32)
- Šaman
- Člen | 2659
Čistě pro kompatibilitu to ještě merguju s původními cestami. Pokud by
nějaký modul používal běžnou konvenci, ale také by dědil z
app/BasePresenter
.
// BasePresenter.php
public function formatTemplateFiles(): array
{
$name = $this->getName();
$presenter = substr($name, strrpos(':' . $name, ':'));
$dir = dirname($this->getReflection()->getFileName());
$templateFiles = [
"$dir/$this->view.latte",
"$dir/templates/$this->view.latte"
];
$originalTemplateFiles = parent::formatTemplateFiles();
return array_merge($templateFiles, $originalTemplateFiles);
}