2015-10-13 266 views
1

我想深入瞭解視圖助手和部分助手的主題。我嘗試了一個教程的treeview元素,它工作得很好。這將是一個很好的例子,用我認爲的視圖幫手來嘗試,但我迷路了。在我的理解中,遞歸部分應該是部分?! 有人可以解釋如何將不同的幫助器部分中的以下功能分開嗎?以及如何在我看來實現?查看和部分助手的示例

function treeview($array, $currentParent, $currLevel = 0, $prevLevel = -1) { 

    foreach ($array as $categoryId => $category) { 
     if ($currentParent == $category['parent_id']) {      
      if ($currLevel > $prevLevel) echo " <ol class='tree'> "; 
       if ($currLevel == $prevLevel) echo " </li> "; 
       echo '<li> <label for="subfolder2">'.$category['name'].'</label> <input type="checkbox" name="subfolder2"/>'; 
       if ($currLevel > $prevLevel) { $prevLevel = $currLevel; } 
       $currLevel++; 
       treeview ($array, $categoryId, $currLevel, $prevLevel); 
       $currLevel--;    
      } 
     } 
     if ($currLevel == $prevLevel) echo " </li> </ol> "; 
} 

我的觀點看起來如下:

require_once('../application/library/Treeview.php'); 
header("Content-Type: text/html; charset=utf-8"); 
echo $this->headLink()->prependStylesheet($this->baseUrl().'/css/tree.css'); 
$this->title = "Treeview Test"; 
$this->headTitle($this->titel); 

$arrayCategories = array(); 
foreach($this->treeviewitems as $row) : 
    $arrayCategories[$row['id']] = array("parent_id" => $row['parent_id'], "name" =>$row['name']); 

endforeach; 
treeview($arrayCategories, 0); 

編輯,因爲命名和路徑問題:

新視圖助手頭:在我的application.ini

class Application_View_Helper_Treeview extends Zend_View_Helper_Abstract 
{ 
    public function treeview($array, $currentParent, $currLevel = 0, $prevLevel = -1) { 

路徑(正如你可以看到我之前嘗試命名的東西)

resources.view.helperPath.Company_View_Helper = "Company/View/Helper" 
resources.view.helperPath.Britta_View_Helper = "Britta/View/Helper" 
resources.view.helperPath.Application_View_Helper = APPLICATION_PATH "/views/helpers" 
resources.view.helperPath.Zend_Dojo_View_Helper = "Zend/Dojo/View/Helper" 

現在的路徑,在這裏我保存視圖助手文件:

名稱:Treeview.php 路徑:C:\ WAMP \ WWW \ riba_doc \程序\意見\助手

錯誤:致命錯誤:調用第13行中的C:\ wamp \ www \ riba_doc \ application \ views \ scripts \ treeview \ index.phtml中未定義的函數treeview()

回答

1

您可以在一點ZF1-如下所示。

創建文件./library/My/View/Helper/Treeview.php有:

<?php 

class My_View_Helper_Treeview extends Zend_View_Helper_Abstract 
{ 
    public function treeview($array, $currentParent, $currLevel = 0, $prevLevel = -1) 
    { 

     foreach ($array as $categoryId => $category) { 
      if ($currentParent == $category['parent_id']) { 
       if ($currLevel > $prevLevel) { 
        echo " <ol class='tree'> "; 
       } 
       if ($currLevel == $prevLevel) { 
        echo " </li> "; 
       } 
       echo '<li> <label for="subfolder2">' . $category['name'] . '</label> <input type="checkbox" name="subfolder2"/>'; 
       if ($currLevel > $prevLevel) { 
        $prevLevel = $currLevel; 
       } 
       $currLevel++; 
       $this->treeview($array, $categoryId, $currLevel, $prevLevel); 
       $currLevel--; 
      } 
     } 
     if ($currLevel == $prevLevel) { 
      echo " </li> </ol> "; 
     } 
    } 
} 

接下來,我們需要告訴ZF怎麼找到我們的樹狀視圖類,並把它作爲一個視圖幫手。這是通過添加下面我們./application/config/application.ini文件來完成:

resources.view.helperPath.My_View_Helper_ = "My/View/Helper/" 

我們可能 - 不知道,aaugh! - 也有到My_命名空間添加到磁帶自動加載:

autoloaderNameSpaces[] = "My_" 

最後,我們可以利用在調用視圖腳本樹視圖助手:

<? $this->treeview($arrayCategories, 0) ?> 
+0

它的工作原理和我理解TECHNIC ;-)) )) –

+0

不,它不工作,在我的舊功能加載之前,請參閱我上面的編輯。應該與命名和路徑有一些問題。 –

+0

@ pia-sophie:您在視圖腳本中的調用實際是'$ this-> treeview()'還是'treeview()'?在view-script的上下文中,'$ this'是View對象,因爲我們已經通過'resources.view'配置了它 - 將知道如何解析類名和路徑以找到我們想要的方法調用。 –