2

Zend 1.12 アプリケーションで作業しており、レイアウトの body タグに割り当てられたスタイル クラスを取得しようとしています。

タスクを処理しているように見えるこのサンプル Bootstrap.php ファイルを見つけました: https://gist.github.com/fideloper/1302688

うまく統合されているように見えますが、本体のクラスは常に空白になります。

body にクラスを割り当てる方法について、誰かが私を正しい方向に向けることができますか?

ありがとう。

4

2 に答える 2

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"> 

現在のリクエストのパラメータを取得して、ボディ クラスにマッピングしています。これが誰かがこれに対処するのに役立つことを願っています。

于 2013-04-11T22:39:42.533 に答える
0

そのヘルパーの外観から、そのメソッドの 1 つを呼び出してクラスを追加する必要があります。コントローラーの 1 つから:

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

それがあなたの使い方ですか?

于 2013-04-11T21:10:39.460 に答える