|
|
|
| Добрый день!
У меня такая проблема:
У меня на форуме стоит сворачивающийся блок: Как мне сделать при помощи 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>
|
| |
|
|
|
|
|
|
|
для: DELUX
(13.02.2011 в 19:45)
| | Cookie можно устанавливать из js http://www.codenet.ru/webmast/js/Cookies.php | |
|
|
|
|
|
|
|
для: Саня
(13.02.2011 в 20:03)
| | Я так и хочу,но в js я круглый ноль... | |
|
|
|
|
|
|
|
для: 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>
|
| |
|
|
|
|
|
|
|
для: Саня
(13.02.2011 в 20:07)
| | Заменить надо толь эти 2 строки??
Ибо не сработало...
P.S Спасибо что уделяете мне время.. | |
|
|
|
|
|
|
|
для: DELUX
(13.02.2011 в 20:10)
| | Cookie не поставился? | |
|
|
|
|
|
|
|
для: Саня
(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 строки,обновил страницу и развернул блок...вновь обновил страницу и блок был свёрнут,хотя должно было быть иначе.. | |
|
|
|
|
|
|
|
для: 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>
|
| |
|
|
|
|
|
|
|
для: Саня
(13.02.2011 в 21:58)
| | И как-то неожиданно из кустов показался рояль на арену выбрался php-уровень... :-) | |
|
|
|
|
|
|
|
для: Trianon
(13.02.2011 в 22:24)
| | Я надеялся, что тс сам додумается. Хотел помучить наводящими вопросами. Но что-то настроение пропало.
Можно всё сделать чисто на JS. Но прийдётся сильно заморочиться для защиты от мигания блоков. | |
|
|
|
|
|
|
|
для: Саня
(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" или так и должно быть? | |
|
|
|
|
|
|
|
для: DELUX
(14.02.2011 в 05:11)
| | Не надо ни каких РНР скриптов, эта кука чистый выбор пользователя, и управлять им серверу нет необходимости. Судя по коду вашему, у вас используется jQuery, который не имеет встроенных инструментов для работы с cookies. Есть плагин к нему для работы с ними, но можно и на "чистом" JS написать свои функции, что легче по весу будет.
Писатать не буду, ибо больше придется писать, чем понять суть механизма, а он прост. Сервер отдает стиль этого элемента всегда постоянным, по умолчанию, а JS (jQuery) во время загрузки документа проверяет выбор пользователя, и если cookie установлено назначает этот стиль элементу, в противном случае используется стиль по умолчанию. При каждом выборе пользователя, производите запись в cookie.
Вот, например, тут на jQuery пример, почитайте. | |
|
|
|
|
|
|
|
для: 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 блока. От этого ничего не изменится. | |
|
|
|
|
|
|
|
для: Саня
(14.02.2011 в 11:39)
| | Я попробовал этот код,нажал "Показать блок" обновил страницу,и блок был скрит...код не работает(( | |
|
|
|
|
|
|
|
для: DELUX
(14.02.2011 в 12:19)
| | Попробуйте в других браузерах. | |
|
|
|
|
|
|
|
для: Саня
(13.02.2011 в 23:06)
| | >Но прийдётся сильно заморочиться для защиты от мигания блоков.
И какие могут быть заморочки, да и почему должно мигать? | |
|
|
|
|
|
|
|
для: sim5
(14.02.2011 в 06:29)
| | Мой скрипт действительно работает на jQuery,я вас очень прошу,помогите сделать чтоб сохранялись изменения,для вас это просто..нежели для меня..( | |
|
|
|
|
|
|
|
для: DELUX
(14.02.2011 в 10:19)
| | Я же вам ссылку дал, где все описано подробно, включая и работу с cookie в jQuery (если в нем будуте писать, скачайте и подключите плагин), и код примера. В этом коде вам только останется заменить на свои данные, и все. | |
|
|
|
|
|
|
|
для: sim5
(14.02.2011 в 10:24)
| | Да я прошел по ссылке,там написано "Всё очень просто"...дабы было всё просто,я бы сам разобрался..но увы...я вас очень прошу,помогите..! | |
|
|
|
|
|
|
|
для: DELUX
(14.02.2011 в 10:28)
| | Тогда с этим вопрос в раздел HTML, там помогут, к РНР это отношения не имеет. А я в данный момент не могу, просто сейчас нет времени вникать в ваши стили, чего вы там хотите, и писать код какой-то. | |
|
|
|
|
|
|
|
для: sim5
(14.02.2011 в 10:32)
| | Кому интересно что вы в данный момент можете или не можете? | |
|
|
|
|
|
|
|
для: sim5
(14.02.2011 в 06:29)
| | >>Но прийдётся сильно заморочиться для защиты от мигания блоков.
>И какие могут быть заморочки, да и почему должно мигать?
Если писать чисто на js, то в верстке будут выводиться блоки изначально видимые. Скрипт, скрывающий нужные блоки, загрузится чуть позже. Поэтому пользователи сначала увидят все блоки, которые через короткий промежуток времени скроются по js-скрипту.
Я удивлён, что мне приходится объяснять это вам. | |
|
|
|
|
|
|
|
для: Саня
(14.02.2011 в 11:43)
| | Это смотря как подойти к этому вопросу. Просто делал нечто, в чем можно было указать отображение или нет блоков в неком блоке, сделано было на JS, и проблем не было, потому и спросил. | |
|
|
|
|
|
|
|
для: sim5
(14.02.2011 в 11:47)
| | > Это смотря как подойти к этому вопросу.
Вот именно, что нужно отдельно подходить к этому вопросу. Например изначально задавать блокам стиль, уводящий блок за пределы рабочей области браузера. А потом на js либо передвигать его на своё место, либо не трогать. Вариантов масса, но все они требуют отдельной проработки. | |
|
|
|
|
|
|
|
для: Саня
(14.02.2011 в 11:49)
| | Ну так вот все и решение:
if ( !empty($_COOKIE['block-hide']) && $_COOKIE['block-hide'] == '1' ) {
print 'style="display:none"';
}
| , если скрытый, это стиль по умолчанию, а уж проверить на клиенте условие и изменить его.... | |
|
|
|
|
|
|
|
для: sim5
(14.02.2011 в 12:00)
| | Вы, видимо, пропустили мою фразу "Можно всё сделать чисто на JS."
Чисто на JS == не привлекая РНР (или любые другие серверные приложения) к этому делу.
Можно конечно изначально устанавливать всем блокам скрытый стиль и потом по js их открывать. Но это решение фэйлится для пользователей с отключённым/блокированным js. Или для мобильных браузеров, которые не поддерживают js в полной мере. | |
|
|
|