2012-08-02 56 views
1

正如前面我的問題所述,我是ATK4的新手,目前我正在學習,因此可能會出現更多問題。現在到我的問題。獲取視圖以自動使用正確的區域

我已經在我的模板shared.html創建區域「Sidebar」,加入這樣的觀點吧:

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 

提供添加樂趣ction與$this->template->top_tag作爲第三個參數來解決這個問題:

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

...但我真的將它添加到視圖中的每一個加()調用?這看起來不正確,我確信它不是!

+0

嗯,也許它不是我應該使用的視圖,也許我應該創建它作爲HtmlElement的擴展。 – Bazze 2012-08-02 17:05:14

回答

2

當您創建AbstractView時,您需要指定一個默認模板。默認情況下,您的AbstractView將使用您的shared.html中的區域。換句話說,AbstractObject假定它替換的區域的模板。

當您創建defaultTemplate()或將第四個參數傳遞給add()時,您可以指定一個不同的文件用於側邊欄菜單的模板。

無論哪種方式 - 模板應該包含任何子元素的輸出將顯示。

您可以從「View」類繼承,該類已經依賴於僅包含a的自定義模板。您使用HtmlElement的想法就像這樣,因爲HtmlElement擴展了View。