|
|
|
|
|
для: Axxil
(23.07.2004 в 18:03)
| | >А что делать если на сервере эта штука отключена? И
>добраться до php.ini невозможно.
Ваш админ изверг, если оставил включёнными вывод предупреждений! :)))
Если у вас не отключены вложенные includ-ы, как на нашем сервере :(, вы можете использовать символ @ перед include для подавления вывода предупреждений и ошибок...
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=109&id_post=678 | |
|
|
|
|
|
|
|
для: Axxil
(23.07.2004 в 18:03)
| | достаточно в начале скрипта указать
<?
error_reporting = E_ALL & ~E_NOTICE ;
.......................
?>
|
| |
|
|
|
|
|
|
|
для: glsv (Дизайнер)
(23.07.2004 в 16:48)
| | А что делать если на сервере эта штука отключена? И добраться до php.ini невозможно. | |
|
|
|
|
|
|
|
для: Axxil
(23.07.2004 в 15:58)
| | >Но вся штука в том что интерпретатор ругается на то что не определены переменные отличные от id_menu.
А, ну есть такое дело. Как бы даже и не ругается, а предупреждает. Обычно PHP.INI настраивают таким образом чтобы подавить вывод подобных предепреждений.
B для работы и для отладки вполне хватает вот таких опций:
error_reporting = E_ALL & ~E_NOTICE
|
Это одна из директив php.ini
http://www.softtime.ru/info/articlephp.php?id_article=9 | |
|
|
|
|
|
|
|
для: glsv (Дизайнер)
(23.07.2004 в 15:35)
| | Но вся штука в том что интерпретатор ругается на то что не определены переменные отличные от id_menu.
Таким образом пришлось сделать так:
<?php
$active1=0;
$active2=0;
$active3=0;
$active4=0;
$active5=0;
$active6=0;
$active7=0;
$active8=0;
eval("\$active$id_menu = 1;");
function stylemenu($actmenu)
{
if ($actmenu==1)
{
return "class=mainmenuactive";
}
else
{
return "class=mainmenu";
}
}
include("menuitem.php");
?>
|
Вроде работает.
Но всё равно спасибо за очень ценный совет. | |
|
|
|
|
|
|
|
для: Axxil
(23.07.2004 в 11:47)
| | В смысле? Какие остальные?
Id_menu = идентификатор активного пункта меню. На каждой странице он один. Естественно ничего обнулять не надо.
Мы определяем эту переменную перед вставкой header.php на каждой странице.
В header.php функция eval создает переменную - имя, которой зависит от id_menu
<?php
eval("\$active$id_menu = 1;");
?>
|
Т.е. для id_menu=3 eval создает active3=1
Если бы мы передали id_menu=2, то с помощью eval была бы создана переменная active2=1
В каждом пункте меню нужно определить стиль. Делаем это след. образом
<a <? echo stylemenu($active1) ?> href="page1.php">О компании</a><br>
|
В каждом пункте меню мы вызываем функцию stylemenu() и передаем ей в качестве параметра переменные - для первого пункта передаем переменную $active1, для второго $active2, для третьего $active3 и так далее. И только одна из всех этих переданных переменных будет инициализирована. Остальные просто не существует на самом деле.
А функция stylemenu() именно это и проверяет. Если переданная переменная не инициализирована (ее нет), то она возвращает строку со стилем для невыделенного пункта меню. А если переменная инициализирована (функцией eval ), то будет возврашена строка со стилем для активного пункта меню. | |
|
|
|
|
|
|
|
для: glsv (Дизайнер)
(23.07.2004 в 10:58)
| | На каждой странице мы определяем одну переменную id_menu.
например $id_menu=3. А как же остальные. Они же остаются неопределёнными...
Неужели придётся на каждой странице их обнулять? | |
|
|
|
|
|
|
|
для: Axxil
(23.07.2004 в 10:42)
| | >Весь вопрос состоял в том, что я не понимал как в отсутствии глобальных переменных можно $id_menu передать в menu.php
Да, если сначала определять переменную, а потом подключать файл, то переменная будет доступна в подключаемом файле. Так как сначала файл подключается (сборка всей страницы), а только потом происходит выполнение кода в ней.
>чем отличается начало php кода <? от <?php
В принципе ничем. Но рhp (php.ini) можно настроить так, что бы он не понимал сокрашенную запись (<?) , а понимал только полную (<?php). Но мне серверов, настроенных таким образом еще не встречалось :) | |
|
|
|
|
|
|
|
для: glsv (Дизайнер)
(23.07.2004 в 10:15)
| | основные файлы у меня организованы следующим образом:
например news.php
<?php
include("../mainfiles/header.php");
include("../mainfiles/leftbox.php");
include("centerbox.php");
include("../mainfiles/rightbox.php");
include("../mainfiles/footer.php");
?>
|
где header.php, leftbox.php, centerbox.php, rightbox.php, footer.php соответствующие логические части страницы.
---------------------------------------
неаder+menu
---------------------------------------
leftbox * Centerbox *rightbox
---------------------------------------
footer+menu
---------------------------------------
в Header.php и footer.php теперь добавлю файл menu.php c вашими рекомендациями.
<?php
$id_menu = 3;
include("../mainfiles/header.php");// сюда включён файл menu.php
include("../mainfiles/leftbox.php");
include("centerbox.php");
include("../mainfiles/rightbox.php");
include("../mainfiles/footer.php");// сюда включён файл menu.php
?>
|
Весь вопрос состоял в том, что я не понимал как в отсутствии глобальных переменных можно $id_menu передать в menu.php
Теперь, обратив внимание на строку
<?php
eval("\$active$id_menu = 1;");
?>
|
я всё понял. Функция eval как то бегло рассматривается в литературе, а оказывается заслуживает большего уважения:)
Огромное вам спасибо.
Пойду трудится на благо Ruнета ;)))
P.S. Ещё вопрос можно?
чем отличается начало php кода <? от <?php | |
|
|
|
|
|
|
|
для: Axxil
(23.07.2004 в 09:45)
| | Но вроде бы все равно ничего не мешает поступать так как предложил я.
А $id_menu нужно определять прямо на страницах (main.php, photos.php и т.д.) перед подключанием header.php.
Может, конечно, мы не поняли друг друга...
А как подключается header.php на страницах?
И как выглядит файл menu.php?
Если не трудно - положите эти части кода в форум.
А чтобы в сообщение добавить код нужно абрамлять тэгами <code> и </code>. Только скобки не угловые, а квадратные [ ]. На странице добавления сообщения тэги, которые можно использовать описаны чуть выше формы ввода текста.
| |
|
|
|
|