Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сохранение параметров - что использовать? Сохранить свернуто/развернуто ли меню 
:(
    Опции темы
GrAndrey
Дата 30.9.2004, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 2.7.2003

Репутация: нет
Всего: 1



Помогите, плиз.
Имею древовидное меню. Работает через яваскрипт - меняется id, соотвественно срабатывает стиль css. При каждом переходе по ссылке меню снова сворачивается. Хотелось бы оставлять развернутое - развернутым. Для этого нужно передавать небольшой массив на новую страницу. Через УРЛ не хочу - некрасиво, особенно для обычных страниц сайта. Куки не пойдут, т.к. ставятся вначале, а пользователь меняет состояние позже. Что здесь можно придумать? И стоит ли с этим вообще связываться?
PM MAIL   Вверх
Ignat
Дата 30.9.2004, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Флудератор
****


Профиль
Группа: Экс. модератор
Сообщений: 4030
Регистрация: 19.4.2004
Где: غيليندزيك مدينة

Репутация: нет
Всего: 73



А почему тогда в PHP?
Нарисуй форму и отправляй её POST'ом. JavaScript используй.


--------------------
Теперь при чем :P
PM   Вверх
GrAndrey
Дата 30.9.2004, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 2.7.2003

Репутация: нет
Всего: 1



Цитата(Ignat @ 30.9.2004, 10:50)
А почему тогда в PHP?
Нарисуй форму и отправляй её POST'ом. JavaScript используй.

Это как? Инпуты связать с массивом? На каждую ссылку завязать сабмит? Что-то не представляю.

Вот код инициализации деревца:
Код

<script>
function initTree(root)
 { for(var i=0; i<root.childNodes.length; i++)
     { if(/li/i.test(root.childNodes[i].nodeName))
         { uls = root.childNodes[i].getElementsByTagName('ul');
           if(uls.length)
             { root.childNodes[i].firstChild.onclick = function(e)
                 { target = e?e.currentTarget:window.event?this:null;
                   if(!target) return;
                   ul = (target.parentNode.getElementsByTagName('ul'))[0];
                   if(ul.style.display=='none')
                     { ul.style.display = '';
                       target.className = target.className.replace(/\scollapsed\b/,' expanded');
                     }
                   else
                     { ul.style.display = 'none';
                       target.className = target.className.replace(/\sexpanded\b/,' collapsed');
                     }

                 };
               uls[0].style.display = 'none';
               root.childNodes[i].firstChild.className += ' collapsed';
               initTree(uls[0]);
             }
         }
     }
 }
</script>


Далее тока <ul id="root"> и т.д.
PM MAIL   Вверх
Ignat
Дата 30.9.2004, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Флудератор
****


Профиль
Группа: Экс. модератор
Сообщений: 4030
Регистрация: 19.4.2004
Где: غيليندزيك مدينة

Репутация: нет
Всего: 73



Не силен я в JS, но понимаю нужно так:
1. Содать форму, с передаваемыми параметрами.
2. Создать ф-цию присваивающую полям формы переменные и осуществляющую сабмит формы.
3. Каждому элементу меню сопопставить событие onCLick с вызовом ф-ции, которой в качестве аргументов передаются посылаемые значения/массив.
Добавлено @ 12:11
2 MuToGeN и IZ@TOP эту тему, наверное, в ЯваСкрипт переместить надо?


--------------------
Теперь при чем :P
PM   Вверх
GrAndrey
Дата 30.9.2004, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 2.7.2003

Репутация: нет
Всего: 1



Цитата(Ignat @ 30.9.2004, 12:10)
2 MuToGeN и IZ@TOP эту тему, наверное, в ЯваСкрипт переместить надо?

Т.е. Ignat однозначно установил, что без JS не обойтись?
PM MAIL   Вверх
Ignat
Дата 30.9.2004, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Флудератор
****


Профиль
Группа: Экс. модератор
Сообщений: 4030
Регистрация: 19.4.2004
Где: غيليندزيك مدينة

Репутация: нет
Всего: 73



Цитата(GrAndrey @ 30.9.2004, 15:00)
Т.е. Ignat однозначно установил, что без JS не обойтись?

bored.gif Однако...


--------------------
Теперь при чем :P
PM   Вверх
GrAndrey
Дата 30.9.2004, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 2.7.2003

Репутация: нет
Всего: 1



Нашел в FAQ обсуждение. Разочарован. Значит, тока через форму... sad.gif

Это сообщение отредактировал(а) GrAndrey - 30.9.2004, 16:46
PM MAIL   Вверх
Aliance
Дата 30.9.2004, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Цитата(Ignat @ 30.9.2004, 10:50)
JavaScript используй.

Абсолютно верно!

Делаем фреймы, и передаем параметры через фреймы (есть функции escape() и unescape())

Можно еще и с использованием XML (фреймы допустимы для стандарта XHTML 1.0 для фреймов, проблем не будет.)

Написал бы функцию, да бе твоей функции меню не получиться, кидай ее...

P.S. перенесите тему в JS
Добавлено @ 21:46
P.P.S.: возможно это будет в скоропоявявщемся FAQ`е по JavaScript`ам
PM MAIL WWW ICQ Skype   Вверх
GrAndrey
Дата 30.9.2004, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 2.7.2003

Репутация: нет
Всего: 1



Цитата(Aliance @ 30.9.2004, 21:44)
Цитата(Ignat @ 30.9.2004, 10:50)
JavaScript используй.

Абсолютно верно!

Делаем фреймы, и передаем параметры через фреймы (есть функции escape() и unescape())

Можно еще и с использованием XML (фреймы допустимы для стандарта XHTML 1.0 для фреймов, проблем не будет.)

Написал бы функцию, да бе твоей функции меню не получиться, кидай ее...

P.S. перенесите тему в JS
Добавлено @ 21:46
P.P.S.: возможно это будет в скоропоявявщемся FAQ`е по JavaScript`ам

Мне этот скрипт понравился, увы, не помню кто автор. Вроде, должен работать везде.
Повторно привожу код инициализации.

Код

<script>
function initTree(root)
 { for(var i=0; i<root.childNodes.length; i++)
     { if(/li/i.test(root.childNodes[i].nodeName))
         { uls = root.childNodes[i].getElementsByTagName('ul');
           if(uls.length)
             { root.childNodes[i].firstChild.onclick = function(e)
                 { target = e?e.currentTarget:window.event?this:null;
                   if(!target) return;
                   ul = (target.parentNode.getElementsByTagName('ul'))[0];
                   if(ul.style.display=='none')
                     { ul.style.display = '';
                       target.className = target.className.replace(/\scollapsed\b/,' expanded');
                     }
                   else
                     { ul.style.display = 'none';
                       target.className = target.className.replace(/\sexpanded\b/,' collapsed');
                     }

                 };
               uls[0].style.display = 'none';
               root.childNodes[i].firstChild.className += ' collapsed';
               initTree(uls[0]);
             }
         }
     }
 }
</script>


не забыть стартануть:
Код
<body onload="initTree(document.getElementById('root'))">


Описание меню такое:

Код

<ul id="root">
 <li><h2>Раздел 1</h2>
     <ul>
         <li><a href="1.php">Ссылка1</A></li>
         <li><a href="2.php">Ссылка2</a></li>
         <li><a href="3.php">Ссылка3</A></li>
     </ul>
 </li>
 <li><h2><a href="4.php">Раздел_ссылка</a></h2></li>
</ul>


и ещё часть эффекта заложена в css:

Код

#root li
{ list-style: none; }

#root h2, #root h3, #root h4, #root li
{
   padding: 0.15em 0px 0.15em 0px;
   margin: 0px;
   line-height: 120%;
}

.collapsed
{ background: url("p.gif") no-repeat left center;
   cursor: pointer;
   cursor: hand;
}

.expanded
{ background: url("m.gif") no-repeat left center;
   cursor: pointer;
   cursor: hand;
}


Кстати, интересно узнать, нет ли проблем во втором случае, где раздел/ссылка. У меня в ИЕ и Опере работает, но один человек говорил что были проблемы.

Хотелось бы сильно не корежить имеющееся. Как передать массив через пост (сохраняя его имя) я уже разобрался. Вот как я это решил силами php:
Код

<?php
 $temp=$myarray;
 foreach ($temp as $cur)
 echo "<INPUT type=hidden name=\"myarray[]\" value=$cur>";
?>


Видно, нужно только сабмит на ссылки повесить. Это никаких проблем не вызовет? У всех работать будет? От слова фрейм в дрожь бросает - чтобы от них избавиться, php стал учить.
PM MAIL   Вверх
GoodBoy
Дата 1.10.2004, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Главный джедай
****


Профиль
Группа: Модератор
Сообщений: 3886
Регистрация: 8.1.2003
Где: КМВ

Репутация: 2
Всего: 83



Цитата(GrAndrey @ 30.9.2004, 11:35)
Куки не пойдут, т.к. ставятся вначале, а пользователь меняет состояние позже

И что из этого????? А почему нельзя при щелчке пользователем на меню поставить ещё одну запись в куку???? А при заходе на страницу проверить такое поле и если оно есть, то свернуть/развернуть нужное меню!!! я именно так и делал!


--------------------
Чем дальше в лес, тем толще партизаны...

Цитата(igorold @  1.5.2016,  17:40 Найти цитируемый пост)
Индейцы не обратили внимания на поток беженцев из Европы… Теперь они живут в резервациях. 
PM MAIL   Вверх
Gold Dragon
Дата 1.10.2004, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 1
Всего: 71



И я что-то не могу понять почему куки нельзя использовать. При переходах по ссылкам или закрытии страницы все переменные записываешь в куки, при открытии читаешь. Куда проще?


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Alx
Дата 1.10.2004, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: 10
Всего: 78



конечно, для таких вещей (почти) куки и были придуманы!


--------------------
PM MAIL WWW ICQ   Вверх
GrAndrey
Дата 1.10.2004, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 2.7.2003

Репутация: нет
Всего: 1



Цитата(Red @ 1.10.2004, 11:34)
И я что-то не могу понять почему куки нельзя использовать. При переходах по ссылкам или закрытии страницы все переменные записываешь в куки, при открытии читаешь. Куда проще?

Я так понял из этого(цитата из мануалины по php):

setcookie() определяет куку для отправки вместе с остальной header-информацией. Куки обязаны быть отправлены до любых других шапок/headers (это ограничение кук, а не РНР). Это требует, чтобы вы помещали вызовы этой функции перед тэгами <html> или <head>.
PM MAIL   Вверх
Aliance
Дата 1.10.2004, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Цитата(GrAndrey @ 1.10.2004, 21:30)
цитата из мануалины по php

А теперь возьми очки -5 и внимательно прочти название подфорума smile.gif

PM MAIL WWW ICQ Skype   Вверх
GrAndrey
Дата 1.10.2004, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 2.7.2003

Репутация: нет
Всего: 1



Цитата(Aliance @ 1.10.2004, 22:39)
Цитата(GrAndrey @ 1.10.2004, 21:30)
цитата из мануалины по php

А теперь возьми очки -5 и внимательно прочти название подфорума smile.gif

А меня в этот раздел насильно перенесли, я в форуме php поначалу запостился smile.gif
И в цитате говорилось:
Цитата
это ограничение кук, а не РНР

Я буквально так и понял.

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0630 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.