Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 22.02.2019 11:13:26

Переключение точек сбыта

Экспериментирую с созданием сайта-магазина на laravel 5.7. Пытаюсь реализовать функционал точек сбыта - отдельных магазинов, регионов, стран и т.п., которым присущи свои отдельные товары и цены.

Переключатель в хедере. При посещении сайта автоматически устанавливается значение по-умолчанию (потом быть может будет определяться по положению).

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

Laravel 5.7.17
php 7.3.2

Изменено n_osennij (22.02.2019 11:25:06)

Не в сети

#2 22.02.2019 12:17:34

Re: Переключение точек сбыта

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


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Не в сети

#3 22.02.2019 12:24:55

Re: Переключение точек сбыта

artoodetoo, совсем не понял, как это применить. Быть может я запутано объяснил, что я пытаюсь понять?

Не в сети

#4 22.02.2019 12:39:56

Re: Переключение точек сбыта

Видимо тебе стоит начать делать, чтобы хотелка стала менее абстрактной.
Не думаю что я должен объяснять что такое URL (Universal Resource Locator) или маршрут (route).


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Не в сети

#5 22.02.2019 12:47:53

Re: Переключение точек сбыта

artoodetoo, но как маршруты связаны вообще с тем, что я хочу сделать? Я попробую ещё раз объяснить.

У меня есть хедер (отдельный вид в отдельном файле header.blade.php). Хедер подключается абсолютно ко всем страницам сайта вне зависимости от роута. В хедере я хочу выводить переключатель страны, например. При посещении сайта страна устанавливается автоматически. Дальше пользователь может её изменить. Т.е. по факту при первом посещении где-то (где?) нужно присвоить значение по-умолчанию или считать из кеша уже установленное, если посещение не первое, и вывести в хедере.

Не в сети

#6 22.02.2019 12:54:58

Re: Переключение точек сбыта

Я уже сказал что считал важным по теме. Маршруты (параметры маршрута) напрямую связаны с тем, что ты выводишь.

Адрес → добыча данных по заданным параметрам → вывод данных

"Присвоить где-то" в данном случае означает перейти по URL с параметром-регионом. Всё.
Ну окей, при этом ещё в куке или сессии можно сохранить, но всё равно, если ты выводишь список магазинов в Челябинске, то он не должен иметь тот же URL что список магазинов в Краснодаре. Иначе он будет индексироваться поисковиками неправильно и будут проблемы с адресами в почтовых рассылках. Я опасаюсь, что твоё представление об "автоматически" означает что один и тот же URL может соответствовать разному контенту, в зависимости от некой магии. Это было бы неудачным решением.

Расчет вероятного региона из IP для выделения в списке регионов, это отдельная задача. Не стоит смешивать в кучу людей и коней. Про то гугли "GeoIP".

Изменено artoodetoo (22.02.2019 13:38:57)


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Не в сети

#7 22.02.2019 13:31:55

Re: Переключение точек сбыта

Попробуем поиграть в реверс инжиниринг. Эльдорадо: пытается определить по IP какой у тебя регион. Но если ты выбрал сам, то он это запомнит, вероятно в сессии, (в куках я не нашел чего-то такого), а также в теле страницы вот такое упоминает чтобы скрипты могли прочитать:

<body data-region="che"
      data-regionsectionid="11298"
      data-regionID="6449940"
      data-semEnabledByRegion="1"
      class="innerPage sem">

В итоге, когда кликаешь "Адреса магазинов", то происходит переход на
https://www.eldorado.ru/info/shops/11298/ для Челябинска
https://www.eldorado.ru/info/shops/11297/ для Екатеринбурга
Уверен, что 11297 и 11298 являются значениями ключа в таблице филиалов.

Я ответил на твой вопрос?

Изменено artoodetoo (22.02.2019 13:37:50)


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Не в сети

#8 22.02.2019 13:49:59

Re: Переключение точек сбыта

artoodetoo, я, кажется, начал понимать. Но мне нужно время, чтобы всё это переварить и изучить спокойно. Обязательно отвечу немного позже! Спасибо!

Изменено n_osennij (22.02.2019 13:50:11)

Не в сети

#9 22.02.2019 15:38:26

Re: Переключение точек сбыта

artoodetoo, немного подумал, почитал, разобрался. Да, нужно считаться с индексированием. Думаю делать url адрес с указанием точки сбыта в виде дополнительно параметра `r`

test.com?r=14
test.com/catalog?r=14
test.com/ru/catalog/category?r=14

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

Не в сети

Подвал раздела