0

我正在使用 Cakephp2.0 我创建了一个自定义函数

    <?php echo GenerateNavHTML($navarray);  ?>

<?php 

    function GenerateNavHTML($nav)
    { 

        if(!empty($nav)) {

              if(isset($nav[0]['parent'])) {
                     $parentid=$nav[0]['parent'];
              }else{
                  $parentid=1;
              }
             if($parentid==0) {
                 $html = '<ul style="display: block;" class="nav">';
             }else {
                 $html='<ul>';
             }
               foreach($nav as $page) {
                    $html.='<li>';    
                    $html .= '"'.$this->Html->url('Logout',array('controller'=>'users','action'=>'logout')).'"';


                    $html .= '</li>';
                }
                $html.='</ul>';
                return $html;
         }
    }

       ?> 

它给

致命错误:无法重新声明 GenerateNavHTML()

但是没有重新声明功能。

如果我写

<?php 

function GenerateNavHTML($nav)
{ 

    if(!empty($nav)) {

          if(isset($nav[0]['parent'])) {
                 $parentid=$nav[0]['parent'];
          }else{
              $parentid=1;
          }
         if($parentid==0) {
             $html = '<ul style="display: block;" class="nav">';
         }else {
             $html='<ul>';
         }
           foreach($nav as $page) {
                $html.='<li>';    
                $html .= '<a href=""></a>';


                $html .= '</li>';
            }
            $html.='</ul>';
            return $html;
     }
}

   ?> 

它工作正常

我想使用 cakephp 语法

谢谢

4

2 回答 2

2

在 MVC 中,这段代码应该是 Helper 的一部分,而不仅仅是一个独立的“函数”。

创建自己的助手

这听起来可能很难,但实际上并非如此。它也有很多优点;通过将代码移动到 Helper,它更易于重用和维护。

例如;

创建一个“导航”助手(当然,给它一个逻辑名称);

应用程序/视图/Helper/NavigationHelper.php

class NavigationHelper extends AppHelper
{
    /**
     * Other helpers used by *this* helper
     * 
     * @var array
     */
    public $helpers = array(
        'Html',
    );
    

    /**
     * NOTE: In general, convention is to have
     *       functions/methods start with a lowercase
     *       only *Classes* should start with a capital
     * 
     * @param array $nav
     * 
     * @return string
     */
    public function generateNavHTML($nav)
    {
        $html = '';

        if (!empty($nav)) {

            if (isset($nav[0]['parent'])) {
                $parentid = $nav[0]['parent'];
            } else {
                $parentid = 1;
            }
            if ($parentid == 0) {
                $html = '<ul style="display: block;" class="nav">';
            } else {
                $html = '<ul>';
            }
            foreach ($nav as $page) {
                $html .= '<li>';
                $html .= '"' . $this->Html->url('Logout', array('controller' => 'users', 'action' => 'logout')) . '"';
                $html .= '</li>';
            }
            $html .= '</ul>';
        }

        // NOTE: moved this 'outside' of the 'if()'
        //       your function should always return something
        return $html;
    }

    /**
     * You can add other methods as well
     * For example, a 'Convenience' method to create a link to the Homepage
     *
     * Simply use it like this:
     * <code>
     * echo $this->Navigation->logoutLink();
     * </code>
     */
    public function logoutLink()
    {
        return $this->Html->link(__('Log out'), array(
                'controller' => 'users',
                'action' => 'logout',
                'confirm' => __('Are you sure you want to log out')
            ));
    }    }

创建该文件后,您可以在任何视图或元素中使用它;

echo $this->Navigation->generateNavHTML($navarray);

您甚至不必将它添加到控制器的“Helpers”数组中,因为 CakePHP 2.3 使用“自动加载”来为您执行此操作

如果您需要其他功能(与“导航”相关),您可以在 Helper 中添加一个“方法”,我添加了一个“logoutLink()”方法只是为了说明这一点

有关更多信息,请阅读本章创建助手

于 2013-04-12T11:53:13.097 回答
0

尝试这个:

<?php echo $this->GenerateNavHTML($navarray);  ?>

并在所有安全之前声明该功能

于 2013-04-12T10:43:50.827 回答