2016-05-17 6 views
0

Ich habe eine ZF2-Anwendung, die auf mehreren Rechnern zum Beispiel läuft:Definieren von mehreren Layouts in Zend Framework 2

www.site1.com 
www.site2.com 
www.site3.com 
www.site4.com 
www.site5.com 
www.site6.com 

Alle diese Websites verwenden nur die gleiche layout.phtml Datei, die layout.phtml genannt wird, und je nach Art der Website wird ein anderes CSS-Skin für die Layoutdatei geladen.

Meine Frage hier ist, wie kann ich eine separate Layoutdatei für site6 erstellen, so dass es nur dieses Layout verwendet?

Antwort

0

Sie können hierfür the ServerUrl view helper verwenden. Überprüfen Sie auch this answer here.

$serverUrl = $this->serverUrl(); // output: http://www.siteX.com 

Dann können Sie eine CSS oder andere spezifische Layout-Dinge abhängig von dem Wert dieser Variablen einstellen. Sie könnten zum Beispiel a php switch statement innerhalb Ihrer Ansicht nach für diese Verwendung (in der layout.html-Datei):

In Ansicht:

switch($serverUrl){ 
    case 'http://www.site1.com': 
     // logic for site 1 
     break; 
    case 'http://www.site2.com': 
     // logic for site 2 
     break; 
    case 'http://www.site3.com': 
     // logic for site 3 
     break; 
    case 'http://www.site4.com': 
     // logic for site 4 
     break; 
    case 'http://www.site5.com': 
     // logic for site 5 
     break; 
    case 'http://www.site6.com': 
     // logic for site 6 
     break; 
} 

Alternativ auch Sie auf ein anderes Layout in Ihrem Controller abhängig einstellen könnten der Wert $serverUrl. Wie man ein Layout einstellt, wird auch erklärt here in this answer. So etwas wie:

In Controller:

$serverUrlHelper = $this->getServiceLocator()->get('ViewHelperManager')->get('ServerUrl'); 
$serverUrl = $serverUrlHelper(); 

switch($serverUrl){ 
    case 'http://www.site1.com': 
     $this->layout('layout/layout1'); 
     break; 
    case 'http://www.site2.com': 
     $this->layout('layout/layout2'); 
     break; 
    case 'http://www.site3.com': 
     $this->layout('layout/layout3'); 
     break; 
    case 'http://www.site4.com': 
     $this->layout('layout/layout4'); 
     break; 
    case 'http://www.site5.com': 
     $this->layout('layout/layout5'); 
     break; 
    case 'http://www.site6.com': 
     $this->layout('layout/layout6'); 
     break; 
} 

Jetzt benutze ich eine switch-Anweisung, aber es gibt wahrscheinlich wie eine 100 verschiedene Möglichkeiten, dies zu tun, sondern, dass ich verlassen, um Ihre Kreativität.