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 では、このコードは単なるスタンドアロンの「関数」ではなく、ヘルパーの一部である必要があります。

独自のヘルパーを作成する

これは難しいように聞こえるかもしれませんが、実際にはそうではありません。多くの利点もあります。コードをヘルパーに移動することで、再利用と保守が容易になります。

例えば;

「ナビゲーション」ヘルパーを作成します (もちろん、論理名を付けます)。

アプリ/ビュー/ヘルパー/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);

CakePHP 2.3 は「autoloading」を使用してそれを行うため、コントローラーの「Helpers」配列に追加する必要さえありません。

他の機能 (「ナビゲーション」に関連) が必要な場合は、ヘルパーに「メソッド」を追加するだけです。これを説明するために「logoutLink()」メソッドを追加しました。

詳細については、この章のヘルパーの作成をお読みください

于 2013-04-12T11:53:13.097 に答える
0

これを試して:

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

そして、安全のためにすべての前に関数を宣言します

于 2013-04-12T10:43:50.827 に答える