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

时间:2014-03-13 09:35:35

标签: php zend-framework2 zend-framework-mvc

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

我的想法是为每个公司创建一个文件夹(在我的例子中,表示为doctrine entity Client)并从该文件夹动态加载布局> style.css和logo.png等。

问题:我该如何实现?如何从控制器更改布局文件中的变量?或者我是否必须将整个布局放在ViewModel的view.phtml文件中?

提前致谢!

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:-1)

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

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

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