0

私は PHP の使用にかなり慣れていませんが、このナビゲーションの前は、PHP の使用範囲は単純なインクルードでした。

variables.php 内の配列から取得した変数を使用して、ナビゲーションのリンクを動的に生成する navigation.php ファイルを作成しました。

全体的な目標は、変数を編集するだけで、リンク、サブナビ、サブサブナビ、サブサブサブナビを追加/削除することです。

HTML構造を生成するために私が使用している方法は、私には不格好に感じます。それはうまく機能しますが、これを行うより簡単な方法があるように感じます...

また、サブナビが存在する LI には追加のスタイリングが必要です (サブナビが存在することを示す矢印)。それを動的に生成したいと思います。

つまり、私の質問は次のとおりです。

  1. これを行う簡単な方法はありますか?
  2. サブナビゲーションが存在するかどうかに基づいて動的に my を生成する方法はありますか?

各ページには次のコードがあり、ページによって異なります。

<?php $title = 'Home'; ?>

私の変数.php:

<!-- NAVIGATION ARRAY -->

<?php
$nav_mini = array(
    'Home' => 'index.php',
    'About' => 'about.php',
    'Services' => 'services.php'
    );
?>

<?php
$nav_main = array(
    'Home' => 'index.php',
    'About' => 'about.php',
    'Services' => 'services.php',
    'Portfolio' => 'contact.php',
    'Clients' => 'about.php',
    'Gallery' => 'services.php',
    'News' => 'services.php',
    'Contact Us' => 'contact.php'
    );
?>

<?php // SUB NAV ARRAYS

$nav_sub_about = array(
    'Our Team' => 'about.php'
    );

$nav_sub_michael = array(
    'Michael' => 'index.php',
    'Aaron' => 'about.php',
    'Kenny' => 'about.php',
    'David' => 'about.php'
    );

$nav_sub_services = array(
    'Get Found' => 'about.php'
    );

?>

ナビゲーション PHP ファイル main-nav.php

    <?php 

        foreach ( $nav_main as $key => $value ) {

            echo "<li><a ";
                echo "class='"; // STARTS CLASS=
                if ( $title == $key) { 
                echo "active "; }// ADDS ACTIVE CLASS TO LINK OF CURRENT PAGE
            echo "' "; // END QUOTES FOR CLASS="


            echo "href='$value'>$key";

                if ( $key == "About") { // STARTS IF SEQUENCE FOR SUBNAV ARROWS
                    echo "<span class='arrow'> +</span>";}
                elseif ( $key == "Services") {
                    echo "<span class='arrow'> +</span>";}

            echo "</a>\n";  // END ANCHOR TAG FOR MAIN NAV LINKS



//----------------------------------------------------------------------------------------------------------//
// PLEASE START SUB-NAVS HERE ------------------------------------------------------------------------------//
// AT THIS POINT A NEW <LI> IS GENERATED FROM THE FIRST FOREACH, IF THE BELOW IS TRUE IT POPULATES A SUBNAV //      


        if ( $key == "About"){  // START SUBNAV FOR ABOUT
            echo "<ul class='main-sub-nav'>"; // THIS LINE WAS ADDED TO START THE <UL> FOR THE SUBNAV, IT ENDS ON LINE 14

            foreach ( $nav_sub_about as $key => $value ) {
                echo "<li><a href='$value'>$key";

                    if ( $key == "Our Team") { // STARTS IF SEQUENCE FOR SUBNAV ARROWS
                    echo "<span class='arrow'> +</span>";}

                echo "</a>\n"; // ENDS ANCHOR TAG FROM SUBNAV LI

                    // SUB-SUB-NAV STARTS HERE
                        if ( $key == 'Our Team') {
                        echo "<ul class='main-sub-sub-nav'>"; // THIS STARTS THE UL FOR SUB-SUB-NAV

                            foreach ($nav_sub_michael as $key => $value ) {
                        echo "<li><a href='$value'>$key</a></li>\n";
                    }
                    echo "</ul>"; // THIS ENDS THE SUB-SUB-NAV UL STARTED ON LINE 34
                echo "</li>";}// THIS IS THE END IF <LI> FROM THE SECOND FOREACH ON LINE 35

        }

        echo "</ul>"; // THIS WAS ADDED TO END THE SUBNAV <UL> STARTED ON LINE 11
        echo "</li>";} // THIS IS THE END OF THE <LI> FROM THE FIRST FOREACH ECHO FROM LINE 8

//----------------------------------------------------------------------------------------------------------//
// AT THIS POINT A NEW <LI> IS GENERATED FROM THE FIRST FOREACH, IF THE BELOW IS TRUE IT POPULATES A SUBNAV //

            if ( $key == "Services"){
                echo "<ul class='main-sub-nav'>"; // THIS LINE WAS ADDED TO START THE <UL> FOR THE SUBNAV, IT ENDS ON LINE 14

                foreach ( $nav_sub_services as $key => $value ) {
                    echo "<li><a href='$value'>$key</a></li>\n";}
                echo "</ul>"; // THIS WAS ADDED TO END THE SUBNAV <UL> STARTED ON LINE 11
                echo "</li>";} // THIS IS THE END OF THE <LI> FROM THE FIRST FOREACH ECHO FROM LINE 8



        } // THIS BRACKET ENDS THE ENTIRE SET OF PHP.  ITS PAIR IS ON LINE 19

?>

全体的な目標は、変数を編集するだけで、リンク、サブナビ、サブサブナビ、サブサブサブナビを追加/削除することです。

これは、このナビゲーション構造が機能する実際の例です... http://khill.mhostiuckproductions.com/siteLSSBoilerPlate/

4

2 に答える 2

0

あなたがやっていることはほとんど正しいですが、あなたは自分自身のコードを自分で書くようにしています.代わりに、それを汎用にすることを許可するので、必要に応じて自分自身を呼び出すことができる関数を作成して、これを行います:

$menu_items = array(
    'Home' => 'index.php'
    'About' => array('about.php', 
         array('Our Team'=>'ourteam.php'),
     etc
    );
?>
  • 皮切りに<ul>
  • 指定された配列をループする
  • 追加<li>
  • is_string() の場合、それは 1 つの項目の追加です<a href>
  • is_array() の場合、サブアイテムがあり、
    • を追加<a href>
    • 2 番目の要素をこの関数に送信し、返される html を追加します
  • 近い</li>
  • 近い</ul>
  • 返す

1 つの関数は、メインまたはサブのすべての要素を処理し、それを 1 回呼び出すと、サブ リストの数に関係なく、リストが完成します。

ここで、ミニ メニューの場合、1 つの関数で html を作成する前に、キー (Home、About、Services) によってメイン配列から要素を選択するだけです。

于 2013-02-14T18:02:28.190 に答える
0

よりクリーンなソリューションは、多次元配列を使用してナビゲーションを構築し、それらを反復処理することです。value配列の が別の配列である場合、サブメニューがあることがわかります。

于 2013-02-14T18:02:42.657 に答える