代码之家  ›  专栏  ›  技术社区  ›  Ibrahim Azhar Armar

有没有更好的方法在PHP中为这段代码定义函数?

  •  0
  • Ibrahim Azhar Armar  · 技术社区  · 15 年前

    我有一个HTML菜单,我用CSS来突出显示当前页面。因为我有超过8页使用相同的代码。我想做一些动态的事情,为此我创建了一个PHP函数,

     <?php    function hiddenmenu($activeicon1 = 0, $activeicon2 = 0, $activeicon3 = 0, $activeicon4 = 0,
                                   $activeicon5 = 0, $activeicon6 = 0, $activeicon7 = 0, $activeicon8 = 0, $activeicon9 = 0) {
     ?>
    
                        <div class="icon-no-spacer">
                            <p><a id="<?php echo $activeicon1; ?>" href="index.php" title=""><img src="images/icons/48/display.png" alt="" />Dashboard</a></p>
                        </div>
    
                        <div class="icon-spacer">
                            <p><a id="<?php echo $activeicon2; ?>" href="post-news.php" title=""><img src="images/icons/48/text_rtf.png" alt="" />Post News</a></p>
                        </div>
    
                        <div class="icon-spacer">
                            <p><a id="<?php echo $activeicon3; ?>" href="news.php" title=""><img src="images/icons/48/wordprocessing.png" alt="" />News</a></p>
                        </div> 
    
                        <div class="icon-spacer">
                            <p><a id="<?php echo $activeicon4; ?>" href="post-advertisement.php" title="" ><img src="images/icons/48/view_pim_news.png" alt="" />Post Ad</a></p>
                        </div>
    
                        <div class="icon-spacer">
                           <p><a id="<?php echo $activeicon5; ?>" href="advertisement.php" title=""><img src="images/icons/48/view_pim_tasks.png" alt="" />Advertise</a></p>
                        </div>
    
                        <div class="icon-spacer">
                            <p><a id="<?php echo $activeicon6; ?>" href="comments.html" title=""><img src="images/icons/48/spread.png" alt="" />Comments</a></p>
                        </div>
    
                        <div class="icon-spacer">
                            <p><a id="<?php echo $activeicon7; ?>" href="#" title=""><img src="images/icons/48/rss_tag.png" alt="" />Sponsors</a></p>
                        </div>
    
                        <div class="icon-spacer">
                            <p><a id="<?php echo $activeicon8; ?>" href="#" title=""><img src="images/icons/48/fileview_preview.png" alt="" />Video</a></p>
                        </div>
    
                        <div class="icon-spacer">
                            <p><a id="<?php echo $activeicon9; ?>" href="information.php" title="" ><img src="images/icons/48/help_about.png" alt="" />Information</a></p>
                        </div> 
    <?php                  
    }              
    ?>
    

    代码运行得非常好。这样可以吗??很多人可能会遇到这类问题我想知道解决这类问题的最佳可行方案。。

    谢谢您

    4 回复  |  直到 15 年前
        1
  •  2
  •   Kwebble    15 年前

    我至少会做两件不同的事:

    1. 将菜单项的定义与渲染分开,以便于维护。

    像这样的东西可以做到:

    <?php
    $choices = array(
        1 => array("index.php",              "display.png",          "Dashboard"),
        2 => array("post-news.php",          "text_rtf.png",         "Post News"),
        3 => array("news.php",               "wordprocessing.png",   "News"),
        4 => array("post-advertisement.php", "view_pim_news.png",    "Post Ad"),
        5 => array("advertisement.php",      "view_pim_tasks.png",   "Advertise"),
        6 => array("comments.html",          "spread.png",           "Comments"),
        7 => array("#",                      "rss_tag.png",          "Sponsors"),
        8 => array("#",                      "fileview_preview.png", "Video"),
        9 => array("information.php",        "help_about.png",       "Information")
    );
    
    function hiddenmenu($iconIds) {
        global $choices;
    
        foreach ($iconIds as $iconId){
            echo '<div class="icon-no-spacer">'
               . '<p><a id="' . $iconId . '"'
               . ' href="' . $choices[$iconId][0] . '"'
               . ' title=""><img src="images/icons/48/' . $choices[$iconId][1] . '"'
               . ' alt="" />' . $choices[$iconId][2] . '</a></p>' ."\n";
        }
    }
    
    hiddenmenu(array(1,2,3,8,9));
    
        2
  •  1
  •   Robin    15 年前

    ,有几十亿可供选择。。。

        3
  •  1
  •   mkoistinen    15 年前

    注意,我在这里和那里用省略号(…)简化了代码。

    <?php
       function hiddenmenu($activeicon1 = 0, $activeicon2 = 0, ..., $activeicon9 = 0) {
          if ($activeicon1) {
    ?>
             <div class="icon-no-spacer">
                <p><a id="activeicon1" href="index.php" title=""><img src="images/icons/48/display.png" alt="" />Dashboard</a></p>
             </div>
    <?php
          }
          if ($activeicon2) {
    ?>
    
             <div class="icon-no-spacer">
                <p><a id="activeicon2" href="post-news.php" title=""><img src="images/icons/48/text_rtf.png" alt="" />Post News</a></p>
             </div>
    <?php
          }
          ...
       }
    ?>
    

    0 ,这是无效的,因为ID必须以字母开头,并且必须是唯一的。此外,您还需要逻辑来打开和关闭这些菜单项。这个 if 我在上面使用的语句应该在这里有所帮助。

    祝你好运!

        4
  •  0
  •   OIS    15 年前

    php代码:

    <?php
    function processTemplate($_file, $_vars)
    {
        //todo: check if file exists
        extract($_vars);
        ob_start();
        include $_file;
        return ob_get_clean();
    }
    
    function processArray($template, $choices) {
        $output = '';
        foreach ($choices as $choice) {
            $output .= processTemplate($template, $choice);
        }
        return $output;
    }
    
    $choices = array(
        1 => array(
            'id' => '1',
            'link' => "index.php",
            'image' => "images/icons/48/display.png",
            'text' => "Dashboard",
        ),
        2 => array(
            'id' => '2',
            'link' => "post-news.php",
            'image' => "images/icons/48/text_rtf.png",
            'text' => "Post News",
        ),
        //etc
    );
    
    $ids = array_flip(array(1,2));
    $chosen = array_intersect_key($choices, $ids);
    echo processArray('menu.phtml', $chosen);
    

    模板文件:菜单.phtml

    <div class="icon-no-spacer">
        <p>
            <a id="<?php echo $id; ?>" href="<?php echo $link; ?>" title="">
                <img src="<?php echo $image; ?>" alt="" />
                <?php echo $text; ?>
            </a>
        </p>
    </div>
    
    推荐文章