Надоели ЧПУ вида (или ЧПУ с id-шниками, что само по себе убивает предназначение ЧПУ)
одежда/одежда_мужская/одежда_мужская_куртки/...
одежда/одежда_женская/одежда_женская_куртки/...
вместо
одежда/мужская/куртки...
одежда/женская/куртки...
из-за требования уникальности seo url для каждой категории.
Решений не нашел, одно есть, но для обычного ЧПУ opencart, под SEO PRO ничего не нашел.
Написал свое решение. Не знаю хорошо по синтаксису ни PHP, ни SQL, так что решение "на коленке", не самое быстрое, скорее, медленное, однако, рабочее. Все идеально работает, никаких дублей нет, при написании пути без подкатегорий автоматом перенаправляет на первый товар с таким путем (для "одежда/куртки" перенаправит на "одежда/мужская/куртки", если эта категория создана раньше, чем "одежда/женская/куртки").
Предложения, замечания, критика приветствуется. И так, заменяем в файле /docs/catalog/controller/common/seo_pro.php
где-то на 83 строке
foreach ($parts as $keyword) {
if (isset($this->cache_data['keywords'][$keyword])) {
$rows[] = array('keyword' => $keyword, 'query' => $this->cache_data['keywords'][$keyword]);
}
}
на
foreach ($parts as $keyword) {
if (isset($a) && $a[0]=="category_id") {
$currentid = $a[1];
$query = $this->db->query("SELECT a.* FROM " . DB_PREFIX . "url_alias a, " . DB_PREFIX . "category c, " . DB_PREFIX . "product_to_category m WHERE a.keyword = '" . $this->db->escape($keyword) . "' AND (a.query=CONCAT('category_id=', c.category_id) OR a.query=CONCAT('product_id=', m.product_id)) AND (c.parent_id='".$currentid."' OR m.category_id='".$currentid."')");
if ($query->num_rows) {
$rows[] = array('keyword' => $keyword, 'query' => $query->row['query']);
$a = explode("=",$query->row['query']);
}
} else {
if (isset($this->cache_data['keywords'][$keyword])) {
$rows[] = array('keyword' => $keyword, 'query' => $this->cache_data['keywords'][$keyword]);
$a=explode("=",$this->cache_data['keywords'][$keyword]);
}
}
}
Ну и затем ворочаем как хотим, можно повторять названия seo url (только не в пределах одной категории).