这可能很简单,但我刚刚开始使用PHP。
我正在尝试创建一个通用标头,并希望使用PHP使链接具有基于currant url的文件夹结构的CSS类。
这个想法是有3个级别的导航,1级将由第一个文件夹设置,2级由子文件夹设置,3级将由php文件的名称设置。
例如,如果您有网址www.mysite.com/Home/Aboutus/History.php?id=1
选项“Home”将在菜单的第1级激活 “AboutUs”将在第二级激活 并且“历史”将在第3级活跃
HTML
<a href="#"><div class="Menu-1-Button">
<p class="Menu-1-Button-Text">Option1A</p></div></a>
<a href="#"><div class="Menu-1-Button">
<p class="Menu-1-Button-Text">Option1B</p></div></a>
<a href="#"><div class="Menu-1-Button">
<p class="Menu-1-Button-Text">Option1C</p></div></a>
</div>
<div id="Selected-Option1A">
<div class="Sub-Menu-2">
<a href="#"><div class="Menu-2-Button">
<p class="Menu-2-Button-Text">Option2A</p></div></a>
<a href="#"><div class="Menu-2-Button">
<p class="Menu-2-Button-Text">Option2B</p></div></a>
<a href="#"><div class="Menu-2-Button">
<p class="Menu-2-Button-Text">Option2C</p></div></a>
</div>
<div id="Sub-Menu-3">
<a href="#"><div class="Menu-3-Button">
<p class="Menu-3-Button-Text">Option3A</p></div>
<a href="#"><div class="Menu-3-Button">
<p class="Menu-3-Button-Text">Option3B</p></div>
<a href="#"><div class="Menu-3-Button">
<p class="Menu-3-Button-Text">Option3C</p></div>
</div>
</div>
<div id="Selected-Option1B">
<div class="Sub-Menu-2">
<a href="#"><div class="Menu-2-Button">
<p class="Menu-2-Button-Text">Option2A</p></div></a>
<a href="#"><div class="Menu-2-Button">
<p class="Menu-2-Button-Text">Option2B</p></div></a>
<a href="#"><div class="Menu-2-Button">
<p class="Menu-2-Button-Text">Option2C</p></div></a>
</div>
<div id="Sub-Menu-3">
<a href="#"><div class="Menu-3-Button">
<p class="Menu-3-Button-Text">Option3A</p></div>
<a href="#"><div class="Menu-3-Button">
<p class="Menu-3-Button-Text">Option3B</p></div>
<a href="#"><div class="Menu-3-Button">
<p class="Menu-3-Button-Text">Option3C</p></div>
</div>
</div>
在我的标题上,底部的2个菜单级别将根据在第一个菜单级别上选择的选项进行更改,这样做会给每个Selected-Optionx div一个属性display:none并使用与活动类相似的技术给一个Selected-Option1x div一个display:block,取决于在第一个菜单级选择的选项。
所以基本上我想知道如何根据使用PHP的URL中的currant文件夹给出一些“活动”类。
谢谢,
答案 0 :(得分:1)
当然可以通过PHP执行您的请求,但最终会得到一个糟糕,复杂和单一的结构。
如果您实现该框架,它将强制您扭曲您的内容以适应这个任意3级结构。你最有可能最终得到的内容只是因为你设计的工具强迫你这样做。
此外,您最终会得到一个填充隐藏子页面的单页应用程序 加载和消耗更多资源需要更长的时间,没有额外的好处,因为在整个文档加载之前,您将无法显示任何有意义的内容。
所有这些都说,这里有一些代码可能会显示它的外观:
$tree = array (
"optionA" => array (
"optionA1" => array (
"optionA1a" => "",
"optionA1b" => "",
"optionA1c" => ""),
"optionA2" => array (
"optionA2a" => "",
"optionA2b" => "",
"optionA2c" => ""),
"optionA3" => array (
"optionA3a" => "",
"optionA3b" => "",
"optionA3c" => "")),
"optionB" => array (
"optionB1" => array (
"optionB1a" => "",
"optionB1b" => "",
"optionB1c" => ""),
"optionB2" => array (
"optionB2a" => "",
"optionB2b" => "",
"optionB2c" => ""),
"optionB3" => array (
"optionB3a" => "",
"optionB3b" => "",
"optionB3c" => "")));
foreach ($tree as $n1 => $l2)
foreach ($l2 as $n2 => $l3)
foreach ($l3 as $n3 => $junk)
{
echo "<a href=http::/whatever.what/$n1/$n2/$n3.html>...whatever...</a>";
}
如果你想要一个忠告,放弃制作通用框架的梦想
通用性对于销售产品很有用,也很难实现。
把它留给营销人员。
答案 1 :(得分:0)
我不确定我是否正确理解了您的问题,但这是我使用一个文件进行所有导航的方式,并且仍保留我可能拥有的任何class="active"
内容。
标题中的某处:
$url = $_SERVER['REQUEST_URI'];
在每个链接上,相应地更改名称
<a <?php if($url == '/studentdb/index.php'){ echo "class='active'";} ?> href="index.php">
修改强>
如果您希望在用户位于目录中时回显class active
而不管页面是什么,您可以使用strpos
或stristr
来检查$ url,如果返回正数,那么您将回显类。我使用!==
表示如果不是假,即为真。
<a <?php if(strpos($url, 'myDirectory') !== false){ echo "class='active'";} ?> href="index.php">