skorbatyuk

Адаптировать SEO функцию для SEO PRO

Рекомендуемые сообщения

skorbatyuk    0

Как вот этот код адаптировать под SEO PRO? 

 

<?php
class ControllerCommonSeoUrl extends Controller {
public function index() {
// Add rewrite to url class
if ($this->config->get('config_seo_url')) {
$this->url->addRewrite($this);
}


// Decode URL
if (isset($this->request->get['_route_'])) {
$parts = explode('/', $this->request->get['_route_']);


// remove any empty arrays from trailing
if (utf8_strlen(end($parts)) == 0) {
array_pop($parts);
}


foreach ($parts as $part) {
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE keyword = '" . $this->db->escape($part) . "'");


                if ($query->num_rows) {
$url = explode('=', $query->row['query']);


if ($url[0] == 'product_id') {
$this->request->get['product_id'] = $url[1];
}


if ($url[0] == 'category_id') {
if (!isset($this->request->get['path'])) {
$this->request->get['path'] = $url[1];
} else {
$this->request->get['path'] .= '_' . $url[1];
}
}


if ($url[0] == 'manufacturer_id') {
$this->request->get['manufacturer_id'] = $url[1];
}


if ($url[0] == 'information_id') {
$this->request->get['information_id'] = $url[1];
}
                    
if ($url[0] == 'article_id') {
$this->request->get['article_id'] = $url[1];
}
                    
if ($url[0] == 'blog_category_id') {
if (!isset($this->request->get['blog_path'])) {
$this->request->get['blog_path'] = $url[1];
} else {
$this->request->get['blog_path'] .= '_' . $url[1];
}
}


if ($query->row['query'] && $url[0] != 'article_id' && $query->row['query'] && $url[0] != 'blog_category_id' && $query->row['query'] && $url[0] != 'information_id' && $url[0] != 'manufacturer_id' && $url[0] != 'category_id' && $url[0] != 'product_id') {
$this->request->get['route'] = $query->row['query'];
}
} else {
$this->request->get['route'] = 'error/not_found';


break;
}
}


if (!isset($this->request->get['route'])) {
if (isset($this->request->get['product_id'])) {
$this->request->get['route'] = 'product/product';
} elseif (isset($this->request->get['path'])) {
$this->request->get['route'] = 'product/category';
} elseif (isset($this->request->get['manufacturer_id'])) {
$this->request->get['route'] = 'product/manufacturer/info';
} elseif (isset($this->request->get['information_id'])) {
$this->request->get['route'] = 'information/information';
} elseif (isset($this->request->get['article_id'])) {
$this->request->get['route'] = 'blog/article';
} elseif (isset($this->request->get['blog_path'])) {
$this->request->get['route'] = 'blog/blog';
}
}


            if (isset($this->request->get['route'])) {
return new Action($this->request->get['route']);
}
}
}


public function rewrite($link) {
$url_info = parse_url(str_replace('&', '&', $link));
        
$url = '';


$data = array();


parse_str($url_info['query'], $data);


foreach ($data as $key => $value) {
if (isset($data['route'])) {
                
if (($data['route'] == 'blog/article' && $key == 'article_id') || ($data['route'] == 'product/product' && $key == 'product_id') || (($data['route'] == 'product/manufacturer/info' || $data['route'] == 'product/product') && $key == 'manufacturer_id') || ($data['route'] == 'information/information' && $key == 'information_id')) {
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = '" . $this->db->escape($key . '=' . (int)$value) . "'");


if ($query->num_rows && $query->row['keyword']) {
$url .= '/' . $query->row['keyword'];


unset($data[$key]);
}
} elseif ($key == 'path') {
$categories = explode('_', $value);


                    $column = 'category_id';
                    if($data['route'] == 'blog/blog'){
                        $column = 'blog_category_id';
                    }
                    
foreach ($categories as $category) {
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = '{$column}=" . (int)$category . "'");


if ($query->num_rows && $query->row['keyword']) {
$url .= '/' . $query->row['keyword'];
} else {
$url = '';


break;
}
}


unset($data[$key]);
}
}
}


if ($url) {
unset($data['route']);


$query = '';


if ($data) {
foreach ($data as $key => $value) {
$query .= '&' . rawurlencode((string)$key) . '=' . rawurlencode((string)$value);
}


if ($query) {
$query = '?' . str_replace('&', '&', trim($query, '&'));
}
}


return $url_info['scheme'] . '://' . $url_info['host'] . (isset($url_info['port']) ? ':' . $url_info['port'] : '') . str_replace('/index.php', '', $url_info['path']) . $url . $query;
} else {
return $link;
}
}
}
 
___________________________________________________________________________________________________________________________________
 
Код в SEO.pro
 
<?php
class ControllerCommonSeoPro extends Controller {
private $cache_data = null;
private $languages = array();
private $config_language;


public function __construct($registry) {
parent::__construct($registry);
$this->cache_data = $this->cache->get('seo_pro');
if (!$this->cache_data) {
$query = $this->db->query("SELECT LOWER(`keyword`) as 'keyword', `query` FROM " . DB_PREFIX . "url_alias");
$this->cache_data = array();
foreach ($query->rows as $row) {
$this->cache_data['keywords'][$row['keyword']] = $row['query'];
$this->cache_data['queries'][$row['query']] = $row['keyword'];
}
$this->cache->set('seo_pro', $this->cache_data);
}


$query = $this->db->query("SELECT `value` FROM `" . DB_PREFIX . "setting` WHERE `key` = 'config_language'");
$this->config_language = $query->row['value'];


$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "language WHERE status = '1'");


foreach ($query->rows as $result) {
$this->languages[$result['code']] = $result;
}


}


public function index() {


$code = null;


// If language specified in URI - switch to code from URI
if(isset($this->request->get['_route_'])) {
$route_ = $this->request->get['_route_'];
$tokens = explode('/', $this->request->get['_route_']);


if(array_key_exists($tokens[0], $this->languages)) {
$code = $tokens[0];
$this->request->get['_route_'] = substr($this->request->get['_route_'], strlen($code) + 1);
}


if(trim($this->request->get['_route_']) == '' || trim($this->request->get['_route_']) == 'index.php') {
unset($this->request->get['_route_']);
}
}


// Pavillion Theme fix for "original_route" param.
// Theme: <http://themeforest.net/item/pavilion-premium-responsive-opencart-theme/9219645>
if(isset($this->request->get['original_route'])) {
unset($this->request->get['original_route']);
}


// Detect language code
if(!isset($code)) {
if (isset($this->session->data['language'])) {
$code = $this->session->data['language'];
} elseif (isset($this->request->cookie['language'])) {
$code = $this->request->cookie['language'];
} else {
$code = $this->config_language;
}
}


if(!isset($this->session->data['language']) || $this->session->data['language'] != $code) {
$this->session->data['language'] = $code;
}




$xhttprequested =
isset($this->request->server['HTTP_X_REQUESTED_WITH'])
&& (strtolower($this->request->server['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest');


$captcha = isset($this->request->get['route']) && $this->request->get['route']=='tool/captcha';


if(!$xhttprequested && !$captcha) {
setcookie('language', $code, time() + 60 * 60 * 24 * 30, '/',
($this->request->server['HTTP_HOST'] != 'localhost') ? $this->request->server['HTTP_HOST'] : false);
}




$this->config->set('config_language_id', $this->languages[$code]['language_id']);
$this->config->set('config_language', $this->languages[$code]['code']);


$language = new Language($this->languages[$code]['directory']);
$language->load('default');
$language->load($this->languages[$code]['directory']);
$this->registry->set('language', $language);




// Add rewrite to url class
if ($this->config->get('config_seo_url')) {
$this->url->addRewrite($this);
} else {
return;
}


// Decode URL
if (!isset($this->request->get['_route_'])) {
$this->validate();
} else {
$route = $this->request->get['_route_'];
unset($this->request->get['_route_']);
$parts = explode('/', trim(utf8_strtolower($route), '/'));
list($last_part) = explode('.', array_pop($parts));
array_push($parts, $last_part);


$rows = array();
foreach ($parts as $keyword) {
if (isset($this->cache_data['keywords'][$keyword])) {
$rows[] = array('keyword' => $keyword, 'query' => $this->cache_data['keywords'][$keyword]);
}
}


if (count($rows) == sizeof($parts)) {
$queries = array();
foreach ($rows as $row) {
$queries[utf8_strtolower($row['keyword'])] = $row['query'];
}


reset($parts);
foreach ($parts as $part) {


// fix "undefined index" exception,
// https://github.com/myopencart/ocStore/commit/51bd518ca3ee3330ae87314472f63def17dcf746
if( ! isset($queries[$part])) return false;


$url = explode('=', $queries[$part], 2);


if ($url[0] == 'category_id') {
if (!isset($this->request->get['path'])) {
$this->request->get['path'] = $url[1];
} else {
$this->request->get['path'] .= '_' . $url[1];
}
} elseif (count($url) > 1) {
$this->request->get[$url[0]] = $url[1];
}
}
} else {
$this->request->get['route'] = 'error/not_found';
}


if (isset($this->request->get['product_id'])) {
$this->request->get['route'] = 'product/product';
if (!isset($this->request->get['path'])) {
$path = $this->getPathByProduct($this->request->get['product_id']);
if ($path) $this->request->get['path'] = $path;
}
} elseif (isset($this->request->get['path'])) {
$this->request->get['route'] = 'product/category';
} elseif (isset($this->request->get['manufacturer_id'])) {
$this->request->get['route'] = 'product/manufacturer/info';
} elseif (isset($this->request->get['information_id'])) {
$this->request->get['route'] = 'information/information';


// Compatibility with Shopencart News/Blog:
} elseif (isset($this->request->get['news_id'])) {
$this->request->get['route'] = 'news/article';
} elseif (isset($this->request->get['author'])) {
$this->request->get['route'] = 'news/ncategory';
} elseif (isset($this->request->get['ncat'])) {
$this->request->get['route'] = 'news/ncategory';
} elseif (isset($this->request->get['ncategory_id'])) {
$this->request->get['route'] = 'news/ncategory';
} elseif (isset($this->request->get['author'])) {
$this->request->get['route'] = 'news/ncategory';


// Compatibility with VDF News (villagedefrance)
} elseif (isset($this->request->get['news_id'])) {
$this->request->get['route'] = 'information/news/news';
} elseif (isset($this->request->get['posts_id'])) {
$this->request->get['route'] = 'information/posts/posts';


// Compatibility with some unknown Blog (blog/home, blog/category, blog/blog):
} elseif (isset($this->request->get['blog_id'])) {
$this->request->get['route'] = 'blog/blog';
} elseif (isset($this->request->get['blog_category_id'])) {
$this->request->get['route'] = 'blog/category';
$this->request->get['blogpath'] = $this->request->get['blog_category_id'];
unset($this->request->get['blog_category_id']);


} elseif(isset($this->cache_data['queries'][$route_])) {
header($this->request->server['SERVER_PROTOCOL'] . ' 301 Moved Permanently');
$this->response->redirect($this->cache_data['queries'][$route_], 301);
} else {
if (isset($queries[$parts[0]])) {
$this->request->get['route'] = $queries[$parts[0]];
}
}




$this->validate();


if (isset($this->request->get['route'])) {
return new Action($this->request->get['route']);
}
}
}


public function rewrite($link, $code = '') {
if(!$code) {
$code = $this->session->data['language'];
}
if($this->config->get('ocjazz_seopro_hide_default') && $code == $this->config_language) {
$code='';
}
else {
$code .='/';
}
if (!$this->config->get('config_seo_url')) return $link;


$seo_url = '';


$component = parse_url(str_replace('&', '&', $link));


$data = array();
parse_str($component['query'], $data);


$route = $data['route'];
unset($data['route']);


switch ($route) {
case 'common/home':
if ($component['scheme'] == 'https') {
$link = $this->config->get('config_ssl');
} else {
$link = $this->config->get('config_url');
}
if($code != $this->config_language.'/') {
$link .= $code;
}
if(isset($this->cache_data['queries']['common/home'])) {
$link .= $this->cache_data['queries']['common/home'];
}
// Return clean shop link with any GET-parameters stripped off
return $link;
// (if you want to pass all parameters on homepage as is, comment the line above: `// return $link;`)
break;


case 'product/product':
if (isset($data['product_id'])) {
// Whitelist GET parameters
$tmp = $data;
$data = array();
if ($this->config->get('config_seo_url_include_path')) {
$data['path'] = $this->getPathByProduct($tmp['product_id']);
if (!$data['path']) return $link;
}


$allowed_parameters = array(
'product_id', 'tracking',
// Compatibility with "OCJ Merchandising Reports" module.
// Save and pass-thru module specific GET parameters.
'uri', 'list_type',
// Compatibility with Google Analytics
'gclid', 'utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',
'type', 'source', 'block', 'position', 'keyword',
// Compatibility with Yandex Metrics, Yandex Market
'yclid', 'ymclid', 'openstat', 'frommarket',
'openstat_service', 'openstat_campaign', 'openstat_ad', 'openstat_source',
// Compatibility with Themeforest Rgen templates (popup with product preview)
'urltype'
);
foreach($allowed_parameters as $ap) {
if (isset($tmp[$ap])) {
$data[$ap] = $tmp[$ap];
}
}


}
break;


case 'product/category':
if (isset($data['path'])) {
$category = explode('_', $data['path']);
$category = end($category);
$data['path'] = $this->getPathByCategory($category);
if (!$data['path']) return $link;
}
break;


// pages retreived by AJAX requests
case 'product/product/review':
case 'information/information/info':
case 'information/information/agree':
return $link;
break;


default:
break;
}


if ($component['scheme'] == 'https') {
$link = $this->config->get('config_ssl');
} else {
$link = $this->config->get('config_url');
}


$link .= $code . 'index.php?route=' . $route;


if (count($data)) {
$link .= '&' . urldecode(http_build_query($data, '', '&'));
}


$queries = array();
foreach ($data as $key => $value) {
switch ($key) {
case 'product_id':
case 'manufacturer_id':
case 'category_id':
case 'information_id':
case 'order_id':


case 'search':
case 'sub_category':
case 'description':


// Compatibility with Shopencart News/Blog:
case 'news_id':
case 'author':
case 'ncat':


// Compatibility with VDF News (villagedefrance)
case 'news_id':
case 'posts_id':


// Compatibility with unknown Blog:
case 'blog_id':
case 'blog_category_id':
case 'blogpath':


$queries[] = $key . '=' . $value;
unset($data[$key]);
$postfix = 1;
break;


case 'page':
if($value == 1) {
unset($data[$key]);
} else {
$queries[] = $key . '=' . $value;
}
break;


case 'path':
// ATTN: user can set any path: path=2_4_1_2_3
$category_path = explode('_', $value);


// find real category path:
$category_id = end($category_path);
$categories = $this->getPathByCategory($category_id);


// save all categories queries to find later their aliases
$categories = explode('_', $categories);
foreach ($categories as $category) {
$queries[] = 'category_id=' . $category;
}
unset($data[$key]);
break;


default:
break;
}
}


if(empty($queries)) {
$queries[] = $route;
}


$rows = array();
foreach($queries as $query) {
if(isset($this->cache_data['queries'][$query])) {
$rows[] = array('query' => $query, 'keyword' => $this->cache_data['queries'][$query]);
}


// Leave "page=..." parameter as is
if(preg_match('/^page=/', $query) === 1 && $query != 'page=1') {
$rows[] = array('query' => $query, 'keyword' => '');
}
}


if(count($rows) == count($queries)) {
$aliases = array();
foreach($rows as $row) {
$aliases[$row['query']] = $row['keyword'];
}
foreach($queries as $query) {
$seo_url .= '/' . rawurlencode($aliases[$query]);
}
}


if ($seo_url == '') return $link;


$seo_url = $code . trim($seo_url, '/');


if ($component['scheme'] == 'https') {
$seo_url = $this->config->get('config_ssl') . $seo_url;
} else {
$seo_url = $this->config->get('config_url') . $seo_url;
}


if (isset($postfix)) {
$seo_url .= trim($this->config->get('config_seo_url_postfix'));
} else {
$seo_url .= '/';
}


if(substr($seo_url, -2) == '//') {
$seo_url = substr($seo_url, 0, -1);
}




if (count($data)) {
$seo_url .= '?' . urldecode(http_build_query($data, '', '&'));
}


return $seo_url;
}


private function getPathByProduct($product_id) {
$product_id = (int)$product_id;
if ($product_id < 1) return false;


static $path = null;
if (!is_array($path)) {
$path = $this->cache->get('product.seopath');
if (!is_array($path)) $path = array();
}


if (!isset($path[$product_id])) {
$query = $this->db->query("SELECT category_id FROM " . DB_PREFIX . "product_to_category WHERE product_id = '" . $product_id . "' ORDER BY main_category DESC LIMIT 1");


$path[$product_id] = $this->getPathByCategory($query->num_rows ? (int)$query->row['category_id'] : 0);


$this->cache->set('product.seopath', $path);
}


return $path[$product_id];
}


private function getPathByCategory($category_id) {
$category_id = (int)$category_id;
if ($category_id < 1) return false;


static $path = null;
if (!is_array($path)) {
$path = $this->cache->get('category.seopath');
if (!is_array($path)) $path = array();
}


if (!isset($path[$category_id])) {
$max_level = 10;


$sql = "SELECT CONCAT_WS('_'";
for ($i = $max_level-1; $i >= 0; --$i) {
$sql .= ",t$i.category_id";
}
$sql .= ") AS path FROM " . DB_PREFIX . "category t0";
for ($i = 1; $i < $max_level; ++$i) {
$sql .= " LEFT JOIN " . DB_PREFIX . "category t$i ON (t$i.category_id = t" . ($i-1) . ".parent_id)";
}
$sql .= " WHERE t0.category_id = '" . $category_id . "'";


$query = $this->db->query($sql);


$path[$category_id] = $query->num_rows ? $query->row['path'] : false;


$this->cache->set('category.seopath', $path);
}


return $path[$category_id];
}


private function validate() {
if (isset($this->request->get['route']) && ($this->request->get['route'] == 'error/not_found'
|| preg_match('~^api/~',$this->request->get['route']) // Masks all api requests
)) {
return;
}
if (ltrim($this->request->server['REQUEST_URI'], '/') == 'sitemap.xml') {
$this->request->get['route'] = 'feed/google_sitemap';
return;
}


if(empty($this->request->get['route'])) {
$this->request->get['route'] = 'common/home';
}


if (isset($this->request->server['HTTP_X_REQUESTED_WITH']) && strtolower($this->request->server['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
return;
}


if (isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1'))) {
$url = str_replace('&', '&', $this->config->get('config_ssl') . ltrim($this->request->server['REQUEST_URI'], '/'));
$seo = str_replace('&', '&', $this->url->link($this->request->get['route'], $this->getQueryString(array('route')), 'SSL'));
} else {
$url = str_replace('&', '&',
substr($this->config->get('config_url'), 0, strpos($this->config->get('config_url'), '/', 10)) // leave only domain
. $this->request->server['REQUEST_URI']);
$seo = str_replace('&', '&', $this->url->link($this->request->get['route'], $this->getQueryString(array('route')), 'NONSSL'));
}


if (rawurldecode($url) != rawurldecode($seo)) {
// header($this->request->server['SERVER_PROTOCOL'] . ' 303 See Other');
// $this->response->redirect($seo,303);
header($this->request->server['SERVER_PROTOCOL'] . ' 301 Moved Permanently');
$this->response->redirect($seo,301);
}
}


private function getQueryString($exclude = array()) {
if (!is_array($exclude)) {
$exclude = array();
}


return urldecode(
http_build_query(
array_diff_key($this->request->get, array_flip($exclude))


)
);
}
}
Друзья, необходима помощь. Разработчик дал функцию контроллер модуля Блога, которая работает со стандартным SEO URL в OPEN CART. У меня же отлично работает SEO.PRO Но блог ЧПУ  URL  не подтягивает. Как совместить от разработчика SEO URL с моим SEO PRO? 
 
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
andreya    0

Работа выполнена, но не оплачена.

 

skorbatyuk на связь не выходит.

 

Сайт: http://wellstyle.in.ua

Чёрный список, неоплата, мошенник

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти


  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу