2015-10-13 10 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); 

EDIT, потому что имен и проблема пути:

Новый глава ViewHelper:

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

путь в моей application.ini (как вы можете видеть, я пробовал раньше с именованием)

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" 

и теперь путь, где я сохранил файл ViewHelper:

Имя: Treeview.php путь: C: \ WAMP \ WWW \ riba_doc \ приложения \ Views \ хелперы

Ошибка: Fatal Ошибка: вызов неопределенной функции treeview() в C: \ wamp \ www \ riba_doc \ application \ views \ scripts \ treeview \ index.phtml в строке 13

ответ

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, как найти наш класс TreeView и относиться к нему как вид-помощника. Это делается путем добавления следующего нашего ./application/config/application.ini файла:

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

Мы могли бы - не уверен, aaugh! - также добавить My_ имен автозагрузчика:

autoloaderNameSpaces[] = "My_" 

Наконец, мы можем вызвать помощника TreeView в скрипте с помощью:

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

это работает, и я понял техника ;-)))) –

+0

нет, он не работает, прежде чем моя старая функция была загружена, см. Мое редактирование выше. Должна быть проблема с именами и путями. –

+0

@ pia-sophie: Является ли ваш вызов в скрипте view фактически '$ this-> treeview()' или просто 'treeview()'? В контексте сценария вида '$ this' является объектом View, который, поскольку мы настроили его через конфигурацию' resource.view', будет знать, как разрешить имя класса и пути для finf метода, который мы хотим вызов. –

 Смежные вопросы

  • Нет связанных вопросов^_^