1

私の以前の質問で述べたように、私はATK4を初めて使用し、現在学習しているため、さらにいくつかの質問があるかもしれません. 今私の問題に。

Sidebarテンプレートにリージョン " " を作成し、shared.html次のようにビューを追加しました。

class Frontend extends ApiFrontend {
    function init(){
        parent::init();

        /* 
            Other stuff here
        */

        $this->addLayout('Sidebar');
    }

    function layout_Sidebar() {
        $this->add('View_Menu', null, 'Sidebar');
    }
}

次に、次のようなビューを作成しています。

class View_Menu extends AbstractView {
    function init(){
        parent::init();

        $this->add('HtmlElement')
            ->setElement('a')
            ->setAttr('href', 'testurl')
            ->set('Link');
    }
}

これにより、次のエラーが表示されます。

Spot is not found in owner's template

Additional information:

    spot: Content

$this->template->top_tag3 番目の引数としてadd 関数を指定すると、この問題が解決されます。

$this->add('HtmlElement', null, $this->template->top_tag)
    ->setElement('a')
    ->setAttr('href', 'testurl')
    ->set('Link');

...しかし、ビュー内のすべての add() 呼び出しに本当にそれを追加する必要がありますか? それは正しくないように思えますし、そうではないことは確かです!

4

1 に答える 1

2

AbstractView を作成するときは、既定のテンプレートを指定する必要があります。デフォルトでは、AbstractView は shared.html の領域を使用します。つまり、AbstractObject は、それが置き換える領域のテンプレートを想定しています。

defaultTemplate() を作成するか、4 番目の引数を add() に渡すと、サイドバー メニューのテンプレートに使用する別のファイルを指定できます。

どちらの方法でも、テンプレートには、サブ要素の出力が表示される場所が含まれている必要があります。

. HtmlElement は View を拡張するため、HtmlElement を使用するというあなたの考えはまさにこのようなものです。

于 2012-08-03T02:30:07.560 に答える