2016-05-17 3 views
0

У меня есть приложение ZF2, который работает на нескольких хостов, например:Определение несколько макетов в Zend Framework 2

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

Все эти сайты используют только один и тот же layout.phtml файл, который называется layout.phtml, и в зависимости от типа на веб-сайте для файла макета загружается другой скин CSS.

Мой вопрос здесь в том, как я могу создать отдельный файл макета для сайта6, чтобы он использовал только этот макет?

ответ

0

Для этого можно использовать the ServerUrl view helper. Проверьте также this answer here.

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

Затем вы можете установить css или другие конкретные макеты в зависимости от значения этой переменной. Можно, например, использовать a php switch statement для этого внутри вашей точки зрения (в файле layout.html):

Ввиду:

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

В качестве альтернативы можно также установить другой макет в контроллер в зависимости от значение $serverUrl. Как установить макет также объясняется here in this answer. Так что-то вроде:

В контроллере:

$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; 
} 

Теперь я использую переключатель заявление, но есть, вероятно, похож на 100 различных способов сделать это, но что я уезжаю до вашего творчества.

Смежные вопросы