Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   сделать селекты свернутыми (https://javascript.ru/forum/dom-window/81416-sdelat-selekty-svernutymi.html)

Stas1985 23.11.2020 07:43

сделать селекты свернутыми
 
Сам вопрос в заголовке, вот страница фильтра _https://update.lik-astana.kz/bagetnaya-masterskaya/katalog-bageta.html подскажите как сделать элементы в закрытом виде по умолчанию.
Спасибо!

voraa 23.11.2020 08:01

Цитата:

Сообщение от Stas1985
Сам вопрос в заголовке

И где там селекты?

Stas1985 23.11.2020 08:21

Цитата:

Сообщение от voraa (Сообщение 531044)
И где там селекты?

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

laimas 23.11.2020 08:28

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

рони 23.11.2020 08:39

Stas1985,
надо смотреть ваш шаблонизатор или плагин ... а так :( ... добавить вниз страницы
<script>
    window.setTimeout(()=> jQuery('.headexpand_show').click(), 300)
    </script>

Stas1985 23.11.2020 08:40

Цитата:

Сообщение от laimas (Сообщение 531046)
В куки пишется состояние, то есть выбор пользователя, а вы своим действием будете его игнорировать.

Надо чтоб при первом заходе пользователя блоки были свернуты (в закрытом виде).
В куки пишется состояние - ну и пусть они записываются в свернутом виде.

laimas 23.11.2020 08:54

Цитата:

Сообщение от Stas1985
Надо чтоб при первом заходе пользователя блоки были свернуты

Это нужно еще на сервере при запросе страницы проверять - если ни одна из кук этих списков не установлена, то только в этом случае записать в куки hide для них, писать сервером. Их там две, начинаются с имени custom_ и что-то там еще, найдете. Но если хотя бы одна из них есть в куках, то это уже выбор пользователя.

Stas1985 23.11.2020 09:07

Цитата:

Сообщение от рони (Сообщение 531047)
Stas1985,
надо смотреть ваш шаблонизатор или плагин ... а так :( ... добавить вниз страницы
<script>
    window.setTimeout(()=> jQuery('.headexpand_show').click(), 300)
    </script>

Вот это именно то что надо! Спасибо!

laimas 23.11.2020 09:13

Цитата:

Сообщение от Stas1985 (Сообщение 531052)
Вот это именно то что надо! Спасибо!


Вот это вряд-ли, не проверяю кук, вы будете игнорировать выбор пользователя.

laimas 24.11.2020 02:37

Все-таки свалил товарищ, не подумав, что у него теперь не списки будут, а цветомузыка, может пользователи пнут, одумается. :)

Stas1985 24.11.2020 06:17

Цитата:

Сообщение от laimas (Сообщение 531053)
Вот это вряд-ли, не проверяю кук, вы будете игнорировать выбор пользователя.

Уточните пожалуйста, как сделать правильно.

laimas 24.11.2020 06:24

Я уже писал - проверять куки, и сделать это вполне можно на сервере еще до того, как пользователь получит страницу, к чему тащить на клиента всякий хлам превращая его в сантехника по устранению прорывов. Что нет доступа к коду серверному или не хватает знаний это сделать?

Если вы сделаете так как вам предложили, то с каждым входом на страницу списки будут изменять свое состояние.

Stas1985 24.11.2020 06:41

Цитата:

Сообщение от laimas (Сообщение 531066)
Я уже писал - проверять куки, и сделать это вполне можно на сервере еще до того, как пользователь получит страницу, к чему тащить на клиента всякий хлам превращая его в сантехника по устранению прорывов. Что нет доступа к коду серверному или не хватает знаний это сделать?

Если вы сделаете так как вам предложили, то с каждым входом на страницу списки будут изменять свое состояние.

В js знаний не хватает и по этому обратился суда за помощью. Если вам не сложно, помогите пожалуйста.

laimas 24.11.2020 06:44

Цитата:

Сообщение от Stas1985
В js знаний не хватает и по этому обратился суда за помощью.

Я вообще не понимаю причем тут JS, если это может и должен сделать сервер. Что за язык у вас на сервере, в нем у вас хватает знаний?

Stas1985 24.11.2020 07:03

Цитата:

Я вообще не понимаю причем тут JS, если это может и должен сделать сервер. Что за язык у вас на сервере, в нем у вас хватает знаний?
Теперь я не совсем понял, модуль написан на php. Стандартный код модуля, код не кто не менял. То-есть надо дописать функцию хранения и проверки кук

laimas 24.11.2020 07:07

Цитата:

Сообщение от Stas1985
Теперь я не совсем понял, модуль написан на php.

Вот и вставьте в этот модуль код проверяющий наличие кук установленных. Если не установлены куки "price_189" И "custom_f_6_189" И "custom_f_7_189", то есть все три, то установите их все три со значением "hide". В противном случае все останется как есть, то есть пользователь уже сделал выбор.

Stas1985 24.11.2020 07:29

Вот уже рабочий вариант _https://lik-astana.kz/poligrafiya/papki/papki-dlya-diplomnykh-rabot.html там вроде все в порядке

laimas 24.11.2020 07:47

Цитата:

Сообщение от Stas1985
там вроде все в порядке

Уверены? Открывайте отладчик, найдите в нем куки начинающиеся с "custom_f" и следите за ними. Заметьте, что скрытие списков происходит с задержкой. Затем откройте какой либо список, это будет выбор пользователя и кука этого списка примет значение "show". Нажмите F5, что произойдет? Правильно, будет цветомузыка, какой-то скрипт плюет на выбор пользователя в наглую все делает по своему. Это вы называете порядком, зачем тогда выбор пользователя запоминать?

Stas1985 24.11.2020 08:20

Да вроде сохраняет выбор пользователя, даже если перейти в карточку и вернутся назад все сохраняется.

laimas 24.11.2020 08:40

Вложений: 2
Цитата:

Сообщение от Stas1985
Да вроде сохраняет выбор пользователя

Даже так. Что-то этого не наблюдается. 1 - это при открытии страницы, 2 - сделан выбор. Третью не стоит и делать, так как она будет тоже самое что и 1 после F5.

Stas1985 24.11.2020 08:46

так ссылка та _https://lik-astana.kz/poligrafiya/papki/papki-dlya-diplomnykh-rabot.html

laimas 24.11.2020 09:17

Тоже самое, или вам видео с экрана снять?

Если вы пытаетесь сделать js-кодом, что вам показали, то даже и не пытайтесь, и без попыток ясно, что работать будет не правильно.

Сервер формирует данные для блока с классом cf_wrapp_all, в котором находятся все списки. В них имеются кнопки которым формируются ID как "cfhead_custom_f_6_189" и т.п., кука при этом будет иметь тоже имя, но без "cfhead_". Вот эти куки, которые можно взять из формирующихся ID для кнопок списков, и нужно проверять. И действовать как описано выше:

if ( !isset($_COOKIE['name_1']) && !isset($_COOKIE['name_2']) && !isset($_COOKIE['name_3']) ) {
    setcookie('name_1', 'hide', 0, '/', '.' . $_SERVER["SERVER_NAME"]);
    setcookie('name_2', 'hide', 0, '/', '.' . $_SERVER["SERVER_NAME"]);
    setcookie('name_3', 'hide', 0, '/', '.' . $_SERVER["SERVER_NAME"]);
}


где name_1, name_2, name_3 - имена кук для всех формирующихся списков. Заметьте, что куки сессионные.

Если используется CMS, то просто вписать код в контроллер формирующий эти страницы нельзя. Например, если это opencart, то добавлять его надо через модификатор. Если иная, то согласно ее требованиям. В противном случае при обновлении или установке какого либо модуля, который может затрагивать этот контроллер, вставленный код может быть утерян.

Stas1985 24.11.2020 11:27

В модуле этот код выглядит так
<?php 
	if(isset($filter_headers_array[$key])):
		if(isset($expanded_state[$key])){
			if($expanded_state[$key]==1)$state='show';
			else $state='hide';
		}else $state='show';
?>

При просмотре
echo '<pre>' ;
print_r($filter_headers_array) ;
 echo '</pre>' ;

Отдает
Код:

Array
(
[custom_f_14_244] => Надпись:
[custom_f_13_244] => Тип переплета:
[custom_f_12_244] => Цвет папки:
)


laimas 24.11.2020 11:38

Значит нужно выполнить:
//если не было выбора пользователя, скрываем списки
if ( !array_intersect_key ( $_COOKIE, $filter_headers_array ) ) foreach(array_keys($filter_headers_array) as $cookie) setcookie ($cookie, 'hide', 0, '/', '.' . $_SERVER["SERVER_NAME"]);

Stas1985 24.11.2020 11:43

Сейчас код выполняется _https://lik-astana.kz/poligrafiya/papki/papki-dlya-diplomnykh-rabot.html

laimas 24.11.2020 11:49

Нет, ну неужели вы не видите этого? Причем это происходит ужасно - сначала показывается раскрытый список, если его открывали, затем он сворачивается. Цветомузыка, не иначе, абсурд какой-то.

Откройте в конце концов отладчик. Удалите "примочку", которой вы скрываете списки. Зайдите на страницу, которую еще не открывали. В куках не будет имен списков и списки будут раскрыты. Этот момент и нужно определять сервером, только в этом случае можно установить куки, чтобы при загрузке страницы они были скрыты.

Stas1985 24.11.2020 13:46

Цитата:

В куках не будет имен списков и списки будут раскрыты. Этот момент и нужно определять сервером, только в этом случае можно установить куки, чтобы при загрузке страницы они были скрыты.
А зачем вообще их скрывать. Может вы не правильно поняли, скрыть необходимо список.
рони, подскажите пожалуйста, как сделать чтоб скрипт
<script>window.setTimeout(()=> jQuery('.headexpand_show').click(), 300)</script>

работал только с разрешением
@media screen and (min-width:320px) and (max-width:640px) {
}

рони 24.11.2020 13:58

Stas1985,
https://developer.mozilla.org/ru/doc...dow/matchMedia

рони 24.11.2020 14:04

Stas1985,
if (window.matchMedia("screen and (min-width:320px) and (max-width:640px)").matches) {
window.setTimeout(()=> jQuery('.headexpand_show').click(), 300)
};

laimas 24.11.2020 14:12

Цитата:

Сообщение от Stas1985
Может вы не правильно поняли, скрыть необходимо список.

Ну вот, здрастье, я и не понял, когда вопрос так и звучит - "сделать селекты свернутыми", как еще это понимать?

laimas 24.11.2020 14:54

Stas1985,
и все-таки вы же их сворачиваете, и получается так же самая фигня, только при малом разрешении - раскрыли списки, обновление страницы, списки раскрыты, а затем начинают сворачиваться. Это нормально? Не желаете сервером, вы хотя бы эти манипуляции на клиенте делали с проверкой кук.

PS. И скачок кверху блока этих списков тоже не лучшее, что можно ожидать на странице.


Часовой пояс GMT +3, время: 16:57.