Меню для сайта на PHP

Форум для тех кто начинает осваивать язык php.
Аватара пользователя
Лeйлa
Сообщения: 38
Зарегистрирован: Ср апр 08, 2015 9:42 am

Меню для сайта на PHP

Сообщение Лeйлa » Ср апр 08, 2015 11:01 am

Здравствуйте. Я в php новичок можно сказать, что полный нуб, по этому постоянно кого-то прошу помочь в создании какой-то программы.
Сейчас я хочу попросить создать меню, ну или покажите пример с описанием, как это сделать самостоятельно.

Что я хочу в меню? Некоторые пункты меню должны то появляться, то исчезать на определенных страницах. Скажем на главной странице index.php не должно быть ссылки на главную, должна остаться только надпись. Ссылка на главную страницу должна быть на других страницах. То же самое с другими ссылками в меню. Конечно такое можно сделать на чистом html, но стоит всего один шаблон на весь сайт, а меню в нём выводится вот так:

Код: Выделить всё

<?=$menu;?>
и сама переменная создаётся примерно так (меню не всё, это для примера):

Код: Выделить всё

$menu = '<a href="index.php">Главная</a> <a href="topic.php">Темы</a>'; 
Спасибо за помощь.

Реклама
Аватара пользователя
Slash
Администратор
Сообщения: 2121
Зарегистрирован: Сб авг 11, 2012 7:39 am
Поблагодарили: 74 раза

Re: Меню для сайта на PHP

Сообщение Slash » Ср апр 08, 2015 12:07 pm

Вот, что пришло на ум:

Код: Выделить всё

$page = basename($_SERVER['PHP_SELF']); # Получаем имя текущего файла
if ($page == 'topic.php'): # Если текущий файл topic.php:
    $menu = '<a href="index.php">Главная</a> <strong>Темы</strong>';
else: # Если главная страница
    $menu = '<strong>Главная</strong> <a href="topic.php">Темы</a>';
endif; 

lyod
Сообщения: 75
Зарегистрирован: Пн янв 06, 2014 11:13 pm
Поблагодарили: 1 раз

Re: Меню для сайта на PHP

Сообщение lyod » Ср апр 08, 2015 1:17 pm

Мой вариант:

Код: Выделить всё

<?php
    # Массив меню
    $menu = array(
        'Главная' => 'index.php',
        'Темы'    => 'topic.php'
    );
    
    # Получаем имя текущего файла
    $page = basename($_SERVER['PHP_SELF']);
?>
<?php foreach($menu as $text => $href):?>
    <?php if($page == $href):?>
        <strong><?=$text?></strong>
    <?php else:?>
        <a href="<?=$href?>"><?=$text?></a>
    <?php endif;?>
<?php endforeach;?>
Если у Вас каждая страница в своём файле, то можно так, как я показал. Если единая точка входа - то тогда можно отталкиваться от маршрутов, а не использовать basename.

Аватара пользователя
Лeйлa
Сообщения: 38
Зарегистрирован: Ср апр 08, 2015 9:42 am

Re: Меню для сайта на PHP

Сообщение Лeйлa » Ср апр 08, 2015 4:52 pm

Slash, lyod, спасибо Вам за помощь. Мне очень понравился вариант у lyod'а.
Теперь я собираюсь сделать так: в шаблоне заменю:

Код: Выделить всё

<?=$menu;?>
на:

Код: Выделить всё

<?php foreach($menu as $text=>$href):?>
    <?php if($page == $href):?>
        <strong><?=$text?></strong>
    <?php else:?>
        <a href="<?=$href?>"><?=$text?></a>
    <?php endif;?>
<?php endforeach;?>
Создам отдельный файл menu.php, с кодом:

Код: Выделить всё

<?php
$menu = array(
    'Главная' => 'index.php',
    'Темы'    => 'topic.php'
);
    
$page = basename($_SERVER['PHP_SELF']); 
и подключу его include к основным файлам сайта.
Спасибо за помощь! :)

lyod
Сообщения: 75
Зарегистрирован: Пн янв 06, 2014 11:13 pm
Поблагодарили: 1 раз

Re: Меню для сайта на PHP

Сообщение lyod » Ср апр 08, 2015 10:24 pm

Лeйлa, не за что :). Возникнут вопросы - заходите - поможем, чем сможем :).

Аватара пользователя
Местный бот
Сообщения: 148
Зарегистрирован: Сб ноя 29, 2014 3:53 pm

Re: Меню для сайта на PHP

Сообщение Местный бот » Чт апр 09, 2015 9:51 pm

lyod, отличный скрипт! Ты гений!
Стало интересно и решил взять себе такой же вариант для создания меню. Но есть вопрос, прозьба, как можно к этому меню привентить еще ссылки Регистрация, Вход - для гостей, и Выход - для авторизованых пользователей?
Что бы авторизованый пользователь не видел кнопки Ригистрация и Вход, а гость не видел кнопки Выход. Спасибо.

Аватара пользователя
Slash
Администратор
Сообщения: 2121
Зарегистрирован: Сб авг 11, 2012 7:39 am
Поблагодарили: 74 раза

Re: Меню для сайта на PHP

Сообщение Slash » Пт апр 10, 2015 9:50 am

Местный бот, я делал так: забивал переменные:

Код: Выделить всё

$logged = isset($_SESSION['user_login']) and isset($_SESSION['user_id']); #Для авторизованного пользователя
$guest  = empty($_SESSION['user_login']) or empty($_SESSION['user_id']);  #Для гостя 
А потом уже в шаблоне можно так:

Код: Выделить всё

<?php if ($guest): ?>
    <a href="login.php?p=registration">Регистрация</a> &bull; <a href="login.php">Вход</a>
<?php else: ?>
    <a href="login.php?p=exit">Выход [ <?=$_SESSION['user_login']; ?> ]</a>
<?php endif; ?>
Можно написать этот код рядом с меню от lyod, как то так:

Код: Выделить всё

<?php foreach($menu as $text=>$href): ?>
    <?php if($page == $href): ?>
        <strong><?=$text; ?></strong>
    <?php else: ?>
        <a href="<?=$href; ?>"><?=$text; ?></a>
    <?php endif; ?>
<?php endforeach; ?>

<?php if ($guest): ?>
    <a href="login.php?p=registration">Регистрация</a> &bull; <a href="login.php">Вход</a>
<?php else: ?>
    <a href="login.php?p=exit">Выход [ <?=$_SESSION['user_login']; ?> ]</a>
<?php endif; ?>
Код ссылки Выход в моем примере Выход [ <?=$_SESSION['user_login']; ?> ] - выводит рядом со словом Выход имя авторизованного пользователя, например Выход [ Slash ] (как на этом форуме). Если по Вашему это лишнее, можете просто удалить переменную [ <?=$_SESSION['user_login']; ?> ].

Ответить Пред. темаСлед. тема

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость