У меня имеется мой новостной скрипт. Собственно в нём существуют несколько разделов. Каждый раздел это реальный файл, который вызывается с помощью 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> ?
По поводу БД, просто не хотелось бы создавать новую таблицу, и делать к ней запрос каждый раз из за трёх разделов.
Ваше решение интересное, сегодня же попробую.
А что думаете по поводу <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 Спасибо почитаю.
Подскажите как сделать так что бы и при заходе на просто 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 с массивом.
Там он работает только для страниц index.php?op=
Но у меня раздел новости находится на index.php?op=main а так же одновременно и на index.php
Так вот, при заходе на index.php меню не подсвечивает раздел новости.
Это в примере страниц.
А если в примере 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'], добавил Ваше условие и всё заработало ))
Спасибо.
Всё, дошло ))) Избавился в массиве от $_GET['op'], добавил Ваше условие и всё заработало ))
Спасибо.