css — настройка & quot; активная & quot; раскрывающееся меню включает в себя «nav.php»;

Установка «активного» статуса в выпадающем меню, когда файл nav.php включен в.

Этот пост не столько вопрос, сколько решение php новичка для решения общей проблемы.

Я создал свой сайт, используя общий метод:

<?php
include "admin.php"; // handles MySQL connection and mysqli prepared stmts. etc.
include "header.php";
include "nav.php";  // nav with drop down menu
?>
<!-- html of the page -->

Все было хорошо, пока я не попытался установить «активную» соответствующую вкладку и вложенную вкладку. Конечно, любой дизайнер сайта столкнулся с этой проблемой. Я пытался найти ответы на вопросы, но не получил никакого удовлетворения. Так что я придумал свой.

Допустим, у веб-сайта есть 4 вкладки (часто задаваемые вопросы о продукции about_us), а самый глубокий выпадающий список — 6 вложенных вкладок.

Я добавил эту строку в конец admin.php:

$about = $prod = $faq = $cont = $sub1 = $sub2 = $sub3 = $sub4 = $sub5 = $sub6 = "nothing";

Не был уверен, нужно ли мне, но я добавляю это в CSS

.nothing { }

Верх каждой страницы сайта:

<?php
include "admin.php";

/** if this page corresponds to the products tab and the fifth sub menu **/
$prod = $sub5 = "active"; // or whatever css uses as the class name

include "header.php";
include "nav.php";  // nav with drop down menu
?>

В nav.php имя класса css отображается в

<div id="centeredmenu">
<nav id="nav">
<ul>
<li class="<?php echo $about; ?>"><a href="about.php">About Us</a>
</li>
<li class="<?php echo $prod; ?>"><a href="/products/index.php">Our Products</a>
<ul>
<li class="<?php echo $sub1; ?>"><a href="/products/index.php">Wedgets</a></li>
<li class="<?php echo $sub2; ?>"><a href="/products/grommets.php">Grommets</a></li>
<li class="<?php echo $sub3; ?>"><a href="/products/some.php">Some</a></li>
<li class="<?php echo $sub4; ?>"><a href="/products/more.php">More</a></li>
<li class="<?php echo $sub5; ?>"><a href="/products/useless.php">Useless</a></li>
<li class="<?php echo $sub6; ?>"><a href="/products/stuff.php">Stuff</a></li>
</ul>
</li>

Так что есть мой новый способ активировать включенный навигационный файл.

Мне бы очень хотелось посмотреть, как профессионалы решат эту проблему. Давайте поставим галочку для того, какое решение получит большинство голосов своих коллег. Я уверен, что это не будет моим.

0

Решение

не будет ли легче справиться со всем этим с помощью CSS, скрывая стили и сделав стилизацию на текущей странице активной (показать ее), таким образом классы всегда будут одинаковыми, но не будут отображаться, за исключением выражений if, меньше назначений, я полагаю проще в обслуживании.

0

Другие решения

Если я правильно следовал за хлебными крошками, которые бросал Фред, я предложу другой метод установки «actve».

http://example.com/someone/has/too/complicated/of_a/dirctory/structure.php

В моем случае, так как у меня уже есть админ-файл, код php будет идти в admin.php

admin.php

<?php
$path = $_SERVER['PHP_SELF'];

// get filename
$file = $_SERVER[PHP_SELF];
$file = basename($file);  //structure.php

// get directory
$dir = dirname($path);
$dir = explode("/", $dir);
$dir = array_slice($dir, -1, 1); // by adjusting the offset each directory name can be isolated
$dir = implode($dir);
?>

и в nav.php

<div id="centeredmenu">
<nav id="nav">
<ul>
<li <?php if($file === "about.php")echo 'class="active"'; ?>><a href="about.php">About Us</a>
</li>
<li <?php if($dir === "products")echo 'class="active"'?>><a href="/products/index.php">Our Products</a>
<ul>
<li <?php if ($file === "index.php")echo 'class="active"'; ?>><a href="/products/index.php">Wedgets</a></li>
</ul>
</li>

Единственная проблема, которую я вижу при получении имени каталога в этом методе, заключается в том, что вы работаете в обратном направлении (из /structure.php обратно в / кто-то /

Это может быть особенно запутанным при работе с глубокой структурой каталогов, в которой непонятно, какой уровень каталогов должен быть «активным».

Так что для выпадающих меню я бы лично использовал:

admin.php

  <?php
// get directory
$dir = dirname($path);
$dir = explode("/", $dir);
$dir = array_reverse ($dir, true); // Reverse the order

// and then select the directory names by referring to their depth in the directory structure.

$dir1 = isset($dir[1])? $dir[1]) : NULL; //someone
$dir2 = isset($dir[2])? $dir[2]) : NULL; //has
$dir3 = isset($dir[3])? $dir[3]) : NULL; //too
$dir4 = isset($dir[4])? $dir[4]) : NULL; //complicated
$dir5 = isset($dir[5])? $dir[5]) : NULL; //of_a
$dir6 = isset($dir[6])? $dir[6]) : NULL; //directory
?>

nav.php

<li <?php if ($dir4 === "complicated")echo 'class="active"'; ?>>
<a href="/someone/has/too/complicated/index.php">Wedgets</a></li>

// another area of the website could be:
<li <?php if ($dir4 === "this")echo 'class="active"'; ?>>
<a href="/someone/keeps/making/this/directory/structure/too/long/index.php">More_Wedgets</a></li>
0

По вопросам рекламы [email protected]