2013-04-11 15 views
2

我正在研究一个Zend 1.12应用程序,并试图获取分配给布局主体标签的样式类。在Zend中设置主体类

我发现,似乎处理任务此示例的bootstrap.php文件: https://gist.github.com/fideloper/1302688

这似乎很好地整合,但身体的课永远是空白。

有人请指点我在这里正确的方向如何获得班级分配到身体?

谢谢。

回答

2

对上面引用的代码段做了一些小修改。

class AppName_Helper_BodyClass extends Zend_View_Helper_Placeholder_Container_Standalone { 

    private $_classes = array(); 

    public function __construct($classes = null) { 
     if(is_array($classes)) { 
      $this->addClass($classes); 
     } 
    } 

    public function addClass($class) { 
     if(is_array($class)) { 
      foreach($class as $k => $c) { 
       if(is_string($c)) { 
        if(is_string($k)) { 
         $this->addClass($k.'-'.$c); //recursion 
        } else { 
         $this->addClass($c); 
        } 
       } else { 
        throw new Zend_Exception('Class must be a string - is type: '.gettype($c)); 
       } 
      } 
      return $this; 
     } 

     if(is_string($class)) { 
      $this->_classes[] = $class; 
      return $this; 
     } else { 
      throw new Zend_Exception('Class must be a string - is type: '.gettype($class)); 
     } 
     return $this; 
    } 

    public function removeClass($class) { 
     $key = array_search($class, $this->_classes); 
     if($key !== false) { 
      unset($this->_classes[$key]); 
     } 
     return $this; 
    } 

    public function bodyClass() { 
     return $this; 
    } 

    public function toString() { 
     return implode(' ', $this->_classes); 
    } 
} 

这个片段进入我的布局:

$uri = Zend_Controller_Front::getInstance()->getRequest()->getParams(); 
$this->bodyClass()->addClass($uri); 

结果是这样(的模块 - “默认”,控制器 - “权威性”,行动 - “登入”):

<body class="controller-auth action-signin module-default"> 

我抓取当前请求的参数并将它们映射到主体类。希望这可以帮助处理这个问题的人。

0

从助手的外观你需要调用其中一个方法来添加一个类。从你的一个控制器:

$this->view->bodyClass()->addClass('something'); 

是你如何使用它?

+0

蒂姆,你是正确的使用情况和你的代码片断点。然而,我会根据应用程序中的当前位置寻找一个动态的身体类填充(比如说“模块控制器动作”)。任何想法呢? – sbay 2013-04-11 22:09:44