[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Организация меню и динамического title в шапке
santaros
Добрый день, сообщество.
У меня имеется мой новостной скрипт. Собственно в нём существуют несколько разделов. Каждый раздел это реальный файл, который вызывается с помощью index.php файла.

index.php

<? 
ob_start();

require_once('inc/config.php');
require_once('inc/header.php');

if (($_GET == null) or(isset($_GET['op']))) {

$op = !isset($_GET['op']) ? "main" : $_GET['op'];

if( !is_readable( "inc/pages/$op.php" ) ){

die( "Hacking attempt..." );

} elseif(!empty($_GET["op"]) && is_readable("pages/{$_GET["op"]}.php")) {

$op = basename($_GET["op"]);
$op = preg_replace( "#[^a-z\-_]#", "", $op );
$op = str_ireplace(array("http://", "ftp://", "https://", "../"), "", $op);

}

require_once("inc/pages/{$op}.php");

} else {
die( "Hacking attempt..." );
}

require_once('inc/footer.php');

ob_flush();
?>



header.php
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta
http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>
Новости</title>
<link
rel="stylesheet" type="text/css" href="inc/design/style.css" media="screen">

<div>
<ul>
<li
class='active'><a href="?">Новости</a></li>
<li
class=''><a href="?op=search">Поиск</a></li>
<li
class=''><a href="?op=stats">Статистика</a></li>
</ul>
</div>


Как видно из кода шапки, тег title статичен и ни как не обрабатывается. Это моя первая проблема.

Вторая проблема в меню в шапки. Хотелось бы выделять название раздела если он открыт. А для этого нужно привязать css класс 'active' к своему разделу, если он открыт.

Подскажите пожалуйста как будет правильней, с учётом архитектуры скрипта, организовать динамический <title> в шапке.

А так же, как правильнее организовать выделение пункта меню если он открыт. Мне на ум пришла только привязка к ссылкам, что то типа:

f ((!isset($_GET['news'])) {echo 'class="active"';} ........... и т.д. Но это же нужно будет писать кучу условий для каждого меню.... не очень удобно.

Возможно записать всё в какой то массив?



Спустя 4 минуты, 56 секунд (11.02.2011 - 16:11) Snus написал(а):
santaros
Как вариант можно с массивом поиграться, но лучше все-таки в БД.

$arrMenus = array(
'1' => 'Новости',
'2' => 'Поиск',
'3' => 'Статистика'
);


foreach($arrMenus as $key => &$val){
echo '<li class="';
echo ($key == $_GET['op']) ? 'active' : '';
echo '"><a href="?op='.$key.'">'.$val.'</a></li>';
}

Спустя 6 минут, 6 секунд (11.02.2011 - 16:18) santaros написал(а):
Snus Спасибо за ответ.
По поводу БД, просто не хотелось бы создавать новую таблицу, и делать к ней запрос каждый раз из за трёх разделов.

Ваше решение интересное, сегодня же попробую.


А что думаете по поводу <title> ?

Спустя 5 секунд (11.02.2011 - 16:18) inpost написал(а):
if(isset($_GET['op']) && $_GET['op'] == 'search') {echo ' class="active"';}
- так лучше всего, всё прозрачно. Можно конечно выводить из массива, где в массиве будут имена разделов.

А title - формируй его в контроллере в зависимости от выбранного раздела.
header - это первый вывод общего макета на экран, до него идёт индекс, между ними необходимо поместить router-controller для обработки информации, там и будешь формировать описание титулки, мета-ключей и мета-описания (для сео).

Более подробно обо все этом на сайте irbis-team.com

Спустя 2 часа, 48 минут, 34 секунды (11.02.2011 - 19:06) Guest написал(а):
Snus У меня главная страница (Новости) это index.php?op=main и index.php

Подскажите как сделать так что бы и при заходе на просто index.php название раздела Новости подсвечивалось?


inpost Спасибо почитаю.


Спустя 4 минуты, 50 секунд (11.02.2011 - 19:11) inpost написал(а):
if(!isset($_GET['op']))
$op = 'main';
else
$op = $_GET['op'];

Спустя 8 минут, 20 секунд (11.02.2011 - 19:19) santaros написал(а):
inpost
Это в примере страниц.
А если в примере Snus с массивом.


  foreach($arrMenus as $key => &$val){
echo '<li class="';
echo ($key == $_GET['op']) ? 'active' : '';
echo '"><a href="?op='.$key.'">'.$val.'</a></li>';
}


Там он работает только для страниц index.php?op=

Но у меня раздел новости находится на index.php?op=main а так же одновременно и на index.php

Так вот, при заходе на index.php меню не подсвечивает раздел новости.

Спустя 18 минут, 39 секунд (11.02.2011 - 19:38) inpost написал(а):
Мы инициализировали $op, зачем в примере используешь $_GET['op'] ? Мы тут готовое не даём, а лишь показываем примеры кодов, думать приходится своей головой =)

Спустя 8 минут, 59 секунд (11.02.2011 - 19:47) santaros написал(а):
inpost
Всё, дошло ))) Избавился в массиве от $_GET['op'], добавил Ваше условие и всё заработало ))
Спасибо.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.