[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Динамическое меню
Владимир Новицкий
Уважаемые профессионалы, возможно мой вопрос очень простой и решение лежит на поверхности, но я не догоняю... Просто скрипт не мой. Алгоритм построения меню я взял в сети (уже не помню где).


<ul id="nav">
<
li <?php
if (is_home())
{
echo "id=\"current\"";
}?>>
<?php if (is_home()) {
echo "<span><b>Главная</b></span>";
}?>
<a href="/" title="Главная"><b>Главная</b></a>
</
li>

<
li <?php
if (is_page('products'))
{
echo "id=\"current\"";
}?>>
<?php if (is_page('products')) {
echo "<span><b>Продукция</b></span>";
}?>
<a href="/products/" title="Продукция"><b>Продукция</b></a>
</
li>

<
li <?php
if (is_page('projects'))
{
echo "id=\"current\"";
}?>>
<?php if (is_page('projects')) {
echo "<span><b>Проекты</b></span>";
}?>
<a href="/projects/" title="Проекты"><b>Проекты</b></a>
</
li>

<
li <?php
if (is_page('partners'))
{
echo "id=\"current\"";
}?>>
<?php if (is_page('partners')) {
echo "<span><b>Партнеры</b></span>";
}?>
<a href="/partners/" title="Партнеры"><b>Партнеры</b></a>
</
li>

<
li <?php
if (is_page('contacts'))
{
echo "id=\"current\"";
}?>>
<?php if (is_page('contacts')) {
echo "<span><b>Контакты</b></span>";
}?>
<a href="/contacts/" title="Контакты"><b>Контакты</b></a>
</
li>

<
li <?php
if (is_page('search'))
{
echo "id=\"current\"";
}?>>
<?php if (is_page('search')) {
echo "<span><b>Поиск</b></span>";
}?>
<a href="/search/" title="Поиск"><b>Поиск</b></a>
</
li>
</
ul>

Выдаёт ошибку:
Fatal error: Call to undefined function is_home() in Z:\home\localhost\www\index.php on line 19</span>

С учётом остального кода, девятнадцатая строка, это:
if (is_home())

Раньше такой проблемы не было. Например, на этом сайте я использовал тот же алгоритм и всё работает. Сейчас стал использовать это в другом проекте и, вот такая ошибка.
Вообще не понимаю в чём дело.



Спустя 2 минуты (3.12.2009 - 16:47) Dezigo написал(а):
is_home() такой функции не существует.
проверь поключается ли она.

Спустя 3 минуты, 31 секунда (3.12.2009 - 16:50) Xpund написал(а):
Либо дабавь значение is_home(вотсюда)

Спустя 19 минут, 34 секунды (3.12.2009 - 17:10) Владимир Новицкий написал(а):
Цитата (Dezigo @ 3.12.2009 - 13:47)
is_home() такой функции не существует.
проверь поключается ли она.

Можно подробнее для чайника?
Я в PHP ничего не понимаю, скрипт был взят из интернета.
По ссылке, приведённой выше, я использовал этот скрипт и всё работало (в составе Wordpress). И строчка is_home() там присутствует.
Просто сейчас я тестирую страницу в Денвере, но не в составе Wordpress. Может в этом проблема? И где эта и остальные функции должны подключаться?

Цитата
Либо дабавь значение is_home(вотсюда)

Какое значение?

Спустя 2 минуты, 35 секунд (3.12.2009 - 17:12) Xpund написал(а):
is_home() попробуй замени на is_home('home')

Спустя 6 минут, 31 секунда (3.12.2009 - 17:19) ApuktaChehov написал(а):
is_home() - это вызываемая функция. Ее необходимо создать(объявить) после чего, ее можно будет вызывать. У Вас же, она не объявлена и соответственно не существует.

Возможно к странице, где Вы взяли этот скрипт подключаются дополнительные файлы с помощью: include или require. Обычно для упрощения кода, функции выносятся в отдельные файлы, а после подключаются в программе, где это необходимо.

Спустя 4 минуты, 5 секунд (3.12.2009 - 17:23) Dezigo написал(а):
function is_home()
{
# ... code here
return true;
}


как - пример твоей функции.

Спустя 1 час, 3 минуты, 31 секунда (3.12.2009 - 18:26) Владимир Новицкий написал(а):
Цитата (ApuktaChehov @ 3.12.2009 - 14:19)
is_home() - это вызываемая функция. Ее необходимо создать(объявить) после чего, ее можно будет вызывать. У Вас же, она не объявлена и соответственно не существует.

Возможно к странице, где Вы взяли этот скрипт подключаются дополнительные файлы с помощью: include или require. Обычно для упрощения кода, функции выносятся в отдельные файлы, а после подключаются в программе, где это необходимо.

Помогите, пожалуйста, разобраться.
В теме для Wordpress, которую я сделал для указанного выше сайта, вроде не подключаются никакие дополнительные файлы, имеющие отношение к этому меню, однако, там всё работает прекрасно.
Если не сложно, посмотрите кто-нибудь эту тему и подскажите. Я же просто скопировал оттуда меню и изменил только названия пунктов.
Меню находится в файле header.php.

Спустя 3 часа, 34 минуты, 33 секунды (3.12.2009 - 22:01) ApuktaChehov написал(а):
Я посмотрел код. Увы я Вам не смогу помочь. Код странный, очень странный.
Совсем не читабельный, в некоторых местах, даже абсурдный.
Мне показалось, что это кусок чего то большего.

Спустя 7 минут, 18 секунд (3.12.2009 - 22:08) Владимир Новицкий написал(а):
Цитата (ApuktaChehov @ 3.12.2009 - 19:01)
Я посмотрел код. Увы я Вам не смогу помочь. Код странный, очень странный.
Совсем не читабельный, в некоторых местах, даже абсурдный.
Мне показалось, что это кусок чего то большего.

Вы какой код имеете в виду? Тот, который я привёл в начале темы или в zip-архиве?

Спустя 11 часов, 17 минут, 46 секунд (4.12.2009 - 09:26) ApuktaChehov написал(а):
Тот, который на народе выложен. И еще мой Вам совет, если Вам нужно только меню, то лучше его сделать самому или скачать конкретно меню.
А такой способ, выдирания чего то из чего то, чревать последствиями, к тому же, как я понял, Вы с PHP особо не дружите.
Кто писал этот код, я не знаю, но стиль его написания привел меня в ужас. ph34r.gif
Хотя, возможно, это просто мера защиты своего детяща wink.gif

Спустя 2 часа, 46 минут, 9 секунд (4.12.2009 - 12:12) Raskolnikoff написал(а):
найдите простым пойском в том же TotalCommander'е в каком файле инициализируется эта функция( Будет текст, похожий на тот, что привел Dezigo). И подключите его с помощью include_once(имя_файла). Искать советую на сайте с рабочим вариантом.

Спустя 1 час, 37 минут, 12 секунд (4.12.2009 - 13:49) ApuktaChehov написал(а):
В том то и дело, что ни в одном файле эта функция не инициализируется.

Спустя 1 час, 7 минут, 28 секунд (4.12.2009 - 14:57) Krevedko написал(а):
ну попробуй вообще убрать эту функцую..точнее ее вызов

Спустя 6 минут, 2 секунды (4.12.2009 - 15:03) Владимир Новицкий написал(а):
Цитата (ApuktaChehov @ 4.12.2009 - 10:49)
В том то и дело, что ни в одном файле эта функция не инициализируется.

Да вот, то и интересно, что ни в одном файле темы этого нет. А всё, что не касается темы, это файлы самого движка Wordpress. И значит, эта функция должна быть там. Но я уверен, что скрипт не имеет никакого отношения к создателям Wordpress. Как тогда такое может быть?

Спустя 2 минуты, 42 секунды (4.12.2009 - 15:06) Владимир Новицкий написал(а):
Цитата (Krevedko @ 4.12.2009 - 11:57)
ну попробуй вообще убрать эту функцую..точнее ее вызов

Если её убрать, то меню работать не будет.
Смысл всего этого меню и всех этих мучений в том, чтобы пункт меню текущей страницы не являлся ссылкой.
Может, кто знает другой вариант воспроизвести это.

Спустя 22 минуты, 45 секунд (4.12.2009 - 15:28) ApuktaChehov написал(а):
И все? Нужно было только это?

Ок. Элементарный вариант:

Есть 2 страницы index.php и contact.php.
В index.php создаем переменную:
$srt = "index";

В contact.php создаем переменную:
$str = "contact";


Имеем 2 ссылки:
<a href="index.php">Главная</a>

и
<a href="contact.php">Связь</a>


Теперь код для каждой страницы:

if($str == "index")
{
$menu1 = "<a href="index.php">Главная</a>";
}
else
{
$menu1 = "Главная";
}

if($str == "contact")
{
$menu2 = "<a href="contact.php">Связь</a>";
}
else
{
$menu2 = "Связь";
}
echo($menu1. "|" .$menu2);


Это простейщий код.

Спустя 1 минута, 42 секунды (4.12.2009 - 15:30) Krevedko написал(а):
работать будет. может не совсем так как положено
насколько я понял из скрипта, эти функции определяют, на какой странице ты сейчас находишься и соответственно делают ссылку активной или нет.
мне вот что странно..говоришь ругается на функцию is_home
а вот там ниже есть функция is_page...
на нее не ругается ?
почти наверняка is_home должна лежать где-то там же где и is_page

Спустя 56 минут, 7 секунд (4.12.2009 - 16:26) Владимир Новицкий написал(а):
Цитата (Krevedko @ 4.12.2009 - 12:30)
работать будет. может не совсем так как положено
насколько я понял из скрипта, эти функции определяют, на какой странице ты сейчас находишься и соответственно делают ссылку активной или нет.
мне вот что странно..говоришь ругается на функцию is_home
а вот там ниже есть функция is_page...
на нее не ругается ?
почти наверняка is_home  должна лежать где-то там же где и is_page

Совершенно верно. Если тупо убрать из кода всё, что касается is_home, то ругаться начинает уже на следующую - is_page. Просто, когда ругается на is_home, то дальше ничего не грузится и, поэтому выдаётся только одна, первая ошибка.

Спустя 5 минут, 48 секунд (4.12.2009 - 16:32) Владимир Новицкий написал(а):
Вот сейчас вставил это меню в абсолютно другую тему Wordpress и всё опять заработало...

Спустя 16 минут, 23 секунды (4.12.2009 - 16:48) Krevedko написал(а):
значит там есть эти функции. смотри, какие файлы подключаются перед выводом меню и ищи в них. или воспользуйся кодом, что дал ApuktaChehov.
Кстати рабочий код дал

Спустя 2 часа, 26 минут, 56 секунд (4.12.2009 - 19:15) Владимир Новицкий написал(а):
Цитата (Krevedko @ 4.12.2009 - 13:48)
значит там есть эти функции. смотри, какие файлы подключаются перед выводом меню и ищи в них. или воспользуйся кодом, что дал ApuktaChehov.
Кстати рабочий код дал

Ну я понял. Будем искать. Спасибо!

Спустя 1 год, 23 дня, 8 часов, 2 минуты, 33 секунды (28.12.2010 - 03:18) Владимир Новицкий написал(а):
Вот, я тут подумал (как мог)... А можно подобное меню сделать с привязкой к адресу URL?
Например, как это сделано с помощью SSI:
<ul id="nav">
<!--#if expr="$DOCUMENT_URI=/^\/index.html/" -->
<li>Home</li>
<!--#else -->
<li><a id="logo" href="/">Home</a></li>
<!--#endif -->

<!--#if expr="$DOCUMENT_URI=/^\/services\/index.html/" -->

<li>Services</li>
<!--#else -->
<li><a href="/services/">Services</a></li>
<!--#endif -->

<!--#if expr="$DOCUMENT_URI=/^\/contacts\/index.html/" -->

<li>Contacts</li>
<!--#else -->
<li><a href="/contacts/">Contacts</a></li>
<!--#endif -->
</ul>

Вот, как это на PHP замутить?

Спустя 19 часов, 18 минут, 34 секунды (28.12.2010 - 22:36) Владимир Новицкий написал(а):
Я имею ввиду, как вот это <!--#if expr="$DOCUMENT_URI=/^\/index.html/" --> пишется на PHP?

Спустя 2 часа, 8 минут, 49 секунд (29.12.2010 - 00:45) Владимир Новицкий написал(а):
Сам разобрался!
Если кому интересно, вот рабочее current-меню (безо всяких функций):
	<u id="nav">
<
li><?php
$theuri = $_SERVER['REQUEST_URI'];
if ( ($theuri =="/") or ($theuri =="/index.php") ) {
$itemis = "главная";
}
else {
$itemis = "<a href=\"/\">главная</a>";
}
echo $itemis;
?></li>

<
li><?php
$theuri = $_SERVER['REQUEST_URI'];
if ( ($theuri =="/archive/") or ($theuri =="/archive/index.php") ) {
$itemis = "архив";
}
else {
$itemis = "<a href=\"/archive/\">архив</a>";
}
echo $itemis;
?></li>

<
li><?php
$theuri = $_SERVER['REQUEST_URI'];
if ( ($theuri =="/photos/") or ($theuri =="/photos/index.php") ) {
$itemis = "фото";
}
else {
$itemis = "<a href=\"/photos/\">фото</a>";
}
echo $itemis;
?></li>

<
li><?php
$theuri = $_SERVER['REQUEST_URI'];
if ( ($theuri =="/services/") or ($theuri =="/services/index.php") ) {
$itemis = "услуги";
}
else {
$itemis = "<a href=\"/services/\">услуги</a>";
}
echo $itemis;
?></li>

<
li><?php
$theuri = $_SERVER['REQUEST_URI'];
if ( ($theuri =="/contacts/") or ($theuri =="/contacts/index.php") ) {
$itemis = "контакты";
}
else {
$itemis = "<a href=\"/contacts/\">контакты</a>";
}
echo $itemis;
?></li>
</
ul>

Кто-нибудь из ГУРУ, гляньте. Не слишком кривое, в отличие от самого первого варианта?
Быстрый ответ:

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