このナビゲーションはほぼ完了しています...このリンクで確認できるナビゲーションを再帰的に生成する次のコードがあります: http://khill.mhostiuckproductions.com/siteLSSBoilerPlate/arraytest2.php
また、ラベルがページ タイトルであるすべてのリンクに「アクティブ」のクラスを正常に追加します。これまでのところ、私のコードはここにあります。下部にある私の質問を参照してください。私は javascript と jquery にタグを付けましたが、私は提案を受け入れますが、PHP ソリューションを好みます。このナビゲーションの全体的な目的は、以下の配列を介して単一のファイルを編集することにより、ナビゲーション要素を追加/削除/編集できるようにすることです。
ページの $title を設定します。
<?php $title = 'Home'; ?>
ナビゲーション配列:
<?php
$nav_array = array ('Home' => 'index.php',
'About' => array ( 'about.php', array (
'Michael' => array( 'michael.php', array (
'Blog' => 'blog.php',
'Portfolio' => 'portfolio.php')),
'Aaron' => 'aaron.php' ,
'Kenny' => 'kenny.php',
'David'=> 'david.php')),
'Services' => array ( 'services.php', array (
'Get Noticed' => 'getnoticed.php',
'Hosting' => 'hosting.php')),
'Clients' => 'clients.php',
'Contact Us' => 'contact.php'
);
$base = basename($_SERVER['PHP_SELF']);
?>
foreach:
<?php
echo "<ul>";
foreach ($nav_array as $nav_title => $nav_data) {
echo buildLinks($nav_title, $nav_data, $base, $title);
}
echo "</ul>";
?>
buildLinks 関数:
<?php // Building the links
function buildLinks ($label_name, $file_name, $active_class, $title) {
$theLink = '';
$navigation_list = false;
if (is_array($file_name)) {
$navigation_list = $file_name[1];
$file_name = $file_name[0];
}
// build the links with active class
if ($label_name == $title) {
$theLink = "<li><a class=\"active\" href=\"$file_name\">$label_name</a></li>\n";
} else {
$theLink = "<li><a href=\"$file_name\">$label_name</a></li>\n";
}
// recursively loop back through build links function
if ($navigation_list) {
$theLink .= "<ul>";
foreach ($navigation_list as $nav_title => $nav_data) {
$theLink .= buildLinks($nav_title, $nav_data, $active_class, $title);
}
$theLink .= "</ul>";
}
return $theLink; // print the nav
}
したがって、このナビゲーションの視覚的なスタイルは既に持っていますが、非再帰的な厄介なコードを使用して生成されています。ただし、次のリンクで参照しようとしている矢印を見ることができるので、私が達成しようとしていることを理解できます。http://khill.mhostiuckproductions.com/siteLSSBoilerPlate/
サブメニューが存在する nav 要素にのみ表示される矢印に注意してください...
これは、ラベル<span class='arrow'> +</span>
の内側に追加することによって行われます。<A>
たとえば... (nav_label = title が TRUE の場合、class="" はクラスをアクティブにすることができます)
<a class="" href="about.php">About<span class='arrow'> +</span></a>
したがって、再帰的に生成されているものにこの機能を追加する方法を見つけようとしています...私の最大の問題は、サブナビゲーションが存在するかどうか、およびこれがTRUEであるかどうかを特定する方法がよくわからないことだと思います、次にそれを追加します<span>
私は、elseif を使用して、buildLinks 関数内の元の IF ステートメントから拡張すると仮定します。そう...
// アクティブなクラスでリンクを構築します
if ($label_name == $title) {
$theLink = "<li><a class=\"active\" href=\"$file_name\">$label_name</a></li>\n";
} elseif ([what goes here?]) {
$theLink = "<li><a href=\"$file_name\">$label_name<span class='arrow'> +</span></a></li>\n";
} else {
$theLink = "<li><a href=\"$file_name\">$label_name</a></li>\n";
}
問題は、上記の elseif 行の [ここに何が入る?] です。また、elseif が 2 つ必要になることもわかりました。「if active = true AND if sub_menu = true」の場合は 1 つ、「if sub_menu = ture」の場合はこれ...
その時点で上記は...
if ($label_name == $title) {
$theLink = "<li><a class=\"active\" href=\"$file_name\">$label_name</a></li>\n";
} elseif ($label_name == $title && [what goes here?]) {
$theLink = "<li><a class=\"active\" href=\"$file_name\">$label_name<span class='arrow'> +</span></a></li>\n";
} elseif ([what goes here?]) {
$theLink = "<li><a href=\"$file_name\">$label_name<span class='arrow'> +</span></a></li>\n";
} else {
$theLink = "<li><a href=\"$file_name\">$label_name</a></li>\n";
}
この再帰的なナビゲーションを生成するのを手伝ってくれたので、私は完全に途方に暮れています.
$theLink = '';
$navigation_list = false;
if (is_array($file_name)) {
$navigation_list = $file_name[1];
$file_name = $file_name[0];
}
そして、これを理解するには上記の何かが必要だと思います^
もう一度質問です...これを機能させるには、コードの[ここに何が入るの?]ビットに何を入れる必要がありますか?
私の2番目の質問は、私がさらに調査することです。それは、できればMySQLを使用せずに、上記の配列をより動的にフィードするにはどうすればよいですか?
編集: 私はこれをもう少し調べましたが、自分で作成したのではないこのコードにまだこだわっています。
$navigation_list = false;
if (is_array($file_name)) {
$navigation_list = $file_name[1];
$file_name = $file_name[0];
}
is_array 演算子の大部分は理解しています。以上で、という$file_name[1];
ことで、ということ$file_name[TRUE]
でしょうか。そして、0 = FALSE の下の行については?
を含むリンクを印刷するために配列が存在するかどうかを検出する方法を理解するのに助けが必要です<span class="arrow"> +</span>