Разобрались, пользовательская тема-сборка, и какой-то горе-"разработчик" сборки убрал вообще все упоминания про seo контроллеры ! (и в index.php тоже) и... втулил seo обработчик вместо стандартной библиотеки /system/library/url.php (просто заменил файл, он наверно не знает что такое контроллеры) это же додуматься надо было! Такого идиотизма я еще не встречал. Теперь пользователь имеет проблемы практически со всеми модулями.
Вот привожу вам файл url.php замененный, просто обалдеть. Я даже знаю откуда эта глупость, обратите внимание на упоминания information/article, даже копирайты не поставлены ни где в модуле, горе-"разработчику" стыдно наверно подписываться под "этим" чудом.
(а вы спрашиваете почему в моем модуле много моих копирайтов (это наоборот признак хорошего тона), да потому что не стыдно за свой модуль, и пользователи, которые купили, должны знать кто написал модуль, чтобы потом было кому вопросы задавать)
Внизу следует "верх" идиотизма (как можно было заменить системный класс Url этим бредом)
<?php
class Url {
public $args = array();
public $ignore = array();
private $url;
private $ssl;
private $keywords;
private $links = array();
private $rewrite = array(
'product/product',
'product/manufacturer/info',
'product/category',
'information/information',
'information/article'
);
public function __construct($registry, $url, $ssl = '') {
$this->db = $registry->get('db');
$this->config = $registry->get('config');
$this->request = $registry->get('request');
$this->url = $url;
$this->ssl = $ssl;
if (isset($this->request->get['_route_'])) {
$this->decode($this->request->get['_route_']);
}
}
public function link($route, $args = '', $gets = false, $connection = 'NONSSL', $hash = '') {
if ($connection == 'NONSSL') {
$url = $this->url;
} else {
$url = $this->ssl;
}
$url .= 'index.php?route=' . $route;
if ($this->args && $gets === true) {
foreach ($this->args as $key => $value) {
if (isset($this->request->get[$key]) && $this->request->get[$key] != $value && !in_array($key, $this->ignore)) {
$args .= '&' . $key . '=' . urlencode(html_entity_decode($this->request->get[$key], ENT_QUOTES, 'UTF-8'));
}
}
}
if ($args) {
$url .= str_replace('&', '&', '&' . ltrim($args, '&'));
}
if (in_array($route, $this->rewrite) && $this->config->get('config_seo_url')) {
$url = $this->rewrite($url);
}
if ($hash) {
$url .= '#' . $hash;
}
return $url;
}
private function rewrite($link) {
$url_data = parse_url(str_replace('&', '&', $link));
$url = '';
$data = array();
parse_str($url_data['query'], $data);
foreach ($data as $key => $value) {
if (isset($data['route'])) {
if (
($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') ||
($data['route'] == 'information/article' && ($key == 'article_id' || $key == 'article_category_id'))
) {
$index = md5($key . $value);
if (!isset($this->keywords[$index])) {
$query = $this->db->query("SELECT keyword FROM " . DB_PREFIX . "url_alias WHERE `query` = '" . $this->db->escape($key . '=' . (int)$value) . "'");
if ($query->num_rows) {
$url .= '/' . $query->row['keyword'];
$this->keywords[$index]['keyword'] = $query->row['keyword'];
$this->keywords[$index]['num_rows'] = true;
unset($data[$key]);
} else {
$this->keywords[$index]['num_rows'] = false;
}
} else {
if ($this->keywords[$index]['num_rows']) {
$url .= '/' . $this->keywords[$index]['keyword'];
unset($data[$key]);
}
}
} elseif ($key == 'path') {
$categories = explode('_', $value);
foreach ($categories as $category) {
$index = md5($key . $category);
if (!isset($this->keywords[$index]['keyword'])) {
$query = $this->db->query("SELECT keyword FROM " . DB_PREFIX . "url_alias WHERE `query` = 'category_id=" . (int)$category . "'");
if ($query->num_rows) {
$url .= '/' . $query->row['keyword'];
$this->keywords[$index]['keyword'] = $query->row['keyword'];
$this->keywords[$index]['num_rows'] = true;
unset($data[$key]);
} else {
$this->keywords[$index]['num_rows'] = false;
}
} else {
if ($this->keywords[$index]['num_rows']) {
$url .= '/' . $this->keywords[$index]['keyword'];
unset($data[$key]);
}
}
}
}
}
}
if ($url) {
unset($data['route']);
$query = '';
if ($data) {
foreach ($data as $key => $value) {
$query .= '&' . $key . '=' . $value;
}
if ($query) {
$query = '?' . trim($query, '&');
}
}
return $url_data['scheme'] . '://' . $url_data['host'] . (isset($url_data['port']) ? ':' . $url_data['port'] : '') . str_replace('/index.php', '', $url_data['path']) . $url . $query;
} else {
return $link;
}
}
private function decode($_route_) {
$parts = explode('/', $_route_);
$sql = array();
foreach ($parts as $part) $sql[] = "'" . $this->db->escape($part) . "'";
$query = $this->db->query("SELECT keyword, query FROM " . DB_PREFIX . "url_alias WHERE keyword IN(" . implode(',', $sql) . ")");
$queries = array();
if ($query->num_rows && $query->num_rows == count($parts)) {
foreach ($query->rows as $row) {
$queries[md5($row['keyword'])] = $row['query'];
}
}
if ($queries) {
foreach ($parts as $part) {
$url = explode('=', $queries[md5($part)]);
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_category_id') {
$this->request->get['article_category_id'] = $url[1];
}
if ($url[0] == 'article_id') {
$this->request->get['article_id'] = $url[1];
}
}
} else {
$this->request->get['route'] = 'error/not_found';
}
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']) || isset($this->request->get['article_category_id'])) {
$this->request->get['route'] = 'information/article';
}
}
}
?>