MaLeN Опубликовано 4 декабря, 2017 Жалоба Поделиться Опубликовано 4 декабря, 2017 Добрый день, делаю переключение шаблонов пользовательская.Бралось но чего то пропало, вот тут Сделал всё как там написано, всё работает. Но выдаёт ошибки PHP Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /home/XXX/public_html/XXX.by/index.php:1) in /home/XXX/public_html/XXX.by/index.php on line 16 PHP Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /home/XXX/public_html/XXX.by/index.php:1) in /home/XXX/public_html/XXX.by/index.php on line 16 [04-Dec-2017 15:47:45 UTC] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/XXX/public_html/XXX.by/index.php:1) in /home/XXX/public_html/XXX.by/view/View.php on line 66 [04-Dec-2017 15:47:45 UTC] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/XXX/public_html/XXX.by/index.php:1) in /home/XXX/public_html/XXX.by/api/Design.php on line 89 api/Design.php <?php /** * Simpla CMS * * @copyright 2011 Denis Pikusov * @link http://simplacms.ru * @author Denis Pikusov * */ require_once(dirname(__FILE__).'/'.'Simpla.php'); require_once(dirname(dirname(__FILE__)).'/Smarty/libs/Smarty.class.php'); class Design extends Simpla { public $smarty; public function __construct() { parent::__construct(); // Создаем и настраиваем Смарти $this->smarty = new Smarty(); $this->smarty->compile_check = $this->config->smarty_compile_check; $this->smarty->caching = $this->config->smarty_caching; $this->smarty->cache_lifetime = $this->config->smarty_cache_lifetime; $this->smarty->debugging = $this->config->smarty_debugging; $this->smarty->error_reporting = E_ALL & ~E_NOTICE; // Берем тему из настроек $theme = $this->get_theme(); $this->smarty->compile_dir = $this->config->root_dir.'/compiled/'.$theme; $this->smarty->template_dir = $this->config->root_dir.'/design/'.$theme.'/html'; // Создаем папку для скомпилированных шаблонов текущей темы if(!is_dir($this->smarty->compile_dir)) mkdir($this->smarty->compile_dir, 0777); $this->smarty->cache_dir = 'cache'; $this->smarty->registerPlugin('modifier', 'resize', array($this, 'resize_modifier')); $this->smarty->registerPlugin('modifier', 'token', array($this, 'token_modifier')); $this->smarty->registerPlugin('modifier', 'plural', array($this, 'plural_modifier')); $this->smarty->registerPlugin('function', 'url', array($this, 'url_modifier')); $this->smarty->registerPlugin('modifier', 'first', array($this, 'first_modifier')); $this->smarty->registerPlugin('modifier', 'cut', array($this, 'cut_modifier')); $this->smarty->registerPlugin('modifier', 'date', array($this, 'date_modifier')); $this->smarty->registerPlugin('modifier', 'time', array($this, 'time_modifier')); if($this->config->smarty_html_minify) $this->smarty->loadFilter('output', 'trimwhitespace'); } public function assign($var, $value) { return $this->smarty->assign($var, $value); } public function fetch($template) { // Передаем в дизайн то, что может понадобиться в нем $this->design->assign('config', $this->config); $settings = $this->settings; $settings->theme = $this->get_theme(); $this->design->assign('settings', $settings); return $this->smarty->fetch($template); } public function set_templates_dir($dir) { $this->smarty->template_dir = $dir; } public function set_compiled_dir($dir) { $this->smarty->compile_dir = $dir; } public function get_var($name) { return $this->smarty->getTemplateVars($name); } public function set_theme($theme) { if(is_dir($this->config->root_dir.'/design/'.$theme.'/html')) { setcookie('theme', $theme, time()+60*60*24*30, "/"); return $theme; } else return false; } public function get_theme() { if(!isset($_COOKIE['theme']) || !is_dir($this->config->root_dir.'/design/'.$_COOKIE['theme'].'/html')) $theme = $this->set_theme($this->settings->theme); else $theme = $_COOKIE['theme']; return $theme; } public function get_themes() { if($handle = opendir('design/')) { while(false !== ($file = readdir($handle))) { if(is_dir('design/'.$file) && $file[0] != '.') { unset($theme); $theme->name = $file; $themes[] = $theme; } } closedir($handle); sort($themes); } return $themes; } private function is_mobile_browser() { $user_agent = $_SERVER['HTTP_USER_AGENT']; $http_accept = isset($_SERVER['HTTP_ACCEPT'])?$_SERVER['HTTP_ACCEPT']:''; if(eregi('iPad', $user_agent)) return false; if(stristr($user_agent, 'windows') && !stristr($user_agent, 'windows ce')) return false; if(eregi('windows ce|iemobile|mobile|symbian|mini|wap|pda|psp|up.browser|up.link|mmp|midp|phone|pocket', $user_agent)) return true; if(stristr($http_accept, 'text/vnd.wap.wml') || stristr($http_accept, 'application/vnd.wap.xhtml+xml')) return true; if(!empty($_SERVER['HTTP_X_WAP_PROFILE']) || !empty($_SERVER['HTTP_PROFILE']) || !empty($_SERVER['X-OperaMini-Features']) || !empty($_SERVER['UA-pixels'])) return true; $agents = array( 'acs-'=>'acs-', 'alav'=>'alav', 'alca'=>'alca', 'amoi'=>'amoi', 'audi'=>'audi', 'aste'=>'aste', 'avan'=>'avan', 'benq'=>'benq', 'bird'=>'bird', 'blac'=>'blac', 'blaz'=>'blaz', 'brew'=>'brew', 'cell'=>'cell', 'cldc'=>'cldc', 'cmd-'=>'cmd-', 'dang'=>'dang', 'doco'=>'doco', 'eric'=>'eric', 'hipt'=>'hipt', 'inno'=>'inno', 'ipaq'=>'ipaq', 'java'=>'java', 'jigs'=>'jigs', 'kddi'=>'kddi', 'keji'=>'keji', 'leno'=>'leno', 'lg-c'=>'lg-c', 'lg-d'=>'lg-d', 'lg-g'=>'lg-g', 'lge-'=>'lge-', 'maui'=>'maui', 'maxo'=>'maxo', 'midp'=>'midp', 'mits'=>'mits', 'mmef'=>'mmef', 'mobi'=>'mobi', 'mot-'=>'mot-', 'moto'=>'moto', 'mwbp'=>'mwbp', 'nec-'=>'nec-', 'newt'=>'newt', 'noki'=>'noki', 'opwv'=>'opwv', 'palm'=>'palm', 'pana'=>'pana', 'pant'=>'pant', 'pdxg'=>'pdxg', 'phil'=>'phil', 'play'=>'play', 'pluc'=>'pluc', 'port'=>'port', 'prox'=>'prox', 'qtek'=>'qtek', 'qwap'=>'qwap', 'sage'=>'sage', 'sams'=>'sams', 'sany'=>'sany', 'sch-'=>'sch-', 'sec-'=>'sec-', 'send'=>'send', 'seri'=>'seri', 'sgh-'=>'sgh-', 'shar'=>'shar', 'sie-'=>'sie-', 'siem'=>'siem', 'smal'=>'smal', 'smar'=>'smar', 'sony'=>'sony', 'sph-'=>'sph-', 'symb'=>'symb', 't-mo'=>'t-mo', 'teli'=>'teli', 'tim-'=>'tim-', 'tosh'=>'tosh', 'treo'=>'treo', 'tsm-'=>'tsm-', 'upg1'=>'upg1', 'upsi'=>'upsi', 'vk-v'=>'vk-v', 'voda'=>'voda', 'wap-'=>'wap-', 'wapa'=>'wapa', 'wapi'=>'wapi', 'wapp'=>'wapp', 'wapr'=>'wapr', 'webc'=>'webc', 'winw'=>'winw', 'winw'=>'winw', 'xda-'=>'xda-' ); if(!empty($agents[substr($_SERVER['HTTP_USER_AGENT'], 0, 4)])) return true; } public function resize_modifier($filename, $width=0, $height=0, $set_watermark=false) { $resized_filename = $this->image->add_resize_params($filename, $width, $height, $set_watermark); $resized_filename_encoded = $resized_filename; if(substr($resized_filename_encoded, 0, 7) == 'http://') $resized_filename_encoded = rawurlencode($resized_filename_encoded); $resized_filename_encoded = rawurlencode($resized_filename_encoded); return $this->config->root_url.'/'.$this->config->resized_images_dir.$resized_filename_encoded.'?'.$this->config->token($resized_filename); } public function token_modifier($text) { return $this->config->token($text); } public function url_modifier($params) { if(is_array(reset($params))) return $this->request->url(reset($params)); else return $this->request->url($params); } public function plural_modifier($number, $singular, $plural1, $plural2=null) { $number = abs($number); if(!empty($plural2)) { $p1 = $number%10; $p2 = $number%100; if($number == 0) return $plural1; if($p1==1 && !($p2>=11 && $p2<=19)) return $singular; elseif($p1>=2 && $p1<=4 && !($p2>=11 && $p2<=19)) return $plural2; else return $plural1; }else { if($number == 1) return $singular; else return $plural1; } } public function first_modifier($params = array()) { if(!is_array($params)) return false; return reset($params); } public function cut_modifier($array, $num=1) { if($num>=0) return array_slice($array, $num, count($array)-$num, true); else return array_slice($array, 0, count($array)+$num, true); } public function date_modifier($date, $format = null) { if(empty($date)) $date = date("Y-m-d"); return date(empty($format)?$this->settings->date_format:$format, strtotime($date)); } public function time_modifier($date, $format = null) { return date(empty($format)?'H:i':$format, strtotime($date)); } } view/View.php <?PHP /** * Simpla CMS * * @copyright 2011 Denis Pikusov * @link http://simp.la * @author Denis Pikusov * * Базовый класс для всех View * */ require_once('api/Simpla.php'); class View extends Simpla { /* Смысл класса в доступности следующих переменных в любом View */ public $currency; public $currencies; public $user; public $group; public $page; /* Класс View похож на синглтон, храним статически его инстанс */ private static $view_instance; public function __construct() { parent::__construct(); // Если инстанс класса уже существует - просто используем уже существующие переменные if(self::$view_instance) { $this->currency = &self::$view_instance->currency; $this->currencies = &self::$view_instance->currencies; $this->user = &self::$view_instance->user; $this->group = &self::$view_instance->group; $this->page = &self::$view_instance->page; } else { // Сохраняем свой инстанс в статической переменной, // чтобы в следующий раз использовать его self::$view_instance = $this; // Все валюты $this->currencies = $this->money->get_currencies(array('enabled'=>1)); // Выбор текущей валюты if($currency_id = $this->request->get('currency_id', 'integer')) { $_SESSION['currency_id'] = $currency_id; header("Location: ".$this->request->url(array('currency_id'=>null))); } // Берем валюту из сессии if(isset($_SESSION['currency_id'])) $this->currency = $this->money->get_currency($_SESSION['currency_id']); // Или первую из списка else $this->currency = reset($this->currencies); if(($theme = strval($this->request->get('theme')))!='') { $this->design->set_theme($theme); header("Location: ".$this->request->url(array('theme'=>null))); } // $this->design->assign('themes', $this->design->get_themes()); // Пользователь, если залогинен if(isset($_SESSION['user_id'])) { $u = $this->users->get_user(intval($_SESSION['user_id'])); if($u && $u->enabled) { $this->user = $u; $this->group = $this->users->get_group($this->user->group_id); } } // Текущая страница (если есть) $subdir = substr(dirname(dirname(__FILE__)), strlen($_SERVER['DOCUMENT_ROOT'])); $page_url = trim(substr($_SERVER['REQUEST_URI'], strlen($subdir)),"/"); if(strpos($page_url, '?') !== false) $page_url = substr($page_url, 0, strpos($page_url, '?')); $this->page = $this->pages->get_page((string)$page_url); $this->design->assign('page', $this->page); // Передаем в дизайн то, что может понадобиться в нем $this->design->assign('currencies', $this->currencies); $this->design->assign('currency', $this->currency); $this->design->assign('user', $this->user); $this->design->assign('group', $this->group); $this->design->assign('config', $this->config); $this->design->assign('settings', $this->settings); // Настраиваем плагины для смарти $this->design->smarty->registerPlugin("function", "get_posts", array($this, 'get_posts_plugin')); $this->design->smarty->registerPlugin("function", "get_brands", array($this, 'get_brands_plugin')); $this->design->smarty->registerPlugin("function", "get_browsed_products", array($this, 'get_browsed_products')); $this->design->smarty->registerPlugin("function", "get_featured_products", array($this, 'get_featured_products_plugin')); $this->design->smarty->registerPlugin("function", "get_new_products", array($this, 'get_new_products_plugin')); $this->design->smarty->registerPlugin("function", "get_discounted_products", array($this, 'get_discounted_products_plugin')); $this->design->smarty->registerPlugin("function", "get_latest_comments", array($this, 'get_latest_comments_plugin')); } } /** * * Отображение * */ function fetch() { return false; } /** * * Плагины для смарти * */ public function get_posts_plugin($params, &$smarty) { if(!isset($params['visible'])) $params['visible'] = 1; if(!empty($params['var'])) { $posts = $this->blog->get_posts($params); foreach($posts as $post) $post->comments_count = $this->comments->count_comments(array('type'=>'blog', 'object_id'=>$post->id, 'approved'=>1)); $smarty->assign($params['var'], $posts); } } public function get_brands_plugin($params, &$smarty) { if(!isset($params['visible'])) $params['visible'] = 1; if(!empty($params['var'])) $smarty->assign($params['var'], $this->brands->get_brands($params)); } public function get_browsed_products($params, &$smarty) { if(!empty($_COOKIE['browsed_products'])) { $browsed_products_ids = explode(',', $_COOKIE['browsed_products']); $browsed_products_ids = array_reverse($browsed_products_ids); if(isset($params['limit'])) $browsed_products_ids = array_slice($browsed_products_ids, 0, $params['limit']); $products = array(); foreach($this->products->get_products(array('id'=>$browsed_products_ids, 'visible'=>1)) as $p) $products[$p->id] = $p; $browsed_products_images = $this->products->get_images(array('product_id'=>$browsed_products_ids)); foreach($browsed_products_images as $browsed_product_image) if(isset($products[$browsed_product_image->product_id])) $products[$browsed_product_image->product_id]->images[] = $browsed_product_image; foreach($browsed_products_ids as $id) { if(isset($products[$id])) { if(isset($products[$id]->images[0])) $products[$id]->image = $products[$id]->images[0]; $result[] = $products[$id]; } } $smarty->assign($params['var'], $result); } } public function get_featured_products_plugin($params, &$smarty) { if(!isset($params['visible'])) $params['visible'] = 1; $params['featured'] = 1; if(!empty($params['var'])) { foreach($this->products->get_products($params) as $p) $products[$p->id] = $p; if(!empty($products)) { // id выбраных товаров $products_ids = array_keys($products); // Выбираем варианты товаров $variants = $this->variants->get_variants(array('product_id'=>$products_ids, 'in_stock'=>true)); // Для каждого варианта foreach($variants as &$variant) { // добавляем вариант в соответствующий товар $products[$variant->product_id]->variants[] = $variant; } // Выбираем изображения товаров $images = $this->products->get_images(array('product_id'=>$products_ids)); foreach($images as $image) $products[$image->product_id]->images[] = $image; foreach($products as &$product) { if(isset($product->variants[0])) $product->variant = $product->variants[0]; if(isset($product->images[0])) $product->image = $product->images[0]; } } $smarty->assign($params['var'], $products); } } public function get_new_products_plugin($params, &$smarty) { if(!isset($params['visible'])) $params['visible'] = 1; if(!isset($params['sort'])) $params['sort'] = 'created'; if(!empty($params['var'])) { foreach($this->products->get_products($params) as $p) $products[$p->id] = $p; if(!empty($products)) { // id выбраных товаров $products_ids = array_keys($products); // Выбираем варианты товаров $variants = $this->variants->get_variants(array('product_id'=>$products_ids, 'in_stock'=>true)); // Для каждого варианта foreach($variants as &$variant) { // добавляем вариант в соответствующий товар $products[$variant->product_id]->variants[] = $variant; } // Выбираем изображения товаров $images = $this->products->get_images(array('product_id'=>$products_ids)); foreach($images as $image) $products[$image->product_id]->images[] = $image; foreach($products as &$product) { if(isset($product->variants[0])) $product->variant = $product->variants[0]; if(isset($product->images[0])) $product->image = $product->images[0]; } } $smarty->assign($params['var'], $products); } } public function get_discounted_products_plugin($params, &$smarty) { if(!isset($params['visible'])) $params['visible'] = 1; $params['discounted'] = 1; if(!empty($params['var'])) { foreach($this->products->get_products($params) as $p) $products[$p->id] = $p; if(!empty($products)) { // id выбраных товаров $products_ids = array_keys($products); // Выбираем варианты товаров $variants = $this->variants->get_variants(array('product_id'=>$products_ids, 'in_stock'=>true)); // Для каждого варианта foreach($variants as &$variant) { // добавляем вариант в соответствующий товар $products[$variant->product_id]->variants[] = $variant; } // Выбираем изображения товаров $images = $this->products->get_images(array('product_id'=>$products_ids)); foreach($images as $image) $products[$image->product_id]->images[] = $image; foreach($products as &$product) { if(isset($product->variants[0])) $product->variant = $product->variants[0]; if(isset($product->images[0])) $product->image = $product->images[0]; } } $smarty->assign($params['var'], $products); } } public function get_latest_comments_plugin($params, &$smarty) { $params['approved'] = 1; $params['type'] = 'product'; if(!isset($params['limit'])) $params['limit'] = 4; if(!empty($params['var'])) { $comments = $this->comments->get_comments($params); $products_ids = array(); foreach($comments as $comment) $products_ids[] = $comment->object_id; $products = array(); foreach($this->products->get_products(array('id'=>$products_ids)) as $p) $products[$p->id] = $p; $images = $this->products->get_images(array('product_id'=>$products_ids)); foreach($images as $image) $products[$image->product_id]->images[] = $image; foreach($products as &$product) { if(isset($product->images[0])) $product->image = $product->images[0]; } foreach($comments as &$comment) { if(isset($products[$comment->object_id])) $comment->product = $products[$comment->object_id]; } $smarty->assign($params['var'], $comments); } } } Что не так? Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.