Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Умное меню.

Сообщения:  [1-10]   [11-15] 

 
 автор: cheops   (23.07.2004 в 22:20)   письмо автору
 
   для: 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

   
 
 автор: Artem S.   (23.07.2004 в 22:13)   письмо автору
 
   для: Axxil   (23.07.2004 в 18:03)
 

достаточно в начале скрипта указать
<? 
error_reporting  
=  E_ALL & ~E_NOTICE ;
.......................
?>

   
 
 автор: Axxil   (23.07.2004 в 18:03)   письмо автору
 
   для: glsv (Дизайнер)   (23.07.2004 в 16:48)
 

А что делать если на сервере эта штука отключена? И добраться до php.ini невозможно.

   
 
 автор: glsv (Дизайнер)   (23.07.2004 в 16:48)   письмо автору
 
   для: 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

   
 
 автор: Axxil   (23.07.2004 в 15:58)   письмо автору
 
   для: 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");
 
?>

Вроде работает.
Но всё равно спасибо за очень ценный совет.

   
 
 автор: glsv (Дизайнер)   (23.07.2004 в 15:35)   письмо автору
 
   для: 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 ), то будет возврашена строка со стилем для активного пункта меню.

   
 
 автор: Axxil   (23.07.2004 в 11:47)   письмо автору
 
   для: glsv (Дизайнер)   (23.07.2004 в 10:58)
 

На каждой странице мы определяем одну переменную id_menu.
например $id_menu=3. А как же остальные. Они же остаются неопределёнными...
Неужели придётся на каждой странице их обнулять?

   
 
 автор: glsv (Дизайнер)   (23.07.2004 в 10:58)   письмо автору
 
   для: Axxil   (23.07.2004 в 10:42)
 

>Весь вопрос состоял в том, что я не понимал как в отсутствии глобальных переменных можно $id_menu передать в menu.php

Да, если сначала определять переменную, а потом подключать файл, то переменная будет доступна в подключаемом файле. Так как сначала файл подключается (сборка всей страницы), а только потом происходит выполнение кода в ней.

>чем отличается начало php кода <? от <?php
В принципе ничем. Но рhp (php.ini) можно настроить так, что бы он не понимал сокрашенную запись (<?) , а понимал только полную (<?php). Но мне серверов, настроенных таким образом еще не встречалось :)

   
 
 автор: Axxil   (23.07.2004 в 10:42)   письмо автору
 
   для: 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

   
 
 автор: glsv (Дизайнер)   (23.07.2004 в 10:15)   письмо автору
 
   для: Axxil   (23.07.2004 в 09:45)
 

Но вроде бы все равно ничего не мешает поступать так как предложил я.

А $id_menu нужно определять прямо на страницах (main.php, photos.php и т.д.) перед подключанием header.php.

Может, конечно, мы не поняли друг друга...
А как подключается header.php на страницах?
И как выглядит файл menu.php?

Если не трудно - положите эти части кода в форум.

А чтобы в сообщение добавить код нужно абрамлять тэгами <code> и </code>. Только скобки не угловые, а квадратные [ ]. На странице добавления сообщения тэги, которые можно использовать описаны чуть выше формы ввода текста.

   

Сообщения:  [1-10]   [11-15] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования