Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   В какую сторону двигаться? Cookie (Javascript) (https://javascript.ru/forum/misc/79774-v-kakuyu-storonu-dvigatsya-cookie-javascript.html)

Mytnyi 22.03.2020 20:03

В какую сторону двигаться? Cookie (Javascript)
 
Вложений: 2
Уважаемые доны. Прошу направить меня в нужную степь и по возможности подсказать как действовать.

Идея такова: имеется шапка с двумя блоками (серый и синий). Когда пользователь заходит на сайт вкладка "Частным лицам" по умолчанию активна (на картинке_1 это видно) и пользователь может переходить по ссылкам в синей части, таким как: "Каталог", "Услуг и цены", "Межгород" и т.д. При этом вкладка "Частным лицам" остается активной. А когда Пользователь нажимает на ссылку "Юридическим лицам", то вкладка "Юридическим лицам" должна становится активной и пользователь может переходить по другим ссылкам меню в синей части (картинка_2), а вкладка "Юридическим лицам" должна оставаться активной. Все это должно реализовываться с помощью cookie. Собственно как должны меняться ссылки в синей части меню это соображу. А вот в остальном задачу не соображу как реализовать.

voraa 22.03.2020 20:46

Многое зависит от того, какими механизмами Вы пользуетесь
Если при каждом выборе в меню идет обращение к серверу, который генерит страницу, это одно. Пусть он ее и генерит всю, в зависимости от ссылки вместе с меню.
А если вы загружаете сразу весь возможный контент (для всего меню), то при нажатии пункта меню должен становится видимым тот блок, который к нему относится, а остальные гаситься.

Mytnyi 22.03.2020 21:10

voraa,
Процесс должен происходит по средствам cookie

рони 22.03.2020 21:48

Mytnyi,
Открывашка 253 с запоминаем открытой вкладки

Mytnyi 22.03.2020 23:14

Цитата:

Сообщение от рони (Сообщение 521631)

Спасибо. Но проблема нерешилась. После нажатия на юрлица пользователь переходит на другу ссылку, а вкладка юрлица должна быть активна. а в приведенном вами примере пользователь остается на одной странице.

voraa 22.03.2020 23:23

Цитата:

Сообщение от Mytnyi (Сообщение 521630)
voraa,
Процесс должен происходит по средствам cookie

Сорри, но какой в этом смысл?
Зачем заставлять пользователя возвращаться на то место, с которого он ушел? Это не роман, который читают последовательно. Это сайт с разнообразной информацией. Человек что то посмотрел, что то ему показалось интересным, он посмотрел еще пару пунктов меню, не нашел ничего важного и ушел. И зачем следующий раз возвращать его туда же?
Представьте, что так поступал бы какой-нибудь сайт типа mdn, или википедии?.
Пусть человек положит интересующее его место в закладку.

Mytnyi 22.03.2020 23:44

Цитата:

Сообщение от рони (Сообщение 521631)

Цитата:

Сообщение от voraa (Сообщение 521633)
Сорри, но какой в этом смысл?
Зачем заставлять пользователя возвращаться на то место, с которого он ушел? Это не роман, который читают последовательно. Это сайт с разнообразной информацией. Человек что то посмотрел, что то ему показалось интересным, он посмотрел еще пару пунктов меню, не нашел ничего важного и ушел. И зачем следующий раз возвращать его туда же?
Представьте, что так поступал бы какой-нибудь сайт типа mdn, или википедии?.
Пусть человек положит интересующее его место в закладку.

Попробую объяснить. Вкладки(ссылки) Физическим лицам и юридическим лицам - разные, под ними меню второго уровня тоже с разными ссылками. Человек переходит с вкладки Физические лица на вкладку Юридические лица и у него не только меняется меню второго уровня, но он и сам переходит на другу страницу site.ru/yurliucam/


Суть вся в том что и во вкладах Физические лица и Юридические лица в меню второго уровня попадаются одинаковые ссылки, например, такие как: "Контакты".


И еще весь этот блок хедара у меня подключен на все страницы через:

<?php
include_once "head.php";
?>

то есть, все ссылки, классы и тп. не поменять.

рони 22.03.2020 23:52

Цитата:

Сообщение от Mytnyi
Попробую объяснить.

могу пожелать только удачи, возможно кто-то подскажет решение, сам я не понимаю о чём вы пишите и что вам нужно.

Malleys 23.03.2020 06:41

Mytnyi,

let categoryLink, targetLink;

// среди всех ссылок, которые находятся под вкладками ищется та, которая указывает на текущую страницу,
// на такую найденную ссылку добавляется класс target (чтобы добавить эффект «обводка»)
Array.prototype.filter.call(document.querySelectorAll(".menu > li > a + ul a"), link => link.href === location.href).slice(0, 1).forEach(link => {
	if(targetLink) targetLink.classList.remove("target");
	link.classList.add("target");
	targetLink = link;
});

// находим на самих вкладках такую ссылку, адрес которой совпадает с текущим адресом страницы (если есть)
categoryLink = Array.prototype.find.call(document.querySelectorAll(".menu > li > a"), link => link.href === location.href);
// а если нет, то определяет ссылку на вкладке, к какой категории относится текущая страница
categoryLink = targetLink ? targetLink.closest(".menu > li").querySelector("a") : categoryLink ? categoryLink : document.querySelector(".menu > li > a");
// на такую найденную ссылку добавляется класс active (чтобы добавить эффект «выбранная вкладка»)
categoryLink.classList.add("active");


Здесь выполняются две задачи — обводится в кружочек ссылка, на которую перешли, и показывается та вкладка, где эта обведённая ссылка находится.

Рабочий пример можно посмотреть тут — https://charm-launch.glitch.me/h/ (код можно смотреть через консоль разработчика в браузере (Ctrl+Shift+I или F12), или только исходный код страницы (Ctrl+U)

Цитата:

Сообщение от Mytnyi
Процесс должен происходит по средствам cookie

И как он сможет произойти, если например ссылка была отправлена кому-то? Правильней сказать так — «Процесс должен происходить при помощи URL». Т. е. основываясь на текущем значении URL страницы, нужно найти ссылку, которую нужно «обвести в кружочек» (если возможно), также ссылку, которая представляет «вкладку» (т. е. текущую категорию, а если не возможно, то состояние по умолчанию — в примере выше это первая попавшая вкладка и подкатегория не выбирается — состояние, которое подходит, если ссылки нет в списке меню)

voraa 23.03.2020 07:45

Цитата:

Сообщение от Mytnyi (Сообщение 521634)
Суть вся в том что и во вкладах Физические лица и Юридические лица в меню второго уровня попадаются одинаковые ссылки, например, такие как: "Контакты".


И еще весь этот блок хедара у меня подключен на все страницы через:

<?php
include_once "head.php";
?>

то есть, все ссылки, классы и тп. не поменять.

А я еще раз спрашиваю, как организовано взаимодействие с сервером?
При переходе с вкладки на вкладку и на каждый пункт на сервере меню полностью генерится новая страница?
А как генерится нужный хедар? Он тоже зависит от куков?
Но это не совсем правильно. Как уже писал Malleys, невозможно будет запомнить ссылку на страницу или отослать ее кому то, т.к. нужных куков не будет.
Здесь нужно использовать адреса
Например
site.ru?tab=yur&men=doc
site.ru?tab=phys&men=cat

Это и на сервере разобрать можно (get запросы) и браузер разберет, если нужно (url.search)


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