Модератор форума: Yuri_G |
Сообщество uCoz Модули uCoz Интернет-магазин Вывод информации в зависимости от города пользователя |
Вывод информации в зависимости от города пользователя |
Здравствуйте!
По роду своей деятельности я часто имею дело с разработкой интернет магазинов, и очень часто получаю просьбу сделать выбор города на сайте с выводом определенной информации для каждого из них. И тут начинается изобретение велосипедов, потому что в силу своей ограниченности на юкозе по нормальному это не реализовать. Если посмотреть популярные магазины на других cms, то можно заметить, что практически на каждом из них есть выбор города, страница доставки/оплаты/контакты конкретно под каждый из городов, вывод только доступных способов оплаты и доставки для конкретного города и другое. Мало кто знает, что на юкозе есть переменная $COOKIE$, которая позволяет реализовать нечто подобное. Как это работает? Мы выводим пользователю меню с списком городов, после выбора одного из них его название мы сохраняем в cookie. После этого в нужном месте шаблона мы можем использовать следующую конструкцию, простую даже для новичков: <?if($COOKIE$=='Москва')?>этот текст будет отображаться только для Москвы<?endif?> <?if($COOKIE$=='Санкт Петербург')?>текст для Санкт Петербурга<?endif?> Не обязательно это будет выбор города, можно, к примеру, сделать подобие мультиязычного сайта, которое пользователи ждут с 2013 года. Конечно, этим способом не сделать полноценную мультиязычную версию сайта и есть свои нюансы, такие как лимит шаблона в 80000 символов, но все же это лучше, чем ничего. Все было бы замечательно, если бы не огромный минус - эта переменная работает только в модуле "Интернет Магазин", и не работает в информерах (даже в ИМ) и других модулях, в том числе в "Редакторе страниц", где чаще всего располагаются страницы "Доставка", "Оплата", "Контакты" и т.п. Смысл моего поста - хотелось бы услышать мнение пользователей, если им интересен подобный функционал, я согласен создать подробную инструкцию с необходимыми скриптами для реализации подобного на ваших сайтах. Взамен нужно содействие со стороны программистов юкоза, для активации переменной $COOKIE$ во всех модулях системы и информерах в идеале, или хотя бы в "Редакторе страниц". для модераторов: данный пост больше подходит для категории "Предложения по системе" или сайта all.uwishlist.ru, но именно в категории "Интернет-магазин" он найдет свою целевую аудиторию, поэтому прошу оставить его здесь. |
Alex_web, $COOKIE$ это как обертка, можете использовать готовый плагин jQuery Cookie. После его подключения все просто:
Код // установить новые куки или переписать значения у уже существующих: $.cookie('Город', 'Москва'); // получить значение $.cookie('Город'); // удалить куки $.cookie('Город', null); С другой стороны, если пользователь авторизован, то используйте поле профиля "Город". Записать город туда можно с помощью uAPI после первого выбора (или последующего изменения). А далее, нужно написать скрипт, который получая на вход город, будет отдавать набор товаров из uAPI (вместо информера) или необходимую страницу оплаты/доставки. Под каждый город создается своя страница, а скрипт просто выбирает нужную и показывает ее содержимое. Для мультиязычности тот же алгоритм. Куки или поле "Страна" в профиле (каждой стране можно сопоставить язык). |
А еще есть переменная $SPEC_FLAG$ - в которую тоже можно занести какую-либо инфу и она работает по всему сайту (на счет информеров не знаю..).. Причем она будет привязана не к кукам, а к конкретному пользователю.. Сообщение отредактировал Likbezz_Flesh - Понедельник, 10 Апр 2017, 18:58:07
|
sergeymitrichev, куки не то, потому что:
Поля с персональной страницы пользователя тоже не подходят. К примеру, при регистрации пользователь указал город, какой ему захотелось. В процессе работы с сайтом вы предлагаете перезаписать это значение без спроса пользователя? Likbezz_Flesh, про $SPEC_FLAG$ не знал. Из того минимума информации, что есть в интернете по этой переменной, я понял, что она работает только для авторизованных пользователей. Если это действительно так, то этот вариант тоже не подходит. |
В процессе работы с сайтом вы предлагаете перезаписать это значение без спроса пользователя? Можно перезаписывать скрытое поле.. Но все равно, как вы и говорите - это танцы с бубном.. Совершенно верно - привязана к профилю. Лично я ее использую для бывода облегченной версии сайта - при входе даю возможность выбирать - обычную версию и облегченную. Работает во многих, если не во всех шаблонах, точно не проверял. Единственный минус - человек должен выть авторизаван и изменить ее можно только со сменой сессии. Ну, про другие варианты вам сказали выше. На данный момент все решения - это JavaScript, в той или иной степени. |
Alex_web, для рядового пользователя это загрузка скрипта на сайт. Ни о каком JS речи не идет, все в одном файле.посмотрите, как реализован выбор города в любом крупном интернет-магазине.
|
я далек от бекенда, но предположу, что у них есть человеческая адинка, где они вносят нужные данные, которые впоследствии сохраняются в БД и отдаются конечному пользователю уже в коде страницы. Что мы имеем на юкоз - доступа к БД нету, все храним в файлах. Нужно следить, чтобы их количество в папке не превысило лимит, прописывать в скрипте, какие файлы куда выводить. Подгрузка информации ajax'ом.
По поводу одного файла - представьте ситуацию, у нас есть 10 страниц, на которых нужно выводить информацию в общей сумме до 80000 символов. По приблизительным подсчетам - это уже 1Мб. Пользователи моб. устройств будут в восторге. Да и владельцы десктопов также, наблюдая, как через несколько секунд одна информация заменяется другой. Трудно еще сказать, как к подмене контента отнесутся поисковики. Да, можно возвращать конечному пользователю с помощью php только нужную часть, тут все сводиться к покупке пакета с php. И опять же, многим владельцам такого решения трудно будет редактировать такой файл, строго соблюдая синтаксис js или json? |
Alex_web, заведите свою бд на uCoz с помощью SQLite и работайте через PHP PDO
Код try { $db = new PDO('sqlite:my_bd.sqlite'); // Запрос к таблице TableName $query = $db->query('SELECT * FROM TableName')->fetchAll(); foreach($query as $value) { // делаем что-то с результатом запроса } } catch (PDOException $e) { echo 'Подключение не удалось: ' . $e->getMessage(); } В этой базе Вы можете завести таблицу вида "Город" : "ID страницы". И просто слать запрос с городом, скрипт отдаст ID страницы, содержимое которой надо вывести. |
По поводу одного файла - представьте ситуацию, у нас есть 10 страниц, на которых нужно выводить информацию в общей сумме до 80000 символов. Представьте, имеется база, допустим, в SQLite, имеется админка в которой можно заносить города и информацию, которая привязана к этому городу. От пользователя поступает запрос на конкретную информацию по конкретному городу, которая выберается из базы и отдается пользователю. Суммарный объем базы (максимально возможный на юкоз - 10 Mb) никак не повлияет на скорость отдачи, отдаваемые данные, даже в формате json врятли превысят 50 кб.. Да и владельцы десктопов также, наблюдая, как через несколько секунд одна информация заменяется другой. Что бы не наблюдать такого, нужно грамотно организовывать вывод информации. А что поисковикам делать на странице заказа, посвященной доставке?.. Конечно, я понимаю, что если бы это было организовано стстемно - было бы гораздо лучше, но и то о чем вы говорите - про мегабайты и 80000 символов - это тоже крайность. Если захотеть, можно грамотно и красиво все это организовать.. Сообщение отредактировал Likbezz_Flesh - Вторник, 11 Апр 2017, 12:07:36
|
Хорошо, второй пример: есть страница, на которой размещена галерея - 100 фото, общим объемом 10Мб. При смене города должны загрузиться 100 других фото с таким же объемом. Каким образом вы это грамотно реализуете на SQLite или другим способом, чтобы не было заметно подгрузки информации.
С получением ответа от php скриптов с помощью js ситуации выше не избежать. но и то о чем вы говорите - про мегабайты и 80000 символов - это тоже крайность. Ну это же не единственное место, где может использоваться переменная. Кто-то захочет сделать мультиязычный сайт, в котором описание главной страницы будет на разных языках. sergeymitrichev, пример для вас: В виде материала или на его странице в зависимости от города нужно выводить доп поля 1 или 2. С системной переменной: Код <?if($COOKIE$=='Москва')?>$OTHER1$<?endif?><?if($COOKIE$=='Санкт Петербург')?>$OTHER2$<?endif?> На сайте 10 000 материалов. Предлагаете все дублировать в базу SQLite? |
sergeymitrichev, пример для вас: В виде материала или на его странице в зависимости от города нужно выводить доп поля 1 или 2. С системной переменной: город: номер поля шаблон каталога: один запрос на сопоставление "город-поле", возвращается id поля, которое нужно показать. это id включите в CSS класс, который можно добавить для родительского div'a. Пример <div class="visible-field-1">... вид товаров ...</div> CSS: .field-1, .field-2 {display: none;} .visible-field-1 .field-1 {display: block} .visible-field-2 .field-2 {display: block} Это даже позволит переключать город и показывать актуальные результаты без перезагрузки страницы. |
sergeymitrichev, среди сео-оптимизаторов бытует мнение, что скрытие контента не есть ок. Ладно еще пример выше с дополнительными полями, а если это описание материала, в виде большого объема текста с фото и видео, которые к тому же будут тормозить загрузку страницы, ведь нужна будет только половина. А если городов не 2, а 10, что более реально, объем скрытого контента увеличится пропорционально.
|
Хорошо, второй пример: есть страница, на которой размещена галерея - 100 фото, общим объемом 10Мб. При смене города должны загрузиться 100 других фото с таким же объемом. Каким образом вы это грамотно реализуете на SQLite или другим способом Элементарно: Код <img src="<?if($COOKIE$)?>/$COOKIE$<?endif?>/photo_1.png" /> - если есть переменная $COOKIE$, то грузим картинки из папки == имени куки. Естественно, имя $COOKIE$ желательно в латинице. Ну а если через базу, то затеняем блок, вешаем гифку загрузки, делаем запрос, получаем информацию, формируем код, вставляем его, снимаем затенение и гифку.. Реализовано на многих сайтах, между прочим.. Вы говорите о каком времени? сотых далях секунды? Это-то да, конечно.. Я понимаю.. Но отдавать страницу в 10 метров мобильнику - это уже не просто крайность.. Ну это же не единственное место, где может использоваться переменная. Кто-то захочет сделать мультиязычный сайт Давайте не будем мешать одно с другим. Ваша проблема решаема, а мультиязычность сайта - это вообще другая область. © Кто не хочет - ищет причины.. а если это описание материала, в виде большого объема текста с фото и видео, которые к тому же будут тормозить загрузку страницы, ведь нужна будет только половина Это уже мультиязычность - я за нее выше сказал. Кстати, в тему - не раз видел на сайтах - русское описание и ниже - на буржуйском..) Да и переводчики никто не отменял.. Сообщение отредактировал Likbezz_Flesh - Вторник, 11 Апр 2017, 13:19:24
|
sergeymitrichev, среди сео-оптимизаторов бытует мнение, что скрытие контента не есть ок. Ладно еще пример выше с дополнительными полями, а если это описание материала, в виде большого объема текста с фото и видео, которые к тому же будут тормозить загрузку страницы, ведь нужна будет только половина. А если городов не 2, а 10, что более реально, объем скрытого контента увеличится пропорционально. С другой стороны, скрытие контента в данном случае, нормальная практика, опять же, смотрим примеры крупных сайтов. Часть контента скрыта и показывается по запросу/действию пользователя. Да взять популярные плагины, типа табов или слайдеров, у них тоже скрыто больше половины содержимого. Вы же не манипулируете выдачей? Надо смотреть Вашу реальную задачу и пытаться ее решить. Как видите, способов много |
Элементарно:<img src="<?if($COOKIE$)?>/$COOKIE$<?endif?>/photo_1.png" /> 1 - если есть переменная $COOKIE$, то грузим картинки из папки == имени куки. Естественно, имя $COOKIE$ желательно в латинице. Ну а если через базу, то затеняем блок, вешаем гифку загрузки, делаем запрос, получаем информацию, формируем код, вставляем его, снимаем затенение и гифку.. ответ от сервера - да, доли секунды. Загрузка информации, которую прислал сервер (ссылки на фото, размер последних 10Мб) - прикиньте сами. Я понимаю.. Но отдавать страницу в 10 метров мобильнику - это уже не просто крайность.. На днях на одном сайте видел иконку в 2к разрешении, на странице она выводится с размерами 40х40px. Что там говорить о фото в описаниях. Вышеописанным предложениям лучше подходит слово "костыли" - от скрытия контента до дублирования его в отдельную базу - такие себе решения. Не понял вашего сарказма. В интернете куча информации в том числе и от топовых сео-блогеров, что скрытие контента негативно сказывается на продвижении, вплоть до санкций со стороны поисковиков. Я не могу утверждать, что так и есть, сам лично не проверял, поэтому руководствуюсь информацией из сети. Добавлено (11 Апр 2017, 13:55:42) Как уже написал выше - это не мне судить. Я лишь руководствуюсь мнением людей, которые, по моему мнению, разбираются в этом вопросе.Способов дедействительно много, но для рядового владельца магазином их можно описать одной фразой "Обращайтесь на upartner" |
| |||