Пользовательский стиль 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));
Другие вопросы по тегам