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

Форум PHP

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

 

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

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

тема: Горизонтальное меню. Помогите избавиться от <li> разумным способом

Сообщения:  [1-10]    [11-20]  [21-23] 

 
 автор: mihdan   (11.07.2008 в 16:10)   письмо автору
 
   для: Лена   (09.07.2008 в 11:49)
 

<div> не нужен, рекурсия тож

   
 
 автор: Лена   (11.07.2008 в 14:36)   письмо автору
 
   для: Trianon   (11.07.2008 в 13:01)
 

We are the chempions!
Получилось!!!
Но главный chempion - это вы, Trianon :-))
Ошибки свои нашла. Спасибо, я вам очень благодарна.

   
 
 автор: Trianon   (11.07.2008 в 13:01)   письмо автору
5.6 Кб
 
   для: Лена   (11.07.2008 в 12:34)
 

Сравнивать. У меня вот такой набор файлов выводит Ваше меню.

   
 
 автор: Лена   (11.07.2008 в 12:34)   письмо автору
 
   для: Trianon   (11.07.2008 в 12:22)
 

Нет, лучше не стало. Ни мне, ни скрипту :-)
Хотя теперь прямая ссылка из родителя, которая выводится в дочерний блок, есть.
Что будем делать?

   
 
 автор: Trianon   (11.07.2008 в 12:22)   письмо автору
 
   для: Лена   (11.07.2008 в 12:01)
 

У меня элементы подменю выскакивали и без него. Точнее - в том комплекте, что Вы тогда прислали.
Так что врядли он сильно влияет на замеченный Вами баг.
А вот неверное определение ссылки на дочерний блок влияет однозначно.
После замены фрагмента скрипта лучше не стало?

Я злюсь? И в мыслях не было...

   
 
 автор: Лена   (11.07.2008 в 12:01)   письмо автору
 
   для: Trianon   (11.07.2008 в 11:24)
 

Только не злитесь. Там еще один кусок кода есть, который я вам не прислала. Почему-то он выпал.

<script type="text/javascript">
//Синтаксис: tabdropdown.init("menu_id", [integer OR "auto"])
tabdropdown.init("colortab", 3)
</script>

Может, в этом проблема? Я его вставила в общий код, но ничего не поменялось

   
 
 автор: Trianon   (11.07.2008 в 11:24)   письмо автору
 
   для: Лена   (11.07.2008 в 11:00)
 

Само собой...
Похоже, я умудрился не последний вариант в ответ отправить.

<?


        
if($cmod != $mid_mod)
        {
           
$cmod $mid_mod;
           
$ehtm .= $eclose$eclose ='';
           
$relname $rel '';
           if(!empty(
$eid_mod))
           {
               
$relname '"dropmenu'.$cmod.'_a"';
               
$rel " rel=$relname";
               
$ehtm .= "<div id=$relname"
                     
' class="dropmenudiv_a" style="width: 150px;">'."\r\n";
               
$eclose "</div>\r\n";
           }
           
$mhtm .=   "<li><a href=\"?m=$cmod\" title=\"$mdescr\" $rel"
                    
"><span>$mname</span></a></li>\r\n";
        }
        if(!empty(
$eid_mod))
           
$ehtm .= '<a href="'."?m=$cmod&e=$eid_mod".'">'.$ename.'</a>'."\r\n";

   
 
 автор: Лена   (11.07.2008 в 11:00)   письмо автору
 
   для: Trianon   (10.07.2008 в 16:30)
 

Спасибо за объяснения.
А теперь самое интересное: меню не работает.
Выводятся только родители, непослушные потомки опять куда-то исчезают.
В результирующем коде получается вот что:

//это строка родителя, у которого есть потомки
<li><a href="?m=24" title="Установление контактов с администратором сайта"  rel="dropmenu24_a"><span>О нас</span></a></li>
//а это блок подменю этого родителя
<div id="dropmenu26_a " class="dropmenudiv_a" style="width: 150px;">
<a href="?m=24&e=26">Информация</a>
<a href="?m=24&e=27">Связаться с нами</a>
</div>

Как можно объяснить, что ссылаемся мы на dropmenu24_a (rel="dropmenu24_a"), а получается <div id="dropmenu26_a "? 24 - это родитель. Зачем родительскому элементу <li> делать ссылку на себя же, когда ссылаться надо на id дочерней ветки, которая открывается?
Может, в этом причина, почему не выходит?

   
 
 автор: Trianon   (10.07.2008 в 16:30)   письмо автору
 
   для: Лена   (10.07.2008 в 15:26)
 

>В запросе разобралась.
Респект.

0. Операцию JOIN обычно называют соединением. Термин "объединение" применяют для операции UNION. В остальном таки да.

1. Да. Но я привык писать AS явно. Некоторые СУБД "едят" один вариант , некоторые другой. MySQL "ест" оба.

2. for($m = array(),$mhtm = $ehtm = $cmod = $mclose = $eclose = '';
$row = mysql_fetch_assoc($res) ;)
>Непонятно условие цикла $mhtm = $ehtm = $cmod = $mclose = $eclose = '';
Это не условие. Условие в for-заголовке начинается после точки-с-запятой Это обычная операция присваивания, как и $m=array() . Можно было записать её до for отдельным оператором или даже несколькими. Всем указанным переменным до цикла присваиваются пустые строки.
Кстати, только сейчас заметил: $m=array(), вообще не нужно. Была мысль сперва сохранить строки в отдельном массиве. Потом обошелся. Так что надо сократить до for( $mhtm=$ehtm = ...

Итак, условие у нас после (точнее между) точки-с-запятой: $row = mysql_fetch_assoc($res)
На самом деле это тоже операция присваивания, и цикл оценивает её результат таким образом
($row = mysql_fetch_assoc($res)) != false
То бишь присвоить переменной $row массив с очередной строкой выборки (если строка есть) либо признак её отсутствия(если строки нету) . Присвоенное сравнить с false. признак окончания совпадет с false - массив окажется отличен.

3. переменная $cmod введена в первую очередь для создания условия
if($cmod != $mid_mod)
{
и ветви под ним. Ветвь эта выполняется лишь один раз на группу элементов подменю соответствующих одному элементу горизонтального меню.
Эта переменная (точнее это условие) позволяет разбить строки на группы.
Для второй и последующих строк группы из всего тела цикла выполняется только
if(!empty($eid_mod))
$ehtm .= '<a href="'."?m=$cmod&e=$eid_mod".'">'.$ename.'</a>'."\r\n";
и больше ничего.

Почему не использовал $mid_mod в ссылках?
Мог и её. Использовал ту, что легче написать :)

   
 
 автор: Лена   (10.07.2008 в 15:26)   письмо автору
 
   для: Trianon   (09.07.2008 в 18:55)
 

В запросе разобралась. Для тех, кто еще этого не знает, - http://www.mysql.ru/docs/gruber/ или в Гугле поискать "Объединение таблиц".
Здесь - объединение таблицы самой себя, как бы создаются две ее копии и чтобы они были обработаны независимо в одном запросе, каждой присваивается псевдоним (m, e). Чтобы ссылаться к отдельным столбцам таблиц внутри запроса им тоже присваиваются псевдонимы.
Вопрос 1. Предложение FROM modules AS m в разных источниках встречается как FROM modules m. Это альтернативный синтаксис?
Когда получаем результаты выполнения запроса, в цикле for начинается их перебор.
Вопрос 2. Непонятно условие цикла $mhtm = $ehtm = $cmod = $mclose = $eclose = '';
Цикл работает до тех пор, пока эти переменные пустые. Допустим, выбирается первый ряд из таблицы - и тогда $mhtm заполняется и уже эта переменная не пустая. Объясните.
Вопрос 3.
$cmod = $mid_mod; Зачем вводить еще одну переменную, почему просто в нужном месте не использовать уже ранее определенную $mid_mod?
Все остальное понятно.
Большое человеческое спасибо, Trianon

   

Сообщения:  [1-10]    [11-20]  [21-23] 

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

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