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

Форум PHP

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

 

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

вид форума:
Линейный форум Структурный форум

тема: Сохранение статуса (свернутый/развернутый) блока в cookie
 
 автор: DELUX   (13.02.2011 в 19:45)   письмо автору
 
 

Добрый день!

У меня такая проблема:
У меня на форуме стоит сворачивающийся блок: Как мне сделать при помощи cookie что пользователь свернув блок при обновлении страницы блок видел свёрнутым??

Это кнопки сворачивания блока
<a id="hide-but" style="position:absolute;" class="hide-block" href="javascript://" onclick="$('#r-colonka, #hide-but').fadeOut('slow'); $('#show-but').fadeIn('slow');"></a>
<a id="show-but" class="show-block" style="display:block; position:absolute;" href="javascript://" onclick="$('#r-colonka, #hide-but').fadeIn('slow'); $('#show-but').fadeOut('slow');"></a></div>


Это сам блок
<td id="r-colonka" class="right-conolka" style="display:none;" valign="top">содержимое</td>

  Ответить  
 
 автор: Саня   (13.02.2011 в 20:03)   письмо автору
 
   для: DELUX   (13.02.2011 в 19:45)
 

Cookie можно устанавливать из js http://www.codenet.ru/webmast/js/Cookies.php

  Ответить  
 
 автор: DELUX   (13.02.2011 в 20:03)   письмо автору
 
   для: Саня   (13.02.2011 в 20:03)
 

Я так и хочу,но в js я круглый ноль...

  Ответить  
 
 автор: Саня   (13.02.2011 в 20:07)   письмо автору
 
   для: DELUX   (13.02.2011 в 20:03)
 

<a id="hide-but" ... onclick="$('#r-colonka, #hide-but').fadeOut('slow'); $('#show-but').fadeIn('slow');document.cookie='r-colonka-hide=1'"></a> 
<a id="show-but" ... onclick="$('#r-colonka, #hide-but').fadeIn('slow'); $('#show-but').fadeOut('slow');document.cookie='r-colonka-hide=0'"></a></div>

  Ответить  
 
 автор: DELUX   (13.02.2011 в 20:10)   письмо автору
 
   для: Саня   (13.02.2011 в 20:07)
 

Заменить надо толь эти 2 строки??
Ибо не сработало...


P.S Спасибо что уделяете мне время..

  Ответить  
 
 автор: Саня   (13.02.2011 в 20:18)   письмо автору
 
   для: DELUX   (13.02.2011 в 20:10)
 

Cookie не поставился?

  Ответить  
 
 автор: DELUX   (13.02.2011 в 20:20)   письмо автору
 
   для: Саня   (13.02.2011 в 20:18)
 

<a id="hide-but" style="position:absolute;" class="hide-block" href="javascript://" onclick="$('#r-colonka, #hide-but').fadeOut('slow'); $('#show-but').fadeIn('slow');document.cookie='r-colonka-hide=1'"></a>  
<a id="show-but" class="show-block" style="display:block; position:absolute;" href="javascript://" onclick="$('#r-colonka, #hide-but').fadeIn('slow'); $('#show-but').fadeOut('slow');document.cookie='r-colonka-hide=0'"></a></div>


Я поставил эти 2 строки,обновил страницу и развернул блок...вновь обновил страницу и блок был свёрнут,хотя должно было быть иначе..

  Ответить  
 
 автор: Саня   (13.02.2011 в 21:58)   письмо автору
 
   для: DELUX   (13.02.2011 в 20:20)
 

Нужно ещё поработать с РНР скриптом.

<td id="r-colonka" class="right-conolka" <?
if ( isset($_COOKIE['r-colonka-hide']) && $_COOKIE['r-colonka-hide'] == '1' )
  print 
'style="display:none;"';
?> valign="top">содержимое</td>

  Ответить  
 
 автор: Trianon   (13.02.2011 в 22:24)   письмо автору
 
   для: Саня   (13.02.2011 в 21:58)
 

И как-то неожиданно из кустов показался рояль на арену выбрался php-уровень... :-)

  Ответить  
 
 автор: Саня   (13.02.2011 в 23:06)   письмо автору
 
   для: Trianon   (13.02.2011 в 22:24)
 

Я надеялся, что тс сам додумается. Хотел помучить наводящими вопросами. Но что-то настроение пропало.
Можно всё сделать чисто на JS. Но прийдётся сильно заморочиться для защиты от мигания блоков.

  Ответить  
 
 автор: DELUX   (14.02.2011 в 05:11)   письмо автору
 
   для: Саня   (13.02.2011 в 23:06)
 

Сможете помочь??



Это не помогло((


Нужно ещё поработать с РНР скриптом.

<td id="r-colonka" class="right-conolka" <?
if ( isset($_COOKIE['r-colonka-hide']) && $_COOKIE['r-colonka-hide'] == '1' )
  print 
'style="display:none;"';
?> valign="top">содержимое</td>
>Я надеялся, что тс сам додумается. Хотел помучить наводящими вопросами. Но что-то настроение пропало.
>Можно всё сделать чисто на JS. Но прийдётся сильно заморочиться для защиты от мигания блоков.


P.S почему именно "r-colonka-hide" ведь везде пишется "r-colonka" или так и должно быть?

  Ответить  
 
 автор: sim5   (14.02.2011 в 09:59)   письмо автору
 
   для: DELUX   (14.02.2011 в 05:11)
 

Не надо ни каких РНР скриптов, эта кука чистый выбор пользователя, и управлять им серверу нет необходимости. Судя по коду вашему, у вас используется jQuery, который не имеет встроенных инструментов для работы с cookies. Есть плагин к нему для работы с ними, но можно и на "чистом" JS написать свои функции, что легче по весу будет.

Писатать не буду, ибо больше придется писать, чем понять суть механизма, а он прост. Сервер отдает стиль этого элемента всегда постоянным, по умолчанию, а JS (jQuery) во время загрузки документа проверяет выбор пользователя, и если cookie установлено назначает этот стиль элементу, в противном случае используется стиль по умолчанию. При каждом выборе пользователя, производите запись в cookie.

Вот, например, тут на jQuery пример, почитайте.

  Ответить  
 
 автор: Саня   (14.02.2011 в 11:39)   письмо автору
 
   для: DELUX   (14.02.2011 в 05:11)
 

<div id="block" <?
if ( !empty($_COOKIE['block-hide']) && $_COOKIE['block-hide'] == '1' ) {
  print 
'style="display:none"';
}
?>>
блок, который нужно скрыть
</div>
<input type="button" value="скрыть блок" onclick="hide()">
<input type="button" value="показать блок" onclick="show()">

<script>
function show() {
  var block = document.getElementById('block');
  block.style.display = '';
  document.cookie = 'block-hide=0';
}
function hide() {
  var block = document.getElementById('block');
  block.style.display = 'none';
  document.cookie = 'block-hide=1';
}
</script>

Вот вам код, который иллюстрирует всю систему в действии. Написано без jquery. Этот код нужно тестировать в отдельном скрипте. Просто поймите как он работает.

> P.S почему именно "r-colonka-hide" ведь везде пишется "r-colonka" или так и должно быть?
Потому что cookie задаётся с именем "r-colonka-hide". "r-colonka" — это идентификатор вашего блока и к cookies он не имеет какого-либо отношения. Можете устанавливать куки с точным id блока. От этого ничего не изменится.

  Ответить  
 
 автор: DELUX   (14.02.2011 в 12:19)   письмо автору
 
   для: Саня   (14.02.2011 в 11:39)
 

Я попробовал этот код,нажал "Показать блок" обновил страницу,и блок был скрит...код не работает((

  Ответить  
 
 автор: Саня   (14.02.2011 в 12:34)   письмо автору
 
   для: DELUX   (14.02.2011 в 12:19)
 

Попробуйте в других браузерах.

  Ответить  
 
 автор: sim5   (14.02.2011 в 06:29)   письмо автору
 
   для: Саня   (13.02.2011 в 23:06)
 

>Но прийдётся сильно заморочиться для защиты от мигания блоков.

И какие могут быть заморочки, да и почему должно мигать?

  Ответить  
 
 автор: DELUX   (14.02.2011 в 10:19)   письмо автору
 
   для: sim5   (14.02.2011 в 06:29)
 

Мой скрипт действительно работает на jQuery,я вас очень прошу,помогите сделать чтоб сохранялись изменения,для вас это просто..нежели для меня..(

  Ответить  
 
 автор: sim5   (14.02.2011 в 10:24)   письмо автору
 
   для: DELUX   (14.02.2011 в 10:19)
 

Я же вам ссылку дал, где все описано подробно, включая и работу с cookie в jQuery (если в нем будуте писать, скачайте и подключите плагин), и код примера. В этом коде вам только останется заменить на свои данные, и все.

  Ответить  
 
 автор: DELUX   (14.02.2011 в 10:28)   письмо автору
 
   для: sim5   (14.02.2011 в 10:24)
 

Да я прошел по ссылке,там написано "Всё очень просто"...дабы было всё просто,я бы сам разобрался..но увы...я вас очень прошу,помогите..!

  Ответить  
 
 автор: sim5   (14.02.2011 в 10:32)   письмо автору
 
   для: DELUX   (14.02.2011 в 10:28)
 

Тогда с этим вопрос в раздел HTML, там помогут, к РНР это отношения не имеет. А я в данный момент не могу, просто сейчас нет времени вникать в ваши стили, чего вы там хотите, и писать код какой-то.

  Ответить  
 
 автор: Саня   (14.02.2011 в 11:39)   письмо автору
 
   для: sim5   (14.02.2011 в 10:32)
 

Кому интересно что вы в данный момент можете или не можете?

  Ответить  
 
 автор: Саня   (14.02.2011 в 11:43)   письмо автору
 
   для: sim5   (14.02.2011 в 06:29)
 

>>Но прийдётся сильно заморочиться для защиты от мигания блоков.
>И какие могут быть заморочки, да и почему должно мигать?

Если писать чисто на js, то в верстке будут выводиться блоки изначально видимые. Скрипт, скрывающий нужные блоки, загрузится чуть позже. Поэтому пользователи сначала увидят все блоки, которые через короткий промежуток времени скроются по js-скрипту.
Я удивлён, что мне приходится объяснять это вам.

  Ответить  
 
 автор: sim5   (14.02.2011 в 11:47)   письмо автору
 
   для: Саня   (14.02.2011 в 11:43)
 

Это смотря как подойти к этому вопросу. Просто делал нечто, в чем можно было указать отображение или нет блоков в неком блоке, сделано было на JS, и проблем не было, потому и спросил.

  Ответить  
 
 автор: Саня   (14.02.2011 в 11:49)   письмо автору
 
   для: sim5   (14.02.2011 в 11:47)
 

> Это смотря как подойти к этому вопросу.
Вот именно, что нужно отдельно подходить к этому вопросу. Например изначально задавать блокам стиль, уводящий блок за пределы рабочей области браузера. А потом на js либо передвигать его на своё место, либо не трогать. Вариантов масса, но все они требуют отдельной проработки.

  Ответить  
 
 автор: sim5   (14.02.2011 в 12:00)   письмо автору
 
   для: Саня   (14.02.2011 в 11:49)
 

Ну так вот все и решение:
if ( !empty($_COOKIE['block-hide']) && $_COOKIE['block-hide'] == '1' ) { 
  print 'style="display:none"'; 
}
, если скрытый, это стиль по умолчанию, а уж проверить на клиенте условие и изменить его....

  Ответить  
 
 автор: Саня   (14.02.2011 в 12:09)   письмо автору
 
   для: sim5   (14.02.2011 в 12:00)
 

Вы, видимо, пропустили мою фразу "Можно всё сделать чисто на JS."
Чисто на JS == не привлекая РНР (или любые другие серверные приложения) к этому делу.
Можно конечно изначально устанавливать всем блокам скрытый стиль и потом по js их открывать. Но это решение фэйлится для пользователей с отключённым/блокированным js. Или для мобильных браузеров, которые не поддерживают js в полной мере.

  Ответить  
Rambler's Top100
вверх

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