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

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
Может вы не правильно поняли, скрыть необходимо список.

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


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