Пользовательский стиль Zend Framework 2 для каждого пользователя
Я создаю приложение для компаний, которое отправляет анонимные ссылки клиентам для заполнения анкеты. Компания должна иметь возможность изменить цвета и логотип анкеты, чтобы отразить принадлежность к CI компании.
Моя идея состояла в том, чтобы создать папку для каждой компании (в моем случае, представленную как клиентскую сущность доктрины) и динамически загружать из этой папки макеты style.css, logo.png и т. Д.
Вопрос: как мне это реализовать? Как я могу изменить переменную в файле макета с контроллера? Или мне нужно разместить весь макет внутри файла view.phtml для ViewModel?
Заранее спасибо!
2 ответа
Если бы у меня было несколько макетов в зависимости от каких-либо условий.
Я хотел бы сделать макеты для каждой компании, установить их в module.config.php
'view_manager' => array(
'template_path_stack' => array(
'module' => __DIR__ . '/../view/',
),
'template_map' => array(
'layout/company1' => __DIR__ . '/../view/layout/company1.phtml',
'layout/company2' => __DIR__ . '/../view/layout/company2.phtml',
)
),
Затем в gloabal.php или в том же module.config.php добавьте несколько параметров:
'companies_layouts' => array(
'IDofComapny1' => 'layout/company1',
'IDofComapny2' => 'layout/company2',
)
И, наконец, в контроллере будет делать что-то вроде этого:
public function indexAction()
{
$sm = $this->getServiceLocator();
// Getting company identifier
$companyId = $this->params()->fromRoute( 'companyId' );
// do something
...
$this->layout( $sm->get('Config')['companies_layouts'][$comanyId] );
return new ViewModel();
}
Если вам просто нужно установить CSS в зависимости от некоторых условий. Вы можете просто сделать это в файле вида:
switch( true ){
case some condition:
$css = 'file1.css';
break;
case some condition:
$css = 'file2.css';
break;
}
$this->headLink()->appendStylesheet( $css );
И в файле макета у вас должна быть следующая строка:
<head>
...
<?= $this->headLink() ?>
...
</head>
Вам нужно установить style.css и путь к файлу логотипа в соответствии с названием компании в вашем действии, а затем вы можете получить доступ к этому доступному макету в вашем макете так же, как и к файлу доступа в представлении. И установить вас css с функцией headLink(). и назначьте файл логотипа в заголовке макета.
Вам не нужно размещать код макета в файле просмотра. Напишите ниже код на вашем контроллере. Вы также можете получить доступ к переменной стиля в макете.
return new ViewModel(array( 'style' => $style ,'logo' => $logo));