|
|
|
|
|
для: Лена
(09.07.2008 в 11:49)
| | <div> не нужен, рекурсия тож | |
|
|
|
|
|
|
|
для: Trianon
(11.07.2008 в 13:01)
| | We are the chempions!
Получилось!!!
Но главный chempion - это вы, Trianon :-))
Ошибки свои нашла. Спасибо, я вам очень благодарна. | |
|
|
|
|
 5.6 Кб |
|
|
для: Лена
(11.07.2008 в 12:34)
| | Сравнивать. У меня вот такой набор файлов выводит Ваше меню. | |
|
|
|
|
|
|
|
для: Trianon
(11.07.2008 в 12:22)
| | Нет, лучше не стало. Ни мне, ни скрипту :-)
Хотя теперь прямая ссылка из родителя, которая выводится в дочерний блок, есть.
Что будем делать? | |
|
|
|
|
|
|
|
для: Лена
(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>
|
Может, в этом проблема? Я его вставила в общий код, но ничего не поменялось | |
|
|
|
|
|
|
|
для: Лена
(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";
|
| |
|
|
|
|
|
|
|
для: 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 дочерней ветки, которая открывается?
Может, в этом причина, почему не выходит? | |
|
|
|
|
|
|
|
для: Лена
(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 в ссылках?
Мог и её. Использовал ту, что легче написать :) | |
|
|
|
|
|
|
|
для: 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 | |
|
|
|
|