Решил попробовать что это за зверь, ocStore 1.5.5.1.2.
Сразу в глаза врезалось что с ЧПУ не всё так просто.
Посмотрел где происходит запись о ЧПУ в базу и поменял код в файлах:
admin\model\catalog\category.php
admin\model\catalog\product.php
admin\model\catalog\manufacturer.php
admin\model\catalog\information.php
В настройках ставим
Включить ЧПУ: Да
Тип ЧПУ: SeoPro
Поскольку не нашёл сразу где подключается общий конроллер, функция транслита везде дублируется.
В каждый файл, после последней функции, добавляем нашу alias_translate
private function alias_translate($alias, $alias_query = '') {
$ru = explode('-', "А-а-Б-б-В-в-Ґ-ґ-Г-г-Д-д-Е-е-Ё-ё-Є-є-Ж-ж-З-з-И-и-І-і-Ї-ї-Й-й-К-к-Л-л-М-м-Н-н-О-о-П-п-Р-р-С-с-Т-т-У-у-Ф-ф-Х-х-Ц-ц-Ч-ч-Ш-ш-Щ-щ-Ъ-ъ-Ы-ы-Ь-ь-Э-э-Ю-ю-Я-я");
$en = explode('-', "A-a-B-b-V-v-G-g-G-g-D-d-E-e-YO-yo-E-e-ZH-zh-Z-z-I-i-I-i-I-i-Y-y-K-k-L-l-M-m-N-n-O-o-P-p-R-r-S-s-T-t-U-u-F-f-H-h-TS-ts-CH-ch-SH-sh-SCH-sch---Y-y---E-e-YU-yu-YA-ya");
$alias = html_entity_decode($alias);
$alias = preg_replace('/[&=+%#<>"~`@\?\[\]\{\}\|\^\'\\\\]/', '', $alias);
$alias = str_replace($ru, $en, $alias);
$alias = preg_replace("/[\s]+/ui", '-', $alias);
$alias = strtolower(preg_replace("/[^0-9a-zа-я\-]+/ui", '', $alias));
if($alias_query) {
list($query_name, $id) = explode('=' , $alias_query);
$where = " AND query != '" . $alias_query . "'";
}
$query = $this->db->query("SELECT keyword FROM " . DB_PREFIX . "url_alias WHERE keyword = '" . $alias . "' " . $where . "");
if($query->num_rows) {
$alias = $alias . '-' . $id;
}
if($this->cache->get('seo_pro')) {
$this->cache->delete('seo_pro');
}
return $alias;
}
Теперь меняем генерацию URL в каждом файле
admin\model\catalog\category.php
в функции addCategory
if ($data['keyword']) {
$this->db->query("INSERT INTO " . DB_PREFIX . "url_alias SET query = 'category_id=" . (int)$category_id . "', keyword = '" . $this->db->escape($data['keyword']) . "'");
}
меняем на
// SEO URL
$data['keyword'] = $this->alias_translate($data['category_description'][1]['name'], "category_id=" . (int)$category_id);
$this->db->query("INSERT INTO " . DB_PREFIX . "url_alias SET query = 'category_id=" . (int)$category_id . "', keyword = '" . $this->db->escape($data['keyword']) . "'");
в функции editCategory
$this->db->query("DELETE FROM " . DB_PREFIX . "url_alias WHERE query = 'category_id=" . (int)$category_id. "'");
if ($data['keyword']) {
$this->db->query("INSERT INTO " . DB_PREFIX . "url_alias SET query = 'category_id=" . (int)$category_id . "', keyword = '" . $this->db->escape($data['keyword']) . "'");
}
меняем на
// SEO URL
$keyword = $this->alias_translate($data['category_description'][1]['name'], "category_id=" . (int)$category_id);
$query = $this->db->query("SELECT keyword FROM " . DB_PREFIX . "url_alias WHERE query = 'category_id=" . (int)$category_id . "'");
if($query->num_rows) {
if($data['keyword']) {
$keyword = $this->alias_translate($data['keyword'], "category_id=" . (int)$category_id);
}
$this->db->query("UPDATE " . DB_PREFIX . "url_alias SET keyword = '" . $this->db->escape($keyword) . "' WHERE query = 'category_id=" . (int)$category_id . "'");
} else {
$this->db->query("INSERT INTO " . DB_PREFIX . "url_alias SET query = 'category_id=" . (int)$category_id . "', keyword = '" . $this->db->escape($keyword) . "'");
}
admin\model\catalog\product.php
в функции addProduct
if ($data['keyword']) {
$this->db->query("INSERT INTO " . DB_PREFIX . "url_alias SET query = 'product_id=" . (int)$product_id . "', keyword = '" . $this->db->escape($data['keyword']) . "'");
}
меняем на
// SEO URL
$data['keyword'] = $this->alias_translate($data['product_description'][1]['name'], "product_id=" . (int)$product_id);
$this->db->query("INSERT INTO " . DB_PREFIX . "url_alias SET query = 'product_id=" . (int)$product_id . "', keyword = '" . $this->db->escape($data['keyword']) . "'");
в функции editProduct
$this->db->query("DELETE FROM " . DB_PREFIX . "url_alias WHERE query = 'product_id=" . (int)$product_id. "'");
if ($data['keyword']) {
$this->db->query("INSERT INTO " . DB_PREFIX . "url_alias SET query = 'product_id=" . (int)$product_id . "', keyword = '" . $this->db->escape($data['keyword']) . "'");
}
меняем на
// SEO URL
$keyword = $this->alias_translate($data['product_description'][1]['name'], "product_id=" . (int)$product_id);
$query = $this->db->query("SELECT keyword FROM " . DB_PREFIX . "url_alias WHERE query = 'product_id=" . (int)$product_id . "'");
if($query->num_rows) {
if($data['keyword']) {
$keyword = $this->alias_translate($data['keyword'], "product_id=" . (int)$product_id);
}
$this->db->query("UPDATE " . DB_PREFIX . "url_alias SET keyword = '" . $this->db->escape($keyword) . "' WHERE query = 'product_id=" . (int)$product_id . "'");
} else {
$this->db->query("INSERT INTO " . DB_PREFIX . "url_alias SET query = 'product_id=" . (int)$product_id . "', keyword = '" . $this->db->escape($keyword) . "'");
}
admin\model\catalog\manufacturer.php
в функции addManufacturer
if ($data['keyword']) {
$this->db->query("INSERT INTO " . DB_PREFIX . "url_alias SET query = 'manufacturer_id=" . (int)$manufacturer_id . "', keyword = '" . $this->db->escape($data['keyword']) . "'");
}
меняем на
// SEO URL
$data['keyword'] = $this->alias_translate($data['manufacturer_description'][1]['name'], "manufacturer_id=" . (int)$manufacturer_id);
$this->db->query("INSERT INTO " . DB_PREFIX . "url_alias SET query = 'manufacturer_id=" . (int)$manufacturer_id . "', keyword = '" . $this->db->escape($data['keyword']) . "'");
в функции editManufacturer
$this->db->query("DELETE FROM " . DB_PREFIX . "url_alias WHERE query = 'manufacturer_id=" . (int)$manufacturer_id. "'");
if ($data['keyword']) {
$this->db->query("INSERT INTO " . DB_PREFIX . "url_alias SET query = 'manufacturer_id=" . (int)$manufacturer_id . "', keyword = '" . $this->db->escape($data['keyword']) . "'");
}
меняем на
// SEO URL
$keyword = $this->alias_translate($data['name'], "manufacturer_id=" . (int)$manufacturer_id);
$query = $this->db->query("SELECT keyword FROM " . DB_PREFIX . "url_alias WHERE query = 'manufacturer_id=" . (int)$manufacturer_id . "'");
if($query->num_rows) {
if($data['keyword']) {
$keyword = $this->alias_translate($data['keyword'], "manufacturer_id=" . (int)$manufacturer_id);
}
$this->db->query("UPDATE " . DB_PREFIX . "url_alias SET keyword = '" . $this->db->escape($keyword) . "' WHERE query = 'manufacturer_id=" . (int)$manufacturer_id . "'");
} else {
$this->db->query("INSERT INTO " . DB_PREFIX . "url_alias SET query = 'manufacturer_id=" . (int)$manufacturer_id . "', keyword = '" . $this->db->escape($keyword) . "'");
}
admin\model\catalog\information.php
в функции addInformation
if ($data['keyword']) {
$this->db->query("INSERT INTO " . DB_PREFIX . "url_alias SET query = 'information_id=" . (int)$information_id . "', keyword = '" . $this->db->escape($data['keyword']) . "'");
}
меняем на
// SEO URL
$data['keyword'] = $this->alias_translate($data['keyword'], "information_id=" . (int)$information_id);
$this->db->query("INSERT INTO " . DB_PREFIX . "url_alias SET query = 'information_id=" . (int)$information_id . "', keyword = '" . $this->db->escape($data['keyword']) . "'");
в функции editInformation
$this->db->query("DELETE FROM " . DB_PREFIX . "url_alias WHERE query = 'information_id=" . (int)$information_id. "'");
if ($data['keyword']) {
$this->db->query("INSERT INTO " . DB_PREFIX . "url_alias SET query = 'information_id=" . (int)$information_id . "', keyword = '" . $this->db->escape($data['keyword']) . "'");
}
меняем на
// SEO URL
$keyword = $this->alias_translate($data['information_description'][1]['title'], "information_id=" . (int)$information_id);
$query = $this->db->query("SELECT keyword FROM " . DB_PREFIX . "url_alias WHERE query = 'information_id=" . (int)$information_id . "'");
if($query->num_rows) {
if($data['keyword']) {
$keyword = $this->alias_translate($data['keyword'], "information_id=" . (int)$information_id);
}
$this->db->query("UPDATE " . DB_PREFIX . "url_alias SET keyword = '" . $this->db->escape($keyword) . "' WHERE query = 'information_id=" . (int)$information_id . "'");
} else {
$this->db->query("INSERT INTO " . DB_PREFIX . "url_alias SET query = 'information_id=" . (int)$information_id . "', keyword = '" . $this->db->escape($keyword) . "'");
}
вот собственно и всё, в добавленной нами функции alias_translate происходит очистка файла кеша cache.seo_pro и генерация URL с поиском дублей в базе.
UPD: вышенаписанное, как показала практика, имеет ряд ошибок и недочётов, ссылка на архив с исправленными файлами для версии ocStore 1.5.5.1.2.