我非常接近這個導航做...我有以下的代碼生成遞歸我的導航,可在此鏈接中可以看出:http://khill.mhostiuckproductions.com/siteLSSBoilerPlate/arraytest2.php兩個PHP遞歸導航問題
它也成功地增加了一類「活動「的任何鏈接的標籤=頁面標題。下面是我的代碼,看到我的問題在底部。我已經標記了javascript和jquery,但我更喜歡PHP解決方案,儘管我願意接受建議。請注意,此導航的全部目的是通過編輯單個文件通過下面的數組添加/刪除/編輯導航元素。
設置頁面的標題$:
<?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/
注意,只出現在有一個子菜單導航存在的元素箭......
這是通過添加<span class='arrow'> +</span>
的<A>
標籤內部完成。因此,例如......(類=「」可能有類積極的,如果nav_label =標題是TRUE)
<a class="" href="about.php">About<span class='arrow'> +</span></a>
所以我試圖找出如何將此功能添加到正在遞歸產生什麼.. 。我想我最大的問題是,我不太清楚如何確定是否存在子導航,如果這是真實的,然後添加<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線的鏈接。另外,我意識到我需要兩個elseifs。其中一個用於「if active = true且如果sub_menu = true」,那麼這...以及一個用於「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];
}
而且我懷疑搞清楚這需要上面的東西^
所以我的問題再次...我需要把[我的代碼]位做什麼?
我的第二個問題,更是對我進一步的研究,這是我有什麼辦法可以養活上述陣列更動態,最好不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>
你有沒有考慮使用這個數據庫?而不是從文件中讀取,並且不得不編輯文件。 – 2013-02-22 17:25:11
我曾一度考慮它,它的東西我願意並希望在未來的探索。目前的簡短答案是,我沒有時間自我介紹數據庫以實現這一目標。這也是我稍後可以更新的內容。目前,我有兩個網站需要快速完成此工作,而我目前缺少的唯一功能是箭頭。 – Michael 2013-02-22 17:33:45