dead eye Опубликовано 11 июля, 2015 Жалоба Поделиться Опубликовано 11 июля, 2015 Собственно нужна помощь в решении (платная) следующей ситуации.1. Сайт www.petxp.ru (с исходным "говношаблоном" - но переделанным2. 2а месяца все работало нормально.3. Два дня назад - начала возникать ошибка 5004. Причина - автоматическая смена шаблона на "шаблон "domstore" - которого не было в папке.5. Технический - создание шаблона с таким названием - решаем проблему - но был случай смены шаблона на шаблон вообще без названия в логах - есть вот такие строки Line 74: [b.b][11/Jul/2015:00:04:11 +0300] 4.312 13.678 500 157.55.39.125 www.petxp.ru GET /brands/Royal_Canin/page_11/?page=11&sort=position&theme=DomStore HTTP/1.1 "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "-" 400 Кто может помочь разобраться с причиной и ее устранить. Или какие тут могут быть варианты Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 12 июля, 2015 Жалоба Поделиться Опубликовано 12 июля, 2015 ну это не автоматическая замена. кто-то делает запрос на смену шаблона через get параметр theme=DomStoreУ вас пользователи имеют возможность менять темы? Цитата Ссылка на сообщение Поделиться на другие сайты
dead eye Опубликовано 12 июля, 2015 Автор Жалоба Поделиться Опубликовано 12 июля, 2015 Вообще не должны. Но судя по всему надо править Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 12 июля, 2015 Жалоба Поделиться Опубликовано 12 июля, 2015 (изменено) Вообще не должны. Но судя по всему надо править прикрепите файл view/View.php, посмотрю Изменено 12 июля, 2015 пользователем mishanya Цитата Ссылка на сообщение Поделиться на другие сайты
Kosjak76 Опубликовано 12 июля, 2015 Жалоба Поделиться Опубликовано 12 июля, 2015 Я вчера смотрел файлы, следов смены шаблона не нашел.Мишаня, посмотри еще ты, может, найдешь ошибку Цитата Ссылка на сообщение Поделиться на другие сайты
Andrey Terkin Опубликовано 13 июля, 2015 Жалоба Поделиться Опубликовано 13 июля, 2015 А почему он должен меняться во View.php ?Логичнее его менять в Settings.php Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 13 июля, 2015 Жалоба Поделиться Опубликовано 13 июля, 2015 А почему он должен меняться во View.php ?Логичнее его менять в Settings.php поясните чем логичнее менять в апи настройках чем в вью контролере? даже если вы пропишите ф-ю в апи, ее всеровно нужно вызывать из контролера Цитата Ссылка на сообщение Поделиться на другие сайты
Andrey Terkin Опубликовано 13 июля, 2015 Жалоба Поделиться Опубликовано 13 июля, 2015 Ну наверное потому что обращаетесь вы к теме в как $this->settings->theme , соответственно и менять нужно ее там, что бы в дальнейшем не возникало недоразумений если кому то понадобится получить название темы из другого места Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 13 июля, 2015 Жалоба Поделиться Опубликовано 13 июля, 2015 Ну наверное потому что обращаетесь вы к теме в как $this->settings->theme , соответственно и менять нужно ее там, что бы в дальнейшем не возникало недоразумений если кому то понадобится получить название темы из другого места менять ее нужно там если тема одна для пользователей. не понятно каким образом сделано у ТС. если делать возможность смены тем для пользователей, менять ее в $this->settings->theme не очень хорошо будет Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 13 июля, 2015 Жалоба Поделиться Опубликовано 13 июля, 2015 менять ее нужно там если тема одна для пользователей. не понятно каким образом сделано у ТС. если делать возможность смены тем для пользователей, менять ее в $this->settings->theme не очень хорошо будет Менять тему для пользователей через Settings - не только "не очень хорошо", то даже "очень не хорошо" и принципиально невозможно. Но и менять просто так через view/View.php вряд ли выйдет.Вообще вопрос совсем не так прост, как кажется. Осуждался довольно долго в темеhttp://forum.simplacms.ru/topic/2368-%D1%81%D0%BC%D0%B5%D0%BD%D0%B0-%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D0%B0-%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%BC-%D0%B4%D0%BB%D1%8F-%D0%BC%D0%B0%D0%B3%D0%B0%D0%B7%D0%B8%D0%BD%D0%BE%D0%B2-%D1%88%D0%B0%D0%B1/Там даже Noxter больше года никак не мог понять, что предлагавшееся решение совсем неверное... Цитата Ссылка на сообщение Поделиться на другие сайты
Andrey Terkin Опубликовано 15 июля, 2015 Жалоба Поделиться Опубликовано 15 июля, 2015 (изменено) Менять тему для пользователей через Settings - не только "не очень хорошо", то даже "очень не хорошо" и принципиально невозможно. Но и менять просто так через view/View.php вряд ли выйдет.Вообще вопрос совсем не так прост, как кажется. Осуждался довольно долго в темеhttp://forum.simplacms.ru/topic/2368-%D1%81%D0%BC%D0%B5%D0%BD%D0%B0-%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D0%B0-%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%BC-%D0%B4%D0%BB%D1%8F-%D0%BC%D0%B0%D0%B3%D0%B0%D0%B7%D0%B8%D0%BD%D0%BE%D0%B2-%D1%88%D0%B0%D0%B1/Там даже Noxter больше года никак не мог понять, что предлагавшееся решение совсем неверное...А в чем для вас заключается невозможность? И почему , по вашему это очень не хорошо? В index.php ловим гет запрос и помещаем его в сессию if (isset($_GET['theme'])) $_SESSION['theme'] = $_GET['theme']; А в api/Settings.php в конструкторе подменяем значение темы в массиве if (isset($_SESSION['theme']) && file_exists($this->config->root_dir . '/design/' . $_SESSION['theme'])) $this->vars['theme'] = $_SESSION['theme']; Изменено 15 июля, 2015 пользователем Andrey Terkin Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 15 июля, 2015 Жалоба Поделиться Опубликовано 15 июля, 2015 (изменено) Вы правы, спасибо за замечание.Я хотел сказать, что принципиально невозможно это сделать через simpla/SettingsAdmin.php. Моя неточность и невнимательность..Решение Ваше - простое и удобное, в теме, указанной #10, к подобному большие специалисты шли более года, и то, что там в конце концов получили, все равно хуже Вашего, как следует до конца не отработано, длинное и заумное... А мнение, что это надо делать во view/View.php - это повторение старых ошибок той темы... Изменено 15 июля, 2015 пользователем Kors Цитата Ссылка на сообщение Поделиться на другие сайты
makki Опубликовано 20 сентября, 2016 Жалоба Поделиться Опубликовано 20 сентября, 2016 А в чем для вас заключается невозможность? И почему , по вашему это очень не хорошо? В index.php ловим гет запрос и помещаем его в сессию if (isset($_GET['theme'])) $_SESSION['theme'] = $_GET['theme']; А в api/Settings.php в конструкторе подменяем значение темы в массиве if (isset($_SESSION['theme']) && file_exists($this->config->root_dir . '/design/' . $_SESSION['theme'])) $this->vars['theme'] = $_SESSION['theme']; Все работает, но шаблон переключается не сразу, а только после следующего обновления страницы. Как сделать,чтобы шаблон переключался сразу? Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 21 сентября, 2016 Жалоба Поделиться Опубликовано 21 сентября, 2016 Все работает, но шаблон переключается не сразу, а только после следующего обновления страницы. Как сделать,чтобы шаблон переключался сразу?Работает нормально и изменение шаблона проявляется сразу. Скорее всего, Вы делаете что-то по-иному. Иногда такая ошибка возникает, когда работают с $_COOKIE и немного не учитывают специфику... Цитата Ссылка на сообщение Поделиться на другие сайты
makki Опубликовано 21 сентября, 2016 Жалоба Поделиться Опубликовано 21 сентября, 2016 Работает нормально и изменение шаблона проявляется сразу.Скорее всего, Вы делаете что-то по-иному.Иногда такая ошибка возникает, когда работают с $_COOKIE и немного не учитывают специфику...Да, это и было в моем случае. Я работал через куки, но для сохранения значения использовал только setcookie, чего оказалось недостаточно, а надо было еще сохранить их через $_COOKIE['.....'] = .... Цитата Ссылка на сообщение Поделиться на другие сайты
Andrey Terkin Опубликовано 21 сентября, 2016 Жалоба Поделиться Опубликовано 21 сентября, 2016 Да, это и было в моем случае. Я работал через куки, но для сохранения значения использовал только setcookie, чего оказалось недостаточно, а надо было еще сохранить их через $_COOKIE['.....'] = .... По правильному нужно делать редирект а не переписывать системный массив. Цитата Ссылка на сообщение Поделиться на другие сайты
makki Опубликовано 21 сентября, 2016 Жалоба Поделиться Опубликовано 21 сентября, 2016 По правильному нужно делать редирект а не переписывать системный массив. Каким образом редирект сменяет шаблон, объясните пожалуйста. Цитата Ссылка на сообщение Поделиться на другие сайты
Andrey Terkin Опубликовано 21 сентября, 2016 Жалоба Поделиться Опубликовано 21 сентября, 2016 Каким образом редирект сменяет шаблон, объясните пожалуйста.Редирект не шаблон меняет, менять его нужно так как сделали, а куки становятся доступны после обновления страницы.Когда вы пишете setcookie в браузер отправляется заголовок с куками, а возврашается этот заголовок только при следующей загрузке страницы, то есть после установки кук нужно делать редирект.Сделать это лучше после инициализации обьекта $view в index.php следующим образом if (isset($_GET['theme'])) { setcookie(ставите свою куку); // переадресовываем на текущий адрес без параметра theme header('Location:' . $view->request->url(array('theme'=>null))); exit; } Цитата Ссылка на сообщение Поделиться на другие сайты
Andrey Terkin Опубликовано 21 сентября, 2016 Жалоба Поделиться Опубликовано 21 сентября, 2016 Cookie станут видимыми только после перезагрузки страницы, для которойони должны быть видны. Для проверки, правильно ли cookie установились,проверьте их при следующей загрузке страницы до истечения срока ихдействия. Источник http://php.net/manual/ru/function.setcookie.php Цитата Ссылка на сообщение Поделиться на другие сайты
makki Опубликовано 21 сентября, 2016 Жалоба Поделиться Опубликовано 21 сентября, 2016 Спасибо за подсказку. У меня еще стоит задача сменить автоматически на шаблон при заходе с мобильных устройств. Функция определения устройства есть, но где будет ее правильно разместить? В index.php не хочется ее пихать Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 21 сентября, 2016 Жалоба Поделиться Опубликовано 21 сентября, 2016 Спасибо за подсказку. У меня еще стоит задача сменить автоматически на шаблон при заходе с мобильных устройств. Функция определения устройства есть, но где будет ее правильно разместить? В index.php не хочется ее пихать ф-я определения моб. устройств уже есть в симпла. смотрите файл api/Design.php is_mobile_browser() только нужно ее публичной сделать. чтобы вызывать в view или где нужно Цитата Ссылка на сообщение Поделиться на другие сайты
makki Опубликовано 21 сентября, 2016 Жалоба Поделиться Опубликовано 21 сентября, 2016 Источник http://php.net/manual/ru/function.setcookie.phpС куками все понятно. А что если использовать сессии?В этом коде надо добавлять редирект вот так? Без него у меня меняется шаблон только после перезагрузки страницы. В мануале $_SESSION ничего не нашел по этому поводу. if (isset($_GET['theme'])) { $_SESSION['theme'] = $_GET['theme']; header('Location:' . $view->request->url(array('theme'=>null))); exit; } Цитата Ссылка на сообщение Поделиться на другие сайты
Andrey Terkin Опубликовано 21 сентября, 2016 Жалоба Поделиться Опубликовано 21 сентября, 2016 (изменено) Для сессий редиректа не нужно, достаточно кода из этого сообщения http://forum.simplacms.ru/topic/10047-ошибка-500-автосмена-шаблона/?p=75867Но размешать его нужно до создания обьекта класса View , так как после этой строки класс Settings уже создает массив с настройками и тема берется из негоНо при помощи редиректа можно убрать гет переменную темы из адресной строки Изменено 21 сентября, 2016 пользователем Andrey Terkin Цитата Ссылка на сообщение Поделиться на другие сайты
Andrey Terkin Опубликовано 21 сентября, 2016 Жалоба Поделиться Опубликовано 21 сентября, 2016 (изменено) Для перключения мобильный/стандартный шаблон я делал так.В классе Settings я добавил новый метод is_mobile , так как тот который есть в классе Design по умолчанию уже устарел и много устройств не определяет, а так же этот класс инициализируется после Settings.Мой новый метод выглядел так public function is_mobile() { $useragent=$_SERVER['HTTP_USER_AGENT']; if(preg_match('/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i',$useragent)||preg_match('/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i',substr($useragent,0,4))) return true; } Так же добавил в этот класс два поля private $mobile_theme = 'name_mobile_theme'; private $desktop_theme = 'name_standart_theme'; И в конструкторе этого класса в конце подменял переменную с шаблоном if (isset($_SESSION['template']) && $_SESSION['template'] == 'mobile') $this->vars['theme'] = $this->mobile_theme; elseif (empty($_SESSION['template']) && $this->is_mobile()) $this->vars['theme'] = $this->mobile_theme; else $this->vars['theme'] = $this->desktop_theme; А в index.php сделал следуюшим образом $view = new IndexView(); if (isset($_GET['template'])) { $_SESSION['template'] = $_GET['template'] == 'mobile' ? 'mobile' : 'desktop'; header('Location:' . $view->request->url(array('template'=>null))); exit; } И таким образом получается, что если пользователь первый раз заходит на сайт, то проверяется зашел он с моб устройства или нет, в зависимости от этого выбирается нужная тема и записывается в сессию, так же на страницах есть ссылка для перехода мобильная/стандартная версии сайта. Также при таком методе нужно прописать еще мета теги, для того что бы поисковики корректно обрабатывали обе версии сайта. Какие именно метатеги посмотрите в гугле Не метатеги а я отправляю заголовок тоже в index.php после заголовка Content-typeСтатья на гугле с описаниемhttps://developers.google.com/webmasters/mobile-sites/mobile-seo/dynamic-serving header('Vary: Accept-Encoding, User-Agent'); Изменено 22 сентября, 2016 пользователем Andrey Terkin Цитата Ссылка на сообщение Поделиться на другие сайты
Andrey Terkin Опубликовано 21 сентября, 2016 Жалоба Поделиться Опубликовано 21 сентября, 2016 PS. Модераторам: Думаю эту тему можно перенести в готовые решения Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.