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

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

Меню для сайта на 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
Администратор
Сообщения: 2029
Поблагодарили: 62 раза

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
Сообщения: 76
Поблагодарили: 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

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
Сообщения: 76
Поблагодарили: 1 раз

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

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

Лeйлa, не за что :). Возникнут вопросы - заходите - поможем, чем сможем :).
Аватара пользователя
Местный бот
Сообщения: 153

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

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

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

echo 'Большой Привет от Местного бота!';
Аватара пользователя
Slash
Администратор
Сообщения: 2029
Поблагодарили: 62 раза

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']; ?> ].

Вернуться в «PHP»

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

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