Více domén nad jednou aplikací
- RedAlert
- Člen | 4
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í?
- RedAlert
- Člen | 4
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 | 2659
Š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
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)
- RedAlert
- Člen | 4
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');