Php Zend Framework 2为每个用户定制样式

Php Zend Framework 2为每个用户定制样式,php,zend-framework2,zend-framework-mvc,Php,Zend Framework2,Zend Framework Mvc,我正在为那些向客户发送匿名链接以填写问卷的公司构建一个应用程序。公司应能够更改调查问卷的颜色和徽标,以反映与公司CI的关系 我的想法是为每个公司制作一个文件夹(在我的例子中,表示为条令实体客户端),并从该文件夹动态加载布局的style.css和logo.png等 问题是:我如何实现这一点?如何从控制器更改布局文件中的变量?还是必须将整个布局放置在ViewModel的view.phtml文件中 提前谢谢 您需要在操作中根据公司名称设置style.css和logo文件路径,然后您可以在布局中访问此变

我正在为那些向客户发送匿名链接以填写问卷的公司构建一个应用程序。公司应能够更改调查问卷的颜色和徽标,以反映与公司CI的关系

我的想法是为每个公司制作一个文件夹(在我的例子中,表示为条令实体客户端),并从该文件夹动态加载布局的style.css和logo.png等

问题是:我如何实现这一点?如何从控制器更改布局文件中的变量?还是必须将整个布局放置在ViewModel的view.phtml文件中


提前谢谢

您需要在操作中根据公司名称设置style.css和logo文件路径,然后您可以在布局中访问此变量,就像在视图文件中访问一样。 并使用headLink()函数设置css。并在布局标题中指定徽标文件

您不需要在视图文件中放置布局代码。 在你的控制器上写下面的代码。也可以访问布局中的样式变量

return new ViewModel(array( 'style' => $style ,'logo' => $logo));

如果我必须根据某些条件拥有多个布局。

我会为每个公司制作布局,在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或同一模块中。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>

...
...

比我的答案要深入得多,因此这一个+1。非常好的第一篇帖子,欢迎来到SO!