Now I know that a product can have multiple categories, but for my webshop I want to create a sitestructure with only one url to a page. Duplicate content is also blackhat SEO, so I want to prevent it as much as possible.
I don't know if that which I made is the most efficient because I am not familair with Opencart, so feedback is welcome.
Open the following file from the root: catalog/model/tool/seo_url.php
After:
Code: Select all
class ModelToolSeoUrl extends Model {
Code: Select all
/*begin mod*/
public function get_cat_alias($cid)
{
$cid=intval($cid);
$query='
SELECT
c.parent_id,
a.keyword
FROM
'.DB_PREFIX.'category AS c,
'.DB_PREFIX.'url_alias AS a,
'.DB_PREFIX.'product_to_category AS pc
WHERE
c.category_id='.$cid.' && a.query="category_id='.$cid.'"
LIMIT 1
';
$result=$this->db->query($query);
$results=array();
foreach($result->rows as $row)
{
if(intval($row['parent_id'])!==0)$results[]=$this->get_cat_alias($row['parent_id']);
if(isset($row['keyword']))$results[]=$row['keyword'];
}
return $results;
}
function output_cat_alias($array)
{
$result=array();
foreach($array as $keyword)
{
if(is_array($keyword))
{
$result[]=$this->output_cat_alias($keyword);
}else
{
$result[]=$keyword;
}
}
return implode('/',$result);
}
/*end mod*/
Code: Select all
if (($key == 'product_id') || ($key == 'manufacturer_id') || ($key == 'information_id')) {
Code: Select all
/*begin mod*/
if($key == 'product_id')
{
$query='
SELECT
c.parent_id,
c.category_id
FROM
'.DB_PREFIX.'category AS c,
'.DB_PREFIX.'url_alias AS a,
'.DB_PREFIX.'product_to_category AS pc
WHERE
pc.product_id='.$value.' &&
pc.category_id=c.category_id
LIMIT 1
';
$cat_current=$this->db->query($query);
$query='
SELECT
a.keyword
FROM
'.DB_PREFIX.'url_alias AS a
WHERE
a.query="category_id='.$cat_current->row['category_id'].'"
LIMIT 1
';
$cat_current_key=$this->db->query($query);
$url=$this->get_cat_alias($cat_current->row['parent_id']);
$url=array(0=>$url,1=>$cat_current_key->row['keyword']);
$url='/'.$this->output_cat_alias($url);
}
/*end mod*/