Сообщение #23 siteapp » 28.04.2017, 14:39
makki писал(а):Все правки упомянутые в этой ветке, внесены в первый пост. Если делали все по инструкции, и не работает, значит гдето допустили ошибку или у вас есть уже правки которые влияют на работу дополнения.
Нету дорполнений, вот
Settings.phpКод: Выделить всё
<?php
/**
* Управление настройками магазина, хранящимися в базе данных
* В отличие от класса Config оперирует настройками доступными админу и хранящимися в базе данных.
*/
require_once('Okay.php');
class Settings extends Okay {
private $vars = array();
private $mobile_theme = 'okay_shop';
private $desktop_theme = 'avtogalant';
function __construct() {
parent::__construct();
// Выбираем из базы настройки
$this->db->query('SELECT name, value FROM __settings');
// и записываем их в переменную
foreach($this->db->results() as $result) {
if(!($this->vars[$result->name] = @unserialize($result->value))) {
$this->vars[$result->name] = $result->value;
}
}
if (isset($_GET['ver'])) {
setcookie ("theme", $_GET['ver'], time()+3600, "/");
$_COOKIE['theme']=$_GET['ver'];
}
if (!isset($_COOKIE['theme'])) {
setcookie ("theme", $this->is_mobile(), time()+3600, "/");
$_COOKIE['theme']=$_GET['theme'];
}
if (isset($_COOKIE['theme']) && $_COOKIE['theme'] != 'pc') {
$this->vars['theme'] = $_COOKIE['theme'];
}
}
public function __get($name) {
if($res = parent::__get($name)) {
return $res;
}
if(isset($this->vars[$name])) {
return $this->vars[$name];
} else {
return null;
}
}
public function __set($name, $value) {
$this->vars[$name] = $value;
if(is_array($value)) {
$value = serialize($value);
} else {
$value = (string) $value;
}
$this->db->query('SELECT count(*) as count FROM __settings WHERE name=?', $name);
if($this->db->result('count')>0) {
$this->db->query('UPDATE __settings SET value=? WHERE name=?', $value, $name);
} else {
$this->db->query('INSERT INTO __settings SET value=?, name=?', $value, $name);
}
}
private function is_mobile() {
$user_agent=strtolower(getenv('HTTP_USER_AGENT'));
$accept=strtolower(getenv('HTTP_ACCEPT'));
if ((strpos($accept,'text/vnd.wap.wml')!==false) ||
(strpos($accept,'application/vnd.wap.xhtml+xml')!==false)) {
return "mobile"; // Мобильный браузер обнаружен по HTTP-заголовкам
}
if (isset($_SERVER['HTTP_X_WAP_PROFILE']) ||
isset($_SERVER['HTTP_PROFILE'])) {
return "mobile"; // Мобильный браузер обнаружен по установкам сервера
}
if (preg_match('/(mini 9.5|vx1000|lge |m800|e860|u940|ux840|compal|'.
'wireless| mobi|ahong|lg380|lgku|lgu900|lg210|lg47|lg920|lg840|'.
'lg370|sam-r|mg50|s55|g83|t66|vx400|mk99|d615|d763|el370|sl900|'.
'mp500|samu3|samu4|vx10|xda_|samu5|samu6|samu7|samu9|a615|b832|'.
'm881|s920|n210|s700|c-810|_h797|mob-x|sk16d|848b|mowser|s580|'.
'r800|471x|v120|rim8|c500foma:|160x|x160|480x|x640|t503|w839|'.
'i250|sprint|w398samr810|m5252|c7100|mt126|x225|s5330|s820|'.
'htil-g1|fly v71|s302|-x113|novarra|k610i|-three|8325rc|8352rc|'.
'sanyo|vx54|c888|nx250|n120|mtk |c5588|s710|t880|c5005|i;458x|'.
'p404i|s210|c5100|teleca|s940|c500|s590|foma|samsu|vx8|vx9|a1000|'.
'_mms|myx|a700|gu1100|bc831|e300|ems100|me701|me702m-three|sd588|'.
's800|8325rc|ac831|mw200|brew |d88|htc\/|htc_touch|355x|m50|km100|'.
'd736|p-9521|telco|sl74|ktouch|m4u\/|me702|8325rc|kddi|phone|lg |'.
'sonyericsson|samsung|240x|x320vx10|nokia|sony cmd|motorola|'.
'up.browser|up.link|mmp|symbian|smartphone|midp|wap|vodafone|o2|'.
'pocket|kindle|mobile|psp|treo|android|iphone|ipod|webos|wp7|wp8|'.
'fennec|blackberry|htc_|opera m|windowsphone)/', $user_agent)) {
return "mobile"; // Мобильный браузер обнаружен по сигнатуре User Agent
}
if (in_array(substr($user_agent,0,4),
Array("1207", "3gso", "4thp", "501i", "502i", "503i", "504i", "505i", "506i",
"6310", "6590", "770s", "802s", "a wa", "abac", "acer", "acoo", "acs-",
"aiko", "airn", "alav", "alca", "alco", "amoi", "anex", "anny", "anyw",
"aptu", "arch", "argo", "aste", "asus", "attw", "au-m", "audi", "aur ",
"aus ", "avan", "beck", "bell", "benq", "bilb", "bird", "blac", "blaz",
"brew", "brvw", "bumb", "bw-n", "bw-u", "c55/", "capi", "ccwa", "cdm-",
"cell", "chtm", "cldc", "cmd-", "cond", "craw", "dait", "dall", "dang",
"dbte", "dc-s", "devi", "dica", "dmob", "doco", "dopo", "ds-d", "ds12",
"el49", "elai", "eml2", "emul", "eric", "erk0", "esl8", "ez40", "ez60",
"ez70", "ezos", "ezwa", "ezze", "fake", "fetc", "fly-", "fly_", "g-mo",
"g1 u", "g560", "gene", "gf-5", "go.w", "good", "grad", "grun", "haie",
"hcit", "hd-m", "hd-p", "hd-t", "hei-", "hiba", "hipt", "hita", "hp i",
"hpip", "hs-c", "htc ", "htc-", "htc_", "htca", "htcg", "htcp", "htcs",
"htct", "http", "huaw", "hutc", "i-20", "i-go", "i-ma", "i230", "iac",
"iac-", "iac/", "ibro", "idea", "ig01", "ikom", "im1k", "inno", "ipaq",
"iris", "jata", "java", "jbro", "jemu", "jigs", "kddi", "keji", "kgt",
"kgt/", "klon", "kpt ", "kwc-", "kyoc", "kyok", "leno", "lexi", "lg g",
"lg-a", "lg-b", "lg-c", "lg-d", "lg-f", "lg-g", "lg-k", "lg-l", "lg-m",
"lg-o", "lg-p", "lg-s", "lg-t", "lg-u", "lg-w", "lg/k", "lg/l", "lg/u",
"lg50", "lg54", "lge-", "lge/", "libw", "lynx", "m-cr", "m1-w", "m3ga",
"m50/", "mate", "maui", "maxo", "mc01", "mc21", "mcca", "medi", "merc",
"meri", "midp", "mio8", "mioa", "mits", "mmef", "mo01", "mo02", "mobi",
"mode", "modo", "mot ", "mot-", "moto", "motv", "mozz", "mt50", "mtp1",
"mtv ", "mwbp", "mywa", "n100", "n101", "n102", "n202", "n203", "n300",
"n302", "n500", "n502", "n505", "n700", "n701", "n710", "nec-", "nem-",
"neon", "netf", "newg", "newt", "nok6", "noki", "nzph", "o2 x", "o2-x",
"o2im", "opti", "opwv", "oran", "owg1", "p800", "palm", "pana", "pand",
"pant", "pdxg", "pg-1", "pg-2", "pg-3", "pg-6", "pg-8", "pg-c", "pg13",
"phil", "pire", "play", "pluc", "pn-2", "pock", "port", "pose", "prox",
"psio", "pt-g", "qa-a", "qc-2", "qc-3", "qc-5", "qc-7", "qc07", "qc12",
"qc21", "qc32", "qc60", "qci-", "qtek", "qwap", "r380", "r600", "raks",
"rim9", "rove", "rozo", "s55/", "sage", "sama", "samm", "sams", "sany",
"sava", "sc01", "sch-", "scoo", "scp-", "sdk/", "se47", "sec-", "sec0",
"sec1", "semc", "send", "seri", "sgh-", "shar", "sie-", "siem", "sk-0",
"sl45", "slid", "smal", "smar", "smb3", "smit", "smt5", "soft", "sony",
"sp01", "sph-", "spv ", "spv-", "sy01", "symb", "t-mo", "t218", "t250",
"t600", "t610", "t618", "tagt", "talk", "tcl-", "tdg-", "teli", "telm",
"tim-", "topl", "tosh", "treo", "ts70", "tsm-", "tsm3", "tsm5", "tx-9",
"up.b", "upg1", "upsi", "utst", "v400", "v750", "veri", "virg", "vite",
"vk-v", "vk40", "vk50", "vk52", "vk53", "vm40", "voda", "vulc", "vx52",
"vx53", "vx60", "vx61", "vx70", "vx80", "vx81", "vx83", "vx85", "vx98",
"w3c ", "w3c-", "wap-", "wapa", "wapi", "wapj", "wapm", "wapp", "wapr",
"waps", "wapt", "wapu", "wapv", "wapy", "webc", "whit", "wig ", "winc",
"winw", "wmlb", "wonu", "x700", "xda-", "xda2", "xdag", "yas-", "your",
"zeto", "zte-"))) {
return "mobile"; // Мобильный браузер обнаружен по сигнатуре User Agent
}
return "pc"; // Мобильный браузер не обнаружен
}
}
index.phpКод: Выделить всё
<?php
$time_start = microtime(true);
if(!empty($_SERVER['HTTP_USER_AGENT'])){
session_name(md5($_SERVER['HTTP_USER_AGENT']));
}
session_start();
require_once('view/IndexView.php');
$view = new IndexView();
if (isset($_GET['v'])) {
$_SESSION['site_version'] = $_GET['v'] == 'mobile' ? 'mobile' : 'desktop';
header('Location:' . $view->request->url(array('v'=>null)));
exit;
}
if(isset($_GET['logout'])) {
unset($_SESSION['admin']);
header('location: '.$view->config->root_url);
exit();
}
if(($res = $view->fetch()) !== false) {
header("Content-type: text/html; charset=UTF-8");
header("Vary: Accept-Encoding, User-Agent");
print $res;
// Сохраняем последнюю просмотренную страницу в переменной $_SESSION['last_visited_page']
if (empty($_SESSION['last_visited_page']) || empty($_SESSION['current_page']) || $_SERVER['REQUEST_URI'] !== $_SESSION['current_page']) {
if(!empty($_SESSION['current_page']) && $_SESSION['last_visited_page'] !== $_SESSION['current_page']) {
$_SESSION['last_visited_page'] = $_SESSION['current_page'];
}
$_SESSION['current_page'] = $_SERVER['REQUEST_URI'];
}
} else {
// Иначе страница об ошибке
header("http/1.0 404 not found");
// Подменим переменную GET, чтобы вывести страницу 404
$_GET['page_url'] = '404';
$_GET['module'] = 'PageView';
print $view->fetch();
}
// Отладочная информация
if(1) {
print "<!--\r\n";
$time_end = microtime(true);
$exec_time = $time_end-$time_start;
if(function_exists('memory_get_peak_usage')) {
print "memory peak usage: ".memory_get_peak_usage()." bytes\r\n";
}
print "page generation time: ".$exec_time." seconds\r\n";
print "-->";
}
И вопрос в
Setting.tplЕсли вставить
Код: Выделить всё
if (isset($_SESSION['site_version'])) {
if ($_SESSION['site_version'] == 'mobile') {
$this->vars['theme'] = $this->mobile_theme;
} else {
$this->vars['theme'] = $this->desktop_theme;
}
} elseif (empty($_SESSION['site_version'])) {
require_once 'classes/Mobile_Detect.php';
$detect = new Mobile_Detect;
if ($detect->isMobile()) {
$this->vars['theme'] = $this->mobile_theme;
} else {
$this->vars['theme'] = $this->desktop_theme;
}
}
То ошибка:
Код: Выделить всё
Fatal error: Cannot redeclare class Mobile_Detect in /home/site/public_html/site.ru/classes/Mobile_Detect.php on line 29
[quote="makki"]Все правки упомянутые в этой ветке, внесены в первый пост. Если делали все по инструкции, и не работает, значит гдето допустили ошибку или у вас есть уже правки которые влияют на работу дополнения.[/quote]
Нету дорполнений, вот [b]Settings.php[/b]
[code]<?php
/**
* Управление настройками магазина, хранящимися в базе данных
* В отличие от класса Config оперирует настройками доступными админу и хранящимися в базе данных.
*/
require_once('Okay.php');
class Settings extends Okay {
private $vars = array();
private $mobile_theme = 'okay_shop';
private $desktop_theme = 'avtogalant';
function __construct() {
parent::__construct();
// Выбираем из базы настройки
$this->db->query('SELECT name, value FROM __settings');
// и записываем их в переменную
foreach($this->db->results() as $result) {
if(!($this->vars[$result->name] = @unserialize($result->value))) {
$this->vars[$result->name] = $result->value;
}
}
if (isset($_GET['ver'])) {
setcookie ("theme", $_GET['ver'], time()+3600, "/");
$_COOKIE['theme']=$_GET['ver'];
}
if (!isset($_COOKIE['theme'])) {
setcookie ("theme", $this->is_mobile(), time()+3600, "/");
$_COOKIE['theme']=$_GET['theme'];
}
if (isset($_COOKIE['theme']) && $_COOKIE['theme'] != 'pc') {
$this->vars['theme'] = $_COOKIE['theme'];
}
}
public function __get($name) {
if($res = parent::__get($name)) {
return $res;
}
if(isset($this->vars[$name])) {
return $this->vars[$name];
} else {
return null;
}
}
public function __set($name, $value) {
$this->vars[$name] = $value;
if(is_array($value)) {
$value = serialize($value);
} else {
$value = (string) $value;
}
$this->db->query('SELECT count(*) as count FROM __settings WHERE name=?', $name);
if($this->db->result('count')>0) {
$this->db->query('UPDATE __settings SET value=? WHERE name=?', $value, $name);
} else {
$this->db->query('INSERT INTO __settings SET value=?, name=?', $value, $name);
}
}
private function is_mobile() {
$user_agent=strtolower(getenv('HTTP_USER_AGENT'));
$accept=strtolower(getenv('HTTP_ACCEPT'));
if ((strpos($accept,'text/vnd.wap.wml')!==false) ||
(strpos($accept,'application/vnd.wap.xhtml+xml')!==false)) {
return "mobile"; // Мобильный браузер обнаружен по HTTP-заголовкам
}
if (isset($_SERVER['HTTP_X_WAP_PROFILE']) ||
isset($_SERVER['HTTP_PROFILE'])) {
return "mobile"; // Мобильный браузер обнаружен по установкам сервера
}
if (preg_match('/(mini 9.5|vx1000|lge |m800|e860|u940|ux840|compal|'.
'wireless| mobi|ahong|lg380|lgku|lgu900|lg210|lg47|lg920|lg840|'.
'lg370|sam-r|mg50|s55|g83|t66|vx400|mk99|d615|d763|el370|sl900|'.
'mp500|samu3|samu4|vx10|xda_|samu5|samu6|samu7|samu9|a615|b832|'.
'm881|s920|n210|s700|c-810|_h797|mob-x|sk16d|848b|mowser|s580|'.
'r800|471x|v120|rim8|c500foma:|160x|x160|480x|x640|t503|w839|'.
'i250|sprint|w398samr810|m5252|c7100|mt126|x225|s5330|s820|'.
'htil-g1|fly v71|s302|-x113|novarra|k610i|-three|8325rc|8352rc|'.
'sanyo|vx54|c888|nx250|n120|mtk |c5588|s710|t880|c5005|i;458x|'.
'p404i|s210|c5100|teleca|s940|c500|s590|foma|samsu|vx8|vx9|a1000|'.
'_mms|myx|a700|gu1100|bc831|e300|ems100|me701|me702m-three|sd588|'.
's800|8325rc|ac831|mw200|brew |d88|htc\/|htc_touch|355x|m50|km100|'.
'd736|p-9521|telco|sl74|ktouch|m4u\/|me702|8325rc|kddi|phone|lg |'.
'sonyericsson|samsung|240x|x320vx10|nokia|sony cmd|motorola|'.
'up.browser|up.link|mmp|symbian|smartphone|midp|wap|vodafone|o2|'.
'pocket|kindle|mobile|psp|treo|android|iphone|ipod|webos|wp7|wp8|'.
'fennec|blackberry|htc_|opera m|windowsphone)/', $user_agent)) {
return "mobile"; // Мобильный браузер обнаружен по сигнатуре User Agent
}
if (in_array(substr($user_agent,0,4),
Array("1207", "3gso", "4thp", "501i", "502i", "503i", "504i", "505i", "506i",
"6310", "6590", "770s", "802s", "a wa", "abac", "acer", "acoo", "acs-",
"aiko", "airn", "alav", "alca", "alco", "amoi", "anex", "anny", "anyw",
"aptu", "arch", "argo", "aste", "asus", "attw", "au-m", "audi", "aur ",
"aus ", "avan", "beck", "bell", "benq", "bilb", "bird", "blac", "blaz",
"brew", "brvw", "bumb", "bw-n", "bw-u", "c55/", "capi", "ccwa", "cdm-",
"cell", "chtm", "cldc", "cmd-", "cond", "craw", "dait", "dall", "dang",
"dbte", "dc-s", "devi", "dica", "dmob", "doco", "dopo", "ds-d", "ds12",
"el49", "elai", "eml2", "emul", "eric", "erk0", "esl8", "ez40", "ez60",
"ez70", "ezos", "ezwa", "ezze", "fake", "fetc", "fly-", "fly_", "g-mo",
"g1 u", "g560", "gene", "gf-5", "go.w", "good", "grad", "grun", "haie",
"hcit", "hd-m", "hd-p", "hd-t", "hei-", "hiba", "hipt", "hita", "hp i",
"hpip", "hs-c", "htc ", "htc-", "htc_", "htca", "htcg", "htcp", "htcs",
"htct", "http", "huaw", "hutc", "i-20", "i-go", "i-ma", "i230", "iac",
"iac-", "iac/", "ibro", "idea", "ig01", "ikom", "im1k", "inno", "ipaq",
"iris", "jata", "java", "jbro", "jemu", "jigs", "kddi", "keji", "kgt",
"kgt/", "klon", "kpt ", "kwc-", "kyoc", "kyok", "leno", "lexi", "lg g",
"lg-a", "lg-b", "lg-c", "lg-d", "lg-f", "lg-g", "lg-k", "lg-l", "lg-m",
"lg-o", "lg-p", "lg-s", "lg-t", "lg-u", "lg-w", "lg/k", "lg/l", "lg/u",
"lg50", "lg54", "lge-", "lge/", "libw", "lynx", "m-cr", "m1-w", "m3ga",
"m50/", "mate", "maui", "maxo", "mc01", "mc21", "mcca", "medi", "merc",
"meri", "midp", "mio8", "mioa", "mits", "mmef", "mo01", "mo02", "mobi",
"mode", "modo", "mot ", "mot-", "moto", "motv", "mozz", "mt50", "mtp1",
"mtv ", "mwbp", "mywa", "n100", "n101", "n102", "n202", "n203", "n300",
"n302", "n500", "n502", "n505", "n700", "n701", "n710", "nec-", "nem-",
"neon", "netf", "newg", "newt", "nok6", "noki", "nzph", "o2 x", "o2-x",
"o2im", "opti", "opwv", "oran", "owg1", "p800", "palm", "pana", "pand",
"pant", "pdxg", "pg-1", "pg-2", "pg-3", "pg-6", "pg-8", "pg-c", "pg13",
"phil", "pire", "play", "pluc", "pn-2", "pock", "port", "pose", "prox",
"psio", "pt-g", "qa-a", "qc-2", "qc-3", "qc-5", "qc-7", "qc07", "qc12",
"qc21", "qc32", "qc60", "qci-", "qtek", "qwap", "r380", "r600", "raks",
"rim9", "rove", "rozo", "s55/", "sage", "sama", "samm", "sams", "sany",
"sava", "sc01", "sch-", "scoo", "scp-", "sdk/", "se47", "sec-", "sec0",
"sec1", "semc", "send", "seri", "sgh-", "shar", "sie-", "siem", "sk-0",
"sl45", "slid", "smal", "smar", "smb3", "smit", "smt5", "soft", "sony",
"sp01", "sph-", "spv ", "spv-", "sy01", "symb", "t-mo", "t218", "t250",
"t600", "t610", "t618", "tagt", "talk", "tcl-", "tdg-", "teli", "telm",
"tim-", "topl", "tosh", "treo", "ts70", "tsm-", "tsm3", "tsm5", "tx-9",
"up.b", "upg1", "upsi", "utst", "v400", "v750", "veri", "virg", "vite",
"vk-v", "vk40", "vk50", "vk52", "vk53", "vm40", "voda", "vulc", "vx52",
"vx53", "vx60", "vx61", "vx70", "vx80", "vx81", "vx83", "vx85", "vx98",
"w3c ", "w3c-", "wap-", "wapa", "wapi", "wapj", "wapm", "wapp", "wapr",
"waps", "wapt", "wapu", "wapv", "wapy", "webc", "whit", "wig ", "winc",
"winw", "wmlb", "wonu", "x700", "xda-", "xda2", "xdag", "yas-", "your",
"zeto", "zte-"))) {
return "mobile"; // Мобильный браузер обнаружен по сигнатуре User Agent
}
return "pc"; // Мобильный браузер не обнаружен
}
}
[/code]
[b]index.php[/b]
[code]<?php
$time_start = microtime(true);
if(!empty($_SERVER['HTTP_USER_AGENT'])){
session_name(md5($_SERVER['HTTP_USER_AGENT']));
}
session_start();
require_once('view/IndexView.php');
$view = new IndexView();
if (isset($_GET['v'])) {
$_SESSION['site_version'] = $_GET['v'] == 'mobile' ? 'mobile' : 'desktop';
header('Location:' . $view->request->url(array('v'=>null)));
exit;
}
if(isset($_GET['logout'])) {
unset($_SESSION['admin']);
header('location: '.$view->config->root_url);
exit();
}
if(($res = $view->fetch()) !== false) {
header("Content-type: text/html; charset=UTF-8");
header("Vary: Accept-Encoding, User-Agent");
print $res;
// Сохраняем последнюю просмотренную страницу в переменной $_SESSION['last_visited_page']
if (empty($_SESSION['last_visited_page']) || empty($_SESSION['current_page']) || $_SERVER['REQUEST_URI'] !== $_SESSION['current_page']) {
if(!empty($_SESSION['current_page']) && $_SESSION['last_visited_page'] !== $_SESSION['current_page']) {
$_SESSION['last_visited_page'] = $_SESSION['current_page'];
}
$_SESSION['current_page'] = $_SERVER['REQUEST_URI'];
}
} else {
// Иначе страница об ошибке
header("http/1.0 404 not found");
// Подменим переменную GET, чтобы вывести страницу 404
$_GET['page_url'] = '404';
$_GET['module'] = 'PageView';
print $view->fetch();
}
// Отладочная информация
if(1) {
print "<!--\r\n";
$time_end = microtime(true);
$exec_time = $time_end-$time_start;
if(function_exists('memory_get_peak_usage')) {
print "memory peak usage: ".memory_get_peak_usage()." bytes\r\n";
}
print "page generation time: ".$exec_time." seconds\r\n";
print "-->";
}
[/code]
И вопрос в [b]Setting.tpl[/b]
Если вставить
[code] if (isset($_SESSION['site_version'])) {
if ($_SESSION['site_version'] == 'mobile') {
$this->vars['theme'] = $this->mobile_theme;
} else {
$this->vars['theme'] = $this->desktop_theme;
}
} elseif (empty($_SESSION['site_version'])) {
require_once 'classes/Mobile_Detect.php';
$detect = new Mobile_Detect;
if ($detect->isMobile()) {
$this->vars['theme'] = $this->mobile_theme;
} else {
$this->vars['theme'] = $this->desktop_theme;
}
}[/code]
То ошибка:
[code]Fatal error: Cannot redeclare class Mobile_Detect in /home/site/public_html/site.ru/classes/Mobile_Detect.php on line 29[/code]
:eh: