上文说了opencart的SEO优化,现在作者要讲的就是以产品的名称作为opencart产品的seo-keyword.
因为作者只考虑新增加产品即Add,所以晚点再看Edit修改产品是否会导致seo-keyword变更.
在product控制器里,add的方法中,引用了这么一句
$this->model_catalog_product->addProduct($this->request->post);
我们在对应的模型方法里找到该方法:
if (isset($data[‘keyword’])) {
$this->db->query(“INSERT INTO ” . DB_PREFIX . “url_alias SET query = ‘product_id=” . (int)$product_id . “‘, keyword = ‘” . $this->db->escape($data[‘keyword’]) . “‘”);
}
如果keyword的变量存在则写入重写URL,简单了.修改一下:
首先定义个私有成员:
private $name;
因为产品的名称是在数组$data[‘product_description’]里,而该方法里就有对该数组进行foreach循环
foreach ($data[‘product_description’] as $language_id => $value) {
$this->db->query(“INSERT INTO ” . DB_PREFIX . “product_description SET product_id = ‘” . (int)$product_id . “‘, language_id = ‘” . (int)$language_id . “‘, name = ‘” . $this->db->escape($value[‘name’]) . “‘, description = ‘” . $this->db->escape($value[‘description’]) . “‘, tag = ‘” . $this->db->escape($value[‘tag’]) . “‘, meta_title = ‘” . $this->db->escape($value[‘meta_title’]) . “‘, meta_description = ‘” . $this->db->escape($value[‘meta_description’]) . “‘, meta_keyword = ‘” . $this->db->escape($value[‘meta_keyword’]) . “‘”);
$tempname=$value[‘name’]; //提取产品名称
for ($i=0 ; $i<strlen($tempname); $i++)
{
if ($tempname[$i]==’ ‘||$tempname[$i]==’,’||$tempname[$i]==’,’||$tempname[$i]==’。’||$tempname[$i]==’ ‘)
{
//对上述字符进行转化。
$tempname[$i]=’-‘;
}
}
$this->name=$tempname.”-“.”$product_id”.”.html”;
}
然后修改过$data[‘keyword’]的操作
删除if (!isset($data[‘keyword’])) 判断,
直接写入MYSQL:
$this->db->query(“INSERT INTO ” . DB_PREFIX . “url_alias SET query = ‘product_id=” . (int)$product_id . “‘, keyword = ‘” . $this->db->escape($this->name) . “‘”);
这样不添加keyword的情况下,一样会生成对应的URL.
关于作者