Страница 1 из 212»
Модератор форума: sergeymitrichev 
Сообщество uCoz » Модули uCoz » Интернет-магазин » Вывод информации в зависимости от города пользователя
Вывод информации в зависимости от города пользователя
Alex_web
Сообщений: 14
Репутация: 7

Сообщение # 1 | 12:24:31
Здравствуйте!
По роду своей деятельности я часто имею дело с разработкой интернет магазинов, и очень часто получаю просьбу сделать выбор города на сайте с выводом определенной информации для каждого из них. И тут начинается изобретение велосипедов, потому что в силу своей ограниченности на юкозе по нормальному это не реализовать.
Если посмотреть популярные магазины на других cms, то можно заметить, что практически на каждом из них есть выбор города, страница доставки/оплаты/контакты конкретно под каждый из городов, вывод только доступных способов оплаты и доставки для конкретного города и другое.
Мало кто знает, что на юкозе есть переменная $COOKIE$, которая позволяет реализовать нечто подобное. Как это работает? Мы выводим пользователю меню с списком городов, после выбора одного из них его название мы сохраняем в cookie. После этого в нужном месте шаблона мы можем использовать следующую конструкцию, простую даже для новичков:
<?if($COOKIE$=='Москва')?>этот текст будет отображаться только для Москвы<?endif?>
<?if($COOKIE$=='Санкт Петербург')?>текст для Санкт Петербурга<?endif?>
Не обязательно это будет выбор города, можно, к примеру, сделать подобие мультиязычного сайта, которое пользователи ждут с 2013 года. Конечно, этим способом не сделать полноценную мультиязычную версию сайта и есть свои нюансы, такие как лимит шаблона в 80000 символов, но все же это лучше, чем ничего.
Все было бы замечательно, если бы не огромный минус - эта переменная работает только в модуле "Интернет Магазин", и не работает в информерах (даже в ИМ) и других модулях, в том числе в "Редакторе страниц", где чаще всего располагаются страницы "Доставка", "Оплата", "Контакты" и т.п.
Смысл моего поста - хотелось бы услышать мнение пользователей, если им интересен подобный функционал, я согласен создать подробную инструкцию с необходимыми скриптами для реализации подобного на ваших сайтах. Взамен нужно содействие со стороны программистов юкоза, для активации переменной $COOKIE$ во всех модулях системы и информерах в идеале, или хотя бы в "Редакторе страниц".

для модераторов: данный пост больше подходит для категории "Предложения по системе" или сайта all.uwishlist.ru, но именно в категории "Интернет-магазин" он найдет свою целевую аудиторию, поэтому прошу оставить его здесь.
sergeymitrichev
Интернет Магазины
Сообщений: 1888
Репутация: 396

Сообщение # 2 | 09:37:28
Alex_web, $COOKIE$ это как обертка, можете использовать готовый плагин jQuery Cookie. После его подключения все просто:

Код
// установить новые куки или переписать значения у уже существующих:
$.cookie('Город', 'Москва');

// получить значение
$.cookie('Город');

// удалить куки
$.cookie('Город', null);


С другой стороны, если пользователь авторизован, то используйте поле профиля "Город". Записать город туда можно с помощью uAPI после первого выбора (или последующего изменения).

А далее, нужно написать скрипт, который получая на вход город, будет отдавать набор товаров из uAPI (вместо информера) или необходимую страницу оплаты/доставки. Под каждый город создается своя страница, а скрипт просто выбирает нужную и показывает ее содержимое.

Для мультиязычности тот же алгоритм. Куки или поле "Страна" в профиле (каждой стране можно сопоставить язык).

Likbezz_Flesh
Сообщений: 205
Репутация: 43

Сообщение # 3 | 18:56:32
Цитата Alex_web ()
Мало кто знает, что на юкозе есть переменная $COOKIE$

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

Сообщение отредактировал Likbezz_Flesh - Понедельник, 10 Апр 2017, 18:58:07
Alex_web
Сообщений: 14
Репутация: 7

Сообщение # 4 | 21:26:19
sergeymitrichev, куки не то, потому что:
  • для рядового пользователя это <?if($COOKIE$=='Москва')?> проще, чем работа с js
  • в шаблонах информацию прописывать намного быстрее, чем хранить в отдельных файлах, и прописывать в скриптах что и куда выводить

  • в зависимости от условия на сервере можно выводить разные системные блоки

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

Likbezz_Flesh, про $SPEC_FLAG$ не знал. Из того минимума информации, что есть в интернете по этой переменной, я понял, что она работает только для авторизованных пользователей. Если это действительно так, то этот вариант тоже не подходит.
Likbezz_Flesh
Сообщений: 205
Репутация: 43

Сообщение # 5 | 02:16:48
Цитата Alex_web ()
В процессе работы с сайтом вы предлагаете перезаписать это значение без спроса пользователя?

Можно перезаписывать скрытое поле.. Но все равно, как вы и говорите - это танцы с бубном..

Цитата Alex_web ()
она работает только для авторизованных пользователей

Совершенно верно - привязана к профилю.
Лично я ее использую для бывода облегченной версии сайта - при входе даю возможность выбирать - обычную версию и облегченную.
Работает во многих, если не во всех шаблонах, точно не проверял.
Единственный минус - человек должен выть авторизаван и изменить ее можно только со сменой сессии.

Цитата Alex_web ()
Если это действительно так, то этот вариант тоже не подходит.

Ну, про другие варианты вам сказали выше.
На данный момент все решения - это JavaScript, в той или иной степени.

sergeymitrichev
Интернет Магазины
Сообщений: 1888
Репутация: 396

Сообщение # 6 | 07:59:16
Alex_web, для рядового пользователя это загрузка скрипта на сайт. Ни о каком JS речи не идет, все в одном файле.
Цитата Alex_web ()
К примеру, при регистрации пользователь указал город, какой ему захотелось
посмотрите, как реализован выбор города в любом крупном интернет-магазине.

Alex_web
Сообщений: 14
Репутация: 7

Сообщение # 7 | 10:21:40
Цитата sergeymitrichev ()
посмотрите, как реализован выбор города в любом крупном интернет-магазине
я далек от бекенда, но предположу, что у них есть человеческая адинка, где они вносят нужные данные, которые впоследствии сохраняются в БД и отдаются конечному пользователю уже в коде страницы. Что мы имеем на юкоз - доступа к БД нету, все храним в файлах. Нужно следить, чтобы их количество в папке не превысило лимит, прописывать в скрипте, какие файлы куда выводить. Подгрузка информации ajax'ом.
По поводу одного файла - представьте ситуацию, у нас есть 10 страниц, на которых нужно выводить информацию в общей сумме до 80000 символов. По приблизительным подсчетам - это уже 1Мб. Пользователи моб. устройств будут в восторге. Да и владельцы десктопов также, наблюдая, как через несколько секунд одна информация заменяется другой. Трудно еще сказать, как к подмене контента отнесутся поисковики.
Да, можно возвращать конечному пользователю с помощью php только нужную часть, тут все сводиться к покупке пакета с php. И опять же, многим владельцам такого решения трудно будет редактировать такой файл, строго соблюдая синтаксис js или json?
sergeymitrichev
Интернет Магазины
Сообщений: 1888
Репутация: 396

Сообщение # 8 | 11:56:15
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();
         }
Вам даже необязательно писать скрипт для ввода данных в базу, для этого есть SQLite менеджеры типа такого https://sqliteonline.com

В этой базе Вы можете завести таблицу вида "Город" : "ID страницы". И просто слать запрос с городом, скрипт отдаст ID страницы, содержимое которой надо вывести.

Likbezz_Flesh
Сообщений: 205
Репутация: 43

Сообщение # 9 | 12:02:09
Цитата Alex_web ()
По поводу одного файла - представьте ситуацию, у нас есть 10 страниц, на которых нужно выводить информацию в общей сумме до 80000 символов.

Представьте, имеется база, допустим, в SQLite, имеется админка в которой можно заносить города и информацию, которая привязана к этому городу.
От пользователя поступает запрос на конкретную информацию по конкретному городу, которая выберается из базы и отдается пользователю. Суммарный объем базы (максимально возможный на юкоз - 10 Mb) никак не повлияет на скорость отдачи, отдаваемые данные, даже в формате json врятли превысят 50 кб..

Цитата Alex_web ()
Да и владельцы десктопов также, наблюдая, как через несколько секунд одна информация заменяется другой.

Что бы не наблюдать такого, нужно грамотно организовывать вывод информации.

Цитата Alex_web ()
Трудно еще сказать, как к подмене контента отнесутся поисковики.

А что поисковикам делать на странице заказа, посвященной доставке?..

Конечно, я понимаю, что если бы это было организовано стстемно - было бы гораздо лучше, но и то о чем вы говорите - про мегабайты и 80000 символов - это тоже крайность.
Если захотеть, можно грамотно и красиво все это организовать..

Сообщение отредактировал Likbezz_Flesh - Вторник, 11 Апр 2017, 12:07:36
Alex_web
Сообщений: 14
Репутация: 7

Сообщение # 10 | 12:31:31
Цитата Likbezz_Flesh ()
Что бы не наблюдать такого, нужно грамотно организовывать вывод информации.
Хорошо, второй пример: есть страница, на которой размещена галерея - 100 фото, общим объемом 10Мб. При смене города должны загрузиться 100 других фото с таким же объемом. Каким образом вы это грамотно реализуете на SQLite или другим способом, чтобы не было заметно подгрузки информации.
С получением ответа от php скриптов с помощью js ситуации выше не избежать.
Цитата Likbezz_Flesh ()
но и то о чем вы говорите - про мегабайты и 80000 символов - это тоже крайность.
Я из крайности в крайность, так более наглядно видно проблему.
Цитата Likbezz_Flesh ()
А что поисковикам делать на странице заказа, посвященной доставке?
Ну это же не единственное место, где может использоваться переменная. Кто-то захочет сделать мультиязычный сайт, в котором описание главной страницы будет на разных языках.
sergeymitrichev, пример для вас: В виде материала или на его странице в зависимости от города нужно выводить доп поля 1 или 2. С системной переменной:
Код
<?if($COOKIE$=='Москва')?>$OTHER1$<?endif?><?if($COOKIE$=='Санкт Петербург')?>$OTHER2$<?endif?>

На сайте 10 000 материалов. Предлагаете все дублировать в базу SQLite?
sergeymitrichev
Интернет Магазины
Сообщений: 1888
Репутация: 396

Сообщение # 11 | 12:46:20
Цитата Alex_web ()
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}

Это даже позволит переключать город и показывать актуальные результаты без перезагрузки страницы.

Alex_web
Сообщений: 14
Репутация: 7

Сообщение # 12 | 13:08:50
sergeymitrichev, среди сео-оптимизаторов бытует мнение, что скрытие контента не есть ок. Ладно еще пример выше с дополнительными полями, а если это описание материала, в виде большого объема текста с фото и видео, которые к тому же будут тормозить загрузку страницы, ведь нужна будет только половина. А если городов не 2, а 10, что более реально, объем скрытого контента увеличится пропорционально.
Likbezz_Flesh
Сообщений: 205
Репутация: 43

Сообщение # 13 | 13:10:26
Цитата Alex_web ()
Хорошо, второй пример: есть страница, на которой размещена галерея - 100 фото, общим объемом 10Мб. При смене города должны загрузиться 100 других фото с таким же объемом. Каким образом вы это грамотно реализуете на SQLite или другим способом

Элементарно:
Код
<img src="<?if($COOKIE$)?>/$COOKIE$<?endif?>/photo_1.png" />

- если есть переменная $COOKIE$, то грузим картинки из папки == имени куки.
Естественно, имя $COOKIE$ желательно в латинице.

Ну а если через базу, то затеняем блок, вешаем гифку загрузки, делаем запрос, получаем информацию, формируем код, вставляем его, снимаем затенение и гифку..

Реализовано на многих сайтах, между прочим..

Цитата Alex_web ()
С получением ответа от php скриптов с помощью js ситуации выше не избежать.

Вы говорите о каком времени? сотых далях секунды? Это-то да, конечно..

Цитата Alex_web ()
Я из крайности в крайность, так более наглядно видно проблему.

Я понимаю.. Но отдавать страницу в 10 метров мобильнику - это уже не просто крайность..

Цитата Alex_web ()
Ну это же не единственное место, где может использоваться переменная. Кто-то захочет сделать мультиязычный сайт

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

Цитата Alex_web ()
среди сео-оптимизаторов бытует мнение

© Кто не хочет - ищет причины..

Цитата Alex_web ()
а если это описание материала, в виде большого объема текста с фото и видео, которые к тому же будут тормозить загрузку страницы, ведь нужна будет только половина

Это уже мультиязычность - я за нее выше сказал.

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

Сообщение отредактировал Likbezz_Flesh - Вторник, 11 Апр 2017, 13:19:24
sergeymitrichev
Интернет Магазины
Сообщений: 1888
Репутация: 396

Сообщение # 14 | 13:39:59
Цитата Alex_web ()
sergeymitrichev, среди сео-оптимизаторов бытует мнение, что скрытие контента не есть ок. Ладно еще пример выше с дополнительными полями, а если это описание материала, в виде большого объема текста с фото и видео, которые к тому же будут тормозить загрузку страницы, ведь нужна будет только половина. А если городов не 2, а 10, что более реально, объем скрытого контента увеличится пропорционально.
Под каждый город лучше продвигать отдельную страницу. Если вопрос ставится таким образом, то и подход с куками не будет работать должным образом. Тут уже лучше идти по пути динамического формирования каталога, когда скрипт через uAPI будет должен образом генерить шаблон вида товаров.

С другой стороны, скрытие контента в данном случае, нормальная практика, опять же, смотрим примеры крупных сайтов. Часть контента скрыта и показывается по запросу/действию пользователя. Да взять популярные плагины, типа табов или слайдеров, у них тоже скрыто больше половины содержимого. Вы же не манипулируете выдачей?

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

Alex_web
Сообщений: 14
Репутация: 7

Сообщение # 15 | 13:55:42
Цитата Likbezz_Flesh ()
Элементарно:<img src="<?if($COOKIE$)?>/$COOKIE$<?endif?>/photo_1.png" />
1

- если есть переменная $COOKIE$, то грузим картинки из папки == имени куки.
Естественно, имя $COOKIE$ желательно в латинице.
Отличный пример, но в том то и проблема, что это сработает только в модуле ИМ.
Цитата Likbezz_Flesh ()
Ну а если через базу, то затеняем блок, вешаем гифку загрузки, делаем запрос, получаем информацию, формируем код, вставляем его, снимаем затенение и гифку..
Я слабо представляю человека, которому понравиться пользоваться таким сайтом. Как это выглядит: пользователь открывает каждую страницу и видит прелоадер, во время которого сначала грузиться дефолтный контент (поисковикам ведь нужно что-то скормить), потом с сервера подгружается контент для выбранного города и заменяет текущий.
Цитата Likbezz_Flesh ()
Вы говорите о каком времени? сотых далях секунды? Это-то да, конечно..
ответ от сервера - да, доли секунды. Загрузка информации, которую прислал сервер (ссылки на фото, размер последних 10Мб) - прикиньте сами.
Цитата Likbezz_Flesh ()
Я понимаю.. Но отдавать страницу в 10 метров мобильнику - это уже не просто крайность..
Согласен, но вы это не мне говорите, а владельцам сайтов, основная масса которых далеки от сайтостроения.
На днях на одном сайте видел иконку в 2к разрешении, на странице она выводится с размерами 40х40px. Что там говорить о фото в описаниях.
Цитата Likbezz_Flesh ()
Ваша проблема решаема
Вышеописанным предложениям лучше подходит слово "костыли" - от скрытия контента до дублирования его в отдельную базу - такие себе решения.
Цитата Likbezz_Flesh ()
© Кто не хочет - ищет причины..
Не понял вашего сарказма. В интернете куча информации в том числе и от топовых сео-блогеров, что скрытие контента негативно сказывается на продвижении, вплоть до санкций со стороны поисковиков. Я не могу утверждать, что так и есть, сам лично не проверял, поэтому руководствуюсь информацией из сети.

Добавлено (11 Апр 2017, 13:55:42)
---------------------------------------------

Цитата sergeymitrichev ()
Под каждый город лучше продвигать отдельную страницу.
Вопрос не в продвижении, а реализации мультирегионального сайта, в плане вывода нужной информации для каждого из городов, при котором это не повлияет на поисковики худшую сторону.
Цитата sergeymitrichev ()
С другой стороны, скрытие контента в данном случае, нормальная практика
Как уже написал выше - это не мне судить. Я лишь руководствуюсь мнением людей, которые, по моему мнению, разбираются в этом вопросе.
Цитата sergeymitrichev ()
Как видите, способов много
Способов дедействительно много, но для рядового владельца магазином их можно описать одной фразой "Обращайтесь на upartner"
Сообщество uCoz » Модули uCoz » Интернет-магазин » Вывод информации в зависимости от города пользователя
Страница 1 из 212»
Поиск: