视图和部分助手的示例
example for view and partial helpers
我想更深入地了解视图助手和部分助手的主题。我尝试使用教程的 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);
编辑,因为命名和路径问题:
新的 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\application\views\helpers
错误:致命错误:调用 C:\wamp\www\riba_doc\application\views\scripts\treeview\index.phtml 中未定义的函数 treeview() 第 13 行
您可以按如下方式以更类似于 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 class 并将其视为视图助手。这是通过将以下内容添加到我们的 ./application/config/application.ini
文件来完成的:
resources.view.helperPath.My_View_Helper_ = "My/View/Helper/"
我们可能 - 不确定,哇! - 还必须将 My_
命名空间添加到自动加载器:
autoloaderNameSpaces[] = "My_"
最后,我们可以使用以下方式在视图脚本中调用 Treeview 助手:
<? $this->treeview($arrayCategories, 0) ?>
我想更深入地了解视图助手和部分助手的主题。我尝试使用教程的 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);
编辑,因为命名和路径问题:
新的 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\application\views\helpers
错误:致命错误:调用 C:\wamp\www\riba_doc\application\views\scripts\treeview\index.phtml 中未定义的函数 treeview() 第 13 行
您可以按如下方式以更类似于 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 class 并将其视为视图助手。这是通过将以下内容添加到我们的 ./application/config/application.ini
文件来完成的:
resources.view.helperPath.My_View_Helper_ = "My/View/Helper/"
我们可能 - 不确定,哇! - 还必须将 My_
命名空间添加到自动加载器:
autoloaderNameSpaces[] = "My_"
最后,我们可以使用以下方式在视图脚本中调用 Treeview 助手:
<? $this->treeview($arrayCategories, 0) ?>