Я первый раз работаю с OpenCart.
Решил дубли товаров вот таким вот образом:
1. /catalog/controller/startup/seo_url.php
добавил $this->load->model('catalog/product'); (чтобы в регистре всегда была модель товара)
public function index() {
// Add rewrite to url class
if ($this->config->get('config_seo_url')) {
$this->url->addRewrite($this);
}
$this->load->model('catalog/product');
// Decode URL
.....
}
2. /system/library/url.php
добавил вот эту часть:
if ($route === 'product/product') {....}
public function link($route, $args = '', $secure = false) {
if ($route === 'product/product') {
$oc = $this->rewrite[0];
preg_match("/product_id=(\d*)/", $args, $result);
$product_id = (int)$result[1];
$categories = $oc->model_catalog_product->getCategories($product_id);
$path = implode("_", array_column($categories, 'category_id'));
$args = "path={$path}&product_id={$product_id}";
}
if ($this->ssl && $secure) {
$url = $this->ssl . 'index.php?route=' . $route;
} else {
$url = $this->url . 'index.php?route=' . $route;
}
if ($args) {
if (is_array($args)) {
$url .= '&' . http_build_query($args);
} else {
$url .= str_replace('&', '&', '&' . ltrim($args, '&'));
}
}
foreach ($this->rewrite as $rewrite) {
$url = $rewrite->rewrite($url);
}
return $url;
}
Насколько это правильно/не правильно с точки зрения OpenCart?
Теперь все ссылки на товары одинаковые из всех рубрик. Механизм определения последней рубрики можно конечно доработать, но в моем случае норм. работает.