如何在Zend Framework中切换主题而不是类别?

时间:2011-03-25 09:32:27

标签: php css zend-framework zend-view

首先,我不需要“切换”布局。

我说的是CSS主题,这意味着布局保持不变。

我需要做的是在某些类别上切换css类。

类别由路径定义(请求参数中的名称和ID)

所以我想到了一个ViewHelper,在我的layout.phtml中用来设置<body class="theme-category"></body>

但是我将在我的视图助手中访问请求对象,是否可能?这是最佳做法吗?

其次我虽然使用相同的进程但是在我的控制器中传递参数,如果没有提供,则在我的帮助器中回退默认值。

你有什么反馈?

2 个答案:

答案 0 :(得分:1)

在你的布局中把这个

<?=$this->headLink(); ?>

在控制器中,你可以像这样添加一个特定的css文件

$this->view->headLink()->appendStylesheet("/css/file.css"); 

这将使您能够在每个控制器上更改css主题。 附:将它添加到控制器的init函数中。

答案 1 :(得分:0)

一个只返回css类的辅助方法怎么样,你从控制器中调用它,然后将css值传递给视图?

class YourController {
  public function yourpageAction(){
    // do your stuff, then call your helper
    $this->view->bodyCssClass = $this->setcss();
  }

  protected function setcss(){
    // analyse here all the parameter you wish (route, name, id etc.)
    // and just return the correct css string
    return $css;
  }
}

你甚至可以使用“init()”方法自动调用你的“setcss”方法(或者你给它的名字)。 为了更进一步,您可以扩展Zend Controller类,让所有控制器扩展您的特定控制器:所有页面都将继承此css定义过程。它有助于维护和阅读您的代码。

在您看来,只需一个简单的电话:

<body class="<?php echo $this->bodyCssClass;">