Перейти к содержимому


Другой шаблон при заходе с мобильного


  • Вы не можете ответить в тему
Сообщений в теме: 36

#21 makki

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 148 сообщений
Репутация: 7
Начинающий

Отправлено 10 May 2015 - 07:20 AM

PS. а вообще у меня написано дополнение, которое не только меняет шаблон, но еще и для каждого шаблона имеет свое "Управление блоками" и "Общие настройки". Там можно хоть десять разных шаблонов по кругу менять и у каждого будет свой набор и расположение блоков, а также свое количество колонок в категориях и прочие настройки.


Насколькое сложное это дополнение? Вы можете поделиться им или обьяснить логику его работы?
  • 0

#22 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 10 May 2015 - 02:57 PM

Насколькое сложное это дополнение? Вы можете поделиться им или обьяснить логику его работы?

Полелиться не могу, не буду выкладывать это дополнение в открытый доступ. А логику работы... Хм..
1. Делаем для каждого шаблона отдельный набор настроек блоков и отдельный набор "общих настроек".
2. используем $_SESSION['CUSTOM_DESIGN'] для указания пользовательского шаблона.
3. причесываем все остальное, чтобы оно работало.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#23 Den

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 117 сообщений
Репутация: 0
Начинающий

Отправлено 15 May 2015 - 03:42 PM

При автоматическом выборе шаблона в зависимости от устройства, на котором просматривается сайт, Google рекомендует использовать HTTP-заголовок Vary:

HTTP-заголовок Vary обладает двумя полезными и важными характеристиками:

  • Он сообщает кеширующим прокси-серверам (которые используются, в частности, интернет-провайдерами), что при принятии решения о показе страницы из кеша необходимо учитывать агента пользователя. Без HTTP-заголовка Vary система может ошибочно показать пользователям мобильных устройств версию HTML-страницы для обычных компьютеров и наоборот.
  • Этот заголовок помогает роботу Googlebot быстрее находить контент, оптимизированный для мобильных устройств, поскольку он учитывается при сканировании URL адаптированных страниц.

Подробнее тут.

Подозреваю, что в index.php где-то надо добавить строку:
header('Vary: User-Agent');
А вот куда конкретно, подскажите пожалуйста.
  • 0

#24 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 15 May 2015 - 10:09 PM

Я сейчас уже не советовал бы использовать этот модуль. Либо разобраться в нем и чуток переделать. Насколько я помню, в том, что выложено не совсем корректно реализована работа с кэшем. В чем - не помню, просто столкнулся мимоходом при написании более удобного модуля. Тогда я еще не знал про переменную $smarty->compile_id, позволяющую кэшировать все шаблоны в один каталог и приходилось делать под кэш мобильного шаблона свой каталог. Оно нормально и работает, но где-то в конце admin.php есть код очистки кэша при смене шаблона, который не знает про подкаталоги в каталоге cache... вызывает ошибку в логах... бла-бла-бла...

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

PS. Это не имеет отношения к добавлению хидера "vary", я совершенно не в курсе что это такое. Просто такие вот мысли про модуль. А лично я все полезное перевел на штатный бутстраповый шаблон, которому не нужны ни этот хидер, ни разные шаблоны для разных разрешений экрана. Понимаю, что уникальный по дизайну сайт на бутстрап на коленке не переделаешь и желание иметь сайт-дубль для мобильных это нормально и полезно, но вот...
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#25 FusSheva

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 210 сообщений
Репутация: 7
Начинающий

Отправлено 16 May 2015 - 08:08 AM

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

Пора переходить к написанию уникальных шаблонов на Bootstap под этот движок. :) По сути, там нет ничего сложного, если конечно хорошо разобраться в Bootstap'e.
  • 0
Каждый человек способен на многое. Но к сожалению, не каждый знает на что он способен.

#26 Den

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 117 сообщений
Репутация: 0
Начинающий

Отправлено 16 May 2015 - 06:45 PM

Оно нормально и работает, но где-то в конце admin.php есть код очистки кэша при смене шаблона, который не знает про подкаталоги в каталоге cache... вызывает ошибку в логах... бла-бла-бла...

Если использовать модификацию вашего кода от Salp, где папка с кэшем для мобильного шаблона находится в корне сайта, ошибка не беспокоит :).

Заметил другое, то ли связанное с этим модулем то ли нет, еще не разобрался до конца. При смене версии php на хостинге с 5.2 на 5.3 и с установленным этим модулем, перестает работать аякс-корзина и папка сравнения: при нажатии на кнопку в корзину, надпись добавления появляется и не исчезает и товар без перезагрузки страницы в корзину не добавляется. В папку со сравнения не добавляется даже после перезагрузки.
  • 0

#27 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 16 May 2015 - 11:53 PM

перестает работать аякс-корзина и папка сравнения: при нажатии на кнопку в корзину, надпись добавления появляется и не исчезает и товар без перезагрузки страницы в корзину не добавляется.

Это по какой-то причине не срабатывает JS-функция DoCart из head.tpl.html. Товар добавляетcя (это делает аякс-запрос в JS-функции doLoad), а вот функция DoCart, делающая соответствующие видоизменения на странице не отрабатывает. Обычно это происходит когда где-то ДО этой функции некорректный JS-синтаксис и обработка JS прекращается не доходя до DoCart. Или в самой JS-функции DoCart. Включите firebug в Firefox - он покажет ошибки выполнения яваскриптов. Скорее всего, и встроенный отладчик FF покажет, и отладчики других браузеров, просто я привык к firebug и про него знаю точно.

В папку со сравнения не добавляется даже после перезагрузки.

Видимо, не выполняется JS-функция doLoadCpr, находящаяся в user.js ниже функции doLoad. Это наводит на мысль о том, что проблема (ошибка) находится где-то в функции DoLoad перед строкой с вызовом функции DoCart.

PS. По личному опыты работы с чужими сайтами я бы firebug советовал периодически включать ВСЕМ владельцам сайтов. Т.к. иногда список "красных" строчек firebug-а у сайта не влезает даже на пол-экрана. Какие-то недоступные файлы картинок десятками ("Network Error, не удалось загрузить файл bla-bla.jpg" - как-то так), то же самое с яваскриптами, затем ошибки исполнения и синтаксиса в яваскриптах... Хотя сайт вполне работает.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#28 Den

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 117 сообщений
Репутация: 0
Начинающий

Отправлено 17 May 2015 - 11:49 AM

Выяснил, что ошибка возникала на PHP 5.3 и включенном отображении ошибок . Модуль не при чем.

Включите firebug в Firefox - он покажет ошибки выполнения яваскриптов

Firebug показал
SyntaxError: expected expression, got '<'			   /index.php?PHPSESSID=861c73a79e492a6f01756c02b37e1294&do=cart&addproduct=403&xcart=yes&multyaddcount=1&JsHttpRequest=14318551792370-script
<br />
При клике на ссылку из консоли открывает исходный код страницы, что там к чему не понял.
В консоли хрома немного другая ошибка:
Uncaught SyntaxError: Unexpected token <		 index.php?PHPSESSID=f899d064bcc74c978f7a3d12265b8776&do=cart&addproduct=403&xcart=yes&multyaddcount…:1
Но тут при клике на ссылку отображает такое:
<br />
<b>Deprecated</b>:  Assigning the return value of new by reference is deprecated in <b>/home/d/public_html/core/includes/processor/cart.php</b> on line <b>10</b><br />
JsHttpRequest.dataReady({"id":"14318554170190","js":{"shopping_cart_value":"3431","shopping_cart_value_shown":"92 637 \u0433\u0440\u043d.","shopping_cart_items":"13"},"text":"<br \/>\n<b>Deprecated<\/b>:  Function session_unregister() is deprecated in <b>\/home\/d\/dmashura\/shop.liebherr-ukraine.com\/public_html\/core\/includes\/processor\/cart.php<\/b> on line <b>46<\/b><br \/>\n"})
В cart.php строка 10:
$JsHttpRequest = & new JsHttpRequest(DEFAULT_CHARSET);
Гугл "посоветовал" удалить "&" и, о чудо, заработало!!! С compare.php аналогично решилась проблема. Не знаю, что это я удалил и зачем оно там было, если и без него работает. :wacko:
  • 0

#29 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 17 May 2015 - 02:15 PM

Гугл "посоветовал" удалить "&" и, о чудо, заработало!!! С compare.php аналогично решилась проблема. Не знаю, что это я удалил и зачем оно там было, если и без него работает.

"&" это передача "по ссылке" вместо передачи "по значению". В 5.3 оно стало толи deprecated (будет убрано в следующих версиях), толи уже убрано. Сам-то механизм передачи "по ссылке" никуда не делся, но по другому оформляется

Хотя для 5.3 это довольно странно. У меня есть сервер с PHP 5.3.27, на нем ShopCMS нормально работает без каких-либо переделок. Да и на 5.3.8, насколько помню, работал.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#30 Den

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 117 сообщений
Репутация: 0
Начинающий

Отправлено 17 May 2015 - 02:35 PM

Хотя для 5.3 это довольно странно. У меня есть сервер с PHP 5.3.27, на нем ShopCMS нормально работает без каких-либо переделок

В том то и дело, что работает нормально до тех пор, пока не включаешь отображение ошибок в error_handler.php. И тогда все эти Deprecated и вылазят. Просто обычно они вверху страницы, а тут я так понимаю сообщение об ошибке вклинилось в скрипт и разорвало его, может косяк в шаблоне где-то...
У меня PHP 5.3.29
  • 0

#31 Salp

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 218 сообщений
Репутация: 54
Продвинутый

Отправлено 08 October 2016 - 06:16 PM

Немного изменил код для правильных редиректов, вместо:
# BEGIN Mobile-template
if (isset($_GET['mobile_template'])) $_SESSION['mobile_template'] = ($_GET['mobile_template'] == 'yes');
if (!isset($_SESSION['mobile_template'])) $_SESSION['mobile_template'] = is_mobile();
if ($_SESSION['mobile_template'])
{
$smarty->compile_dir = 'core/cache/mobile';
$smarty->cache_dir = 'core/cache/mobile';
}
# END Mobile-template

поставил
  # BEGIN Mobile-template
if (isset($_GET['mobile_template']))
{
$_SESSION['mobile_template'] = ($_GET['mobile_template'] == 'yes');
$_SESSION['is_mobile'] = is_mobile();
if($_SERVER["HTTP_REFERER"]) Redirect($_SERVER["HTTP_REFERER"]); else Redirect('/');
}
if ((!isset($_SESSION['mobile_template']))or($_SESSION['is_mobile'] != is_mobile()))
{
$_SESSION['mobile_template'] = is_mobile();
$_SESSION['is_mobile'] = $_SESSION['mobile_template'];
}
if ($_SESSION['mobile_template'])
{
$smarty->compile_dir = 'core/cachem';
$smarty->cache_dir = 'core/cachem';
}
# END Mobile-template

Да, папку core/cachem нужно создать.
  • 0

#32 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 08 October 2016 - 09:14 PM

Я сейчас вместо

$smarty->compile_dir =...
$smarty->cache_dir = ...

использую

$smarty->compile_id = $template;

Все "откомпилированные" шаблоны из разных наборов шаблонов будут в одном и том же каталоге, но с префиксом $template в начале имени файла, т.е. не будут перескаться друг с другом по имени файла. При этом не надо создавать (и отслеживать) никаких дополнительных папок.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#33 etdnepr

    Продвинутый пользователь

  • Download User
  • PipPipPip
  • 101 сообщений
Репутация: 0
Начинающий

Отправлено 21 March 2017 - 11:16 PM

А не подскажете как сделать так, чтоб при заходе с мобильного открывался не другой шаблон, а сайт на поддомене?
Например какой-нибудь m.site.com, на котором будет стоять тот же сайт например на опенкарте с адаптивным дизайном.
Спасибо!
  • 0

#34 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 22 March 2017 - 07:06 AM

А не подскажете как сделать так, чтоб при заходе с мобильного открывался не другой шаблон, а сайт на поддомене?

Использовать редирект. Что-то типа

if (is_mobile()) Redirect('m.site.com');

  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#35 etdnepr

    Продвинутый пользователь

  • Download User
  • PipPipPip
  • 101 сообщений
Репутация: 0
Начинающий

Отправлено 23 March 2017 - 12:09 AM

Спасибо,Дмитрий!
Из двух правок в index.php я только вместо
if (isset($_SESSION["CUSTOM_DESIGN"]))
вставил
# BEGIN Mobile-template
#  if (isset($_SESSION["CUSTOM_DESIGN"]))
if (is_mobile()) Redirect('http://site.com');
  elseif (isset($_SESSION["CUSTOM_DESIGN"]))
# BEGIN Mobile-template
Не знаю насколько это правильно, но вроде работает)))
  • 0

#36 Dreamer127

    Новичок

  • Пользователи
  • Pip
  • 5 сообщений
Репутация: 0
Начинающий
  • ГородМинск

Отправлено 22 January 2018 - 09:57 PM

Может среди форумчан есть добрый человек, который зальет конечный вариант со всеми правками, актуальный на сегодняшний день ?
А то по всей теме, каждый внес чуточку своего, а что истина, а что чьи то догадки узнает лиш эксперт ^_^ :rolleyes:
  • 0

#37 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 22 January 2018 - 10:12 PM

Может среди форумчан есть добрый человек, который зальет конечный вариант со всеми правками, актуальный на сегодняшний день ?

Может, среди форумчан найдется добрый человек, который подарит Вам баснословную сумму в десять долларов - стоимость конечного варианта дополнения? :)
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)