Více domén nad jednou aplikací

RedAlert
Člen | 4
+
0
-

Pohrávám si s myšlenkou, že na jedné aplikaci budu mít víc velice jednoduchých prezentací, protože nechci každou prezentaci nasazovat, dělat Xkrát stejný update, stejný fix, atd…

Případ, kdy by byly jednotlivé prezentace uložené v DB, jsem rovnou odepsal, protože chci mít přístup k plně funkčnímu Latte bez hackování Nette.

Jako další řešení se jeví projektově specifické šablony, například templates/Homepage-chlast-cz, templates/Homepage-slast-cz, atd..
Zde ale tápám už v Routeru, který by asi měl předat presenteru parametr o doméně a dál by měl presenter asi přenastavit složku s šablonami. Nebo nějak úplně jinak. Poradí mi prosím někdo jak na to?

Případně pokud je i předchozí řešení kravina, napadá vás jiné řešení?

Myiyk
Člen | 321
+
0
-

Pokud je pro všechny domény stejný presenter pak by mělo stačit v presenteru měnit cestu k šabloně.

Pokud má být jiný presenter, použil bych routovací tabulku. Nebo vlastní filter in / out v routeru.

RedAlert
Člen | 4
+
0
-

Poprosil bych o ukázku kódu, jak změnit cestu k šabloně. Předpokládám, že se změní jenom složka s šablonami?

RedAlert
Člen | 4
+
0
-

Na něco jsem přišel, ale nejsem si jistý, jestli to není prasečina:

class HomepagePresenter extends BasePresenter
{
	public function startup()
	{
		parent::startup();
		$host = Strings::webalize($this->getHttpRequest()->getUrl()->getHost());
		$this->template->setFile(__DIR__ . "/templates/Homepage-$host/{$this->action}.latte");
	}
}
Šaman
Člen | 2650
+
+2
-

Šablona se hledá pomocí metody formatTemplateFiles. Přetěž si ji v BasePresenteru (nebo v jiném) dle libosti. Do startupu to nepatří, i když to fungovat bude taky.

Editoval Šaman (3. 1. 2018 1:27)

GEpic
Člen | 566
+
0
-

Nápad dobrý – ale nedělal bych to. Už jen proto že není dobré updatovat weby, které jedou a není tam vyloženě nějaká bezpečnostní díra. Na druhou stranu – pokud budeš mít díru v tomto tak to odskáčou všechny weby, sváže ti to ruce v případě individuálních úprav a budeš v tom mít nepořádek (a možná i o něco horší debugging). Radši si vem od klienta větší paušální poplatek ať se ti zaplatí hosting a budeš mít všude aplikaci včetně vendoru solo.

Editoval GEpic (3. 1. 2018 9:02)

Jan Endel
Člen | 1016
+
0
-

Můžeš si udělat i vlastní composerovou knihovnu, co bude privátní, a v ní mít společnou logiku. Tu pak u jednotlivých projektů akorát rozšiřovat.

RedAlert
Člen | 4
+
0
-

Paráda, @Šamane, to je přesně to, co jsem hledal! Když jsem procházel dostupné metody, nepochopil jsem, že tato k tomu slouží.

Weby budou opravdu jenom základní prezentace s formulářem na kontaktování a pak hlavně statický obsah s absolutním zákazem individualit. V tomto případě si můžu dovolit tuto variantu.

Nastal ale ještě jeden problém. A to nastavení rout. Chci mít jednu Master doménu, která bude mít klasický router, který by směřoval na všechny presentery a pak mnoho Slave domén, které budou směřovat na jeden presenter. Sesmolil jsem něco takovéhoto, ale nefunguje to.

$router[] = new Route('//<host>/<presenter>/<action>[/<id>]', [
	'presenter' => 'Homepage',
	'action' => 'default',
	NULL => [
		Route::FILTER_IN => function (array $params) {
			if ($params['host'] !== 'master.tld') {
				return NULL;
			}
			return $params;
		},
		Route::FILTER_OUT => function (array $params) {
			if (!isset($params['host'])) {
				return $params;
			}
			if ($params['host'] !== 'master.tld') {
				return NULL;
			}
			return $params;
		}
	]
]);


$router[] = new Route('<action>[/<id>]', 'Slave:default');