1

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

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

我需要做的是在某些类别时切换一个 CSS 类。

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

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

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

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

你有什么反馈?

4

2 回答 2

1

在你的布局中放这个

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

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

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

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

于 2011-03-25T09:44:36.730 回答
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;">
于 2011-03-25T09:46:05.370 回答