Reputation: 1190
I have Opencart 1.5.1.3 and have modified Meta title to display "Product name - Product category"
$product_info['name'] . ' - ' . $category_info['name']
The problem is when some of the products belong to two or more categories. How to tell open cart to use any one of product's categories? I don't really care which one :)
$this->language->load('product/product');
$this->data['breadcrumbs'] = array();
$this->data['breadcrumbs'][] = array(
'text' => $this->language->get('text_home'),
'href' => $this->url->link('common/home'),
'separator' => false
);
$this->load->model('catalog/category');
$this->request->get['path'] = (isset($this->request->get['path']))? $this->request->get['path'] : $this->model_catalog_category->getCategoryPath($this->request->get['product_id']);
if (isset($this->request->get['path'])) {
$path = '';
foreach (explode('_', $this->request->get['path']) as $path_id) {
if (!$path) {
$path = $path_id;
} else {
$path .= '_' . $path_id;
}
$category_info = $this->model_catalog_category->getCategory($path_id);
if ($category_info) {
$this->data['breadcrumbs'][] = array(
'text' => $category_info['name'],
'href' => $this->url->link('product/category', 'path=' . $path),
'separator' => $this->language->get('text_separator')
);
}
}
}
Upvotes: 0
Views: 2098
Reputation: 15151
The code you have above assumes you get to a product via the categories, when in fact that doesn't always happen. Instead, you want to do the following
Find this line in /catalog/controller/product/product.php
$this->document->setTitle($product_info['name']);
Replace it with the following
$result = $this->db->query("
SELECT `cd`.`name`
FROM `" . DB_PREFIX . "product_to_category` `p2c`
LEFT JOIN `" . DB_PREFIX . "category_description` `cd`
ON `cd`.`category_id` = `p2c`.`category_id`
WHERE `p2c`.`product_id` = '" . (int) $product_id . "'
AND `cd`.`language_id` = '" . $this->confing->get('config_language_id') . "'
ORDER BY `cd`.`category_id` DESC
LIMIT 1
");
$category_name = $result->num_rows ? $result->row['name']: '';
$this->document->setTitle($product_info['name'] . (empty($category_name) ? '' : ' - ' . $category_name));
That will always show the last category created as the category assigned to the product. It will also not show a category if one isn't assigned to it (and hide the -)
Upvotes: 1