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


Правила форума

Внимание!!! Если не можете скачать, пожалуйста ознакомьтесь с условиями получения доступа с файлам форума. Правила форума


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


Сообщений в теме: 34

#21 makki

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

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

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

 badisoft (09 марта 2015 - 19:28) писал:


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

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

#22 badisoft

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

  • VIP
  • 5 006 сообщений
Репутация: 766
Мастер

Отправлено 10 мая 2015 - 14:57

 makki сказал:

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

#23 Den

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

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

Отправлено 15 мая 2015 - 15:42

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

Цитата

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

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

#24 badisoft

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

  • VIP
  • 5 006 сообщений
Репутация: 766
Мастер

Отправлено 15 мая 2015 - 22:09

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

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

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

#25 FusSheva

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

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

Отправлено 16 мая 2015 - 08:08

 badisoft (15 мая 2015 - 22:09) писал:

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

#26 Den

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

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

Отправлено 16 мая 2015 - 18:45

 badisoft сказал:

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

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

#27 badisoft

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

  • VIP
  • 5 006 сообщений
Репутация: 766
Мастер

Отправлено 16 мая 2015 - 23:53

 Den сказал:

перестает работать аякс-корзина и папка сравнения: при нажатии на кнопку в корзину, надпись добавления появляется и не исчезает и товар без перезагрузки страницы в корзину не добавляется.
Это по какой-то причине не срабатывает 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" - как-то так), то же самое с яваскриптами, затем ошибки исполнения и синтаксиса в яваскриптах... Хотя сайт вполне работает.
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#28 Den

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

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

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

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

 badisoft сказал:

Включите 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:

#29 badisoft

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

  • VIP
  • 5 006 сообщений
Репутация: 766
Мастер

Отправлено 17 мая 2015 - 14:15

 Den сказал:

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

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

#30 Den

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

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

Отправлено 17 мая 2015 - 14:35

 badisoft сказал:

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

#31 Salp

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

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

Отправлено 08 октября 2016 - 18:16

Немного изменил код для правильных редиректов, вместо:
# 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 нужно создать.

#32 badisoft

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

  • VIP
  • 5 006 сообщений
Репутация: 766
Мастер

Отправлено 08 октября 2016 - 21:14

Я сейчас вместо
$smarty->compile_dir =...
$smarty->cache_dir = ...

использую
$smarty->compile_id = $template;

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

#33 etdnepr

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

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

Отправлено 21 марта 2017 - 23:16

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

#34 badisoft

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

  • VIP
  • 5 006 сообщений
Репутация: 766
Мастер

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

 etdnepr сказал:

А не подскажете как сделать так, чтоб при заходе с мобильного открывался не другой шаблон, а сайт на поддомене?
Использовать редирект. Что-то типа
if (is_mobile()) Redirect('m.site.com');


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

#35 etdnepr

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

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

Отправлено 23 марта 2017 - 00:09

Спасибо,Дмитрий!
Из двух правок в 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
Не знаю насколько это правильно, но вроде работает)))