zmenit default sablon na /theme/ v root-e

pn-pm
Člen | 20
+
0
-

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
+
+2
-

V (base)presenteru můžeš přepsat funkce formatLayoutTemplateFiles()formatTemplateFiles()

Editoval Martin Dřímal (11. 9. 16:33)

pn-pm
Člen | 20
+
0
-

Martin Dřímal napsal(a):

V (base)presenteru můžeš přepsat funkce formatLayoutTemplateFiles()formatTemplateFiles()

googlim, googlim, stale nevidim :D
nasmerujes prosim ?

Martin Dřímal
Člen | 20
+
+2
-

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
+
+6
-

Č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);
}