In my opencart installation, I have implemented an admin menu for generate automatically all the pages in SEO mode, generating the URL and putting it to alias table.
This is the code:
I made a new controller: admin\controller\generate_url_alias.php, that can be activate by menu, every time you add products.
Adding this controller in this way:
edit: admin\extension\module\menu.php:
add: $view->set('text_generate_url_alias', $language->get('text_generate_url_alias'));
after: $view->set('text_url_alias', $language->get('text_url_alias'));
edit: admin\language\italian\extension\module\menu.php
add: $_['text_generate_url_alias'] = 'Genera URL Alias';
after: $_['text_url_alias'] = 'URL Alias';
edit: \admin\template\default\module\menu.tpl
add: ['', '', '', null, null],
after: ['', '', '', null, null],
source for new controller: admin\controller\generate_url_alias.php
Code: Select all
<?php
class ControllerGenerateUrlAlias extends Controller {
var $error = array();
function index() {
$response =& $this->locator->get('response');
$language =& $this->locator->get('language');
$template =& $this->locator->get('template');
$module =& $this->locator->get('module');
$this->generate();
}
function generate() {
$cache =& $this->locator->get('cache');
$database =& $this->locator->get('database');
$response =& $this->locator->get('response');
$url =& $this->locator->get('url');
//delete all records
$remove_sql = "delete from url_alias";
$database->query($remove_sql);
//insert static information
$this->_insert_url_alias('controller/contact', 'contattaci.html'); //NOT LOCALIZED
$this->_insert_url_alias('controller/sitemap', 'mappa_del_sito.html'); //NOT LOCALIZED
//generate information
$sql = "select information_id, title from information_description";
$this->_generate_url_alias($sql, 'controller/information/information_id/{0}', array('information_id'), array('title'));
//generate category
$sql = "select category_id, name from category_description";
$this->_generate_url_alias($sql, 'controller/category/path/{0}', array('category_id'), array('name'));
//generate product
$sql = "select product_id, name from product_description";
$this->_generate_url_alias($sql, 'controller/product/product_id/{0}', array('product_id'), array('name'));
//generate product into category
$sql = "SELECT cat.category_id, cat.name AS category, prod.product_id, prod.name AS product " .
"FROM category_description cat " .
"LEFT JOIN product_to_category AS ptoc ON ptoc.category_id = cat.category_id " .
"LEFT JOIN product_description AS prod ON ptoc.product_id = prod.product_id";
$this->_generate_url_alias($sql, 'controller/product/path/{0}/product_id/{1}', array('category_id', 'product_id'), array('category', 'product'));
$cache->delete('url');
$response->redirect($url->ssl('url_alias'));
}
function login() {
$user =& $this->locator->get('user');
return !$user->isLogged();
}
function permission() {
$user =& $this->locator->get('user');
return !$user->hasPermission('access', 'url_alias');
}
function _generate_url_alias($select_sql, $query, $query_id_array, $alias_id_array) {
$database =& $this->locator->get('database');
$results = $database->getRows($select_sql);
foreach ($results as $result) {
//build query path
$query_path = $query;
foreach ($query_id_array as $key => $value) {
$query_path = str_replace('{'.$key.'}', $result[$value], $query_path);
}
//build alias
$alias = "";
foreach ($alias_id_array as $key => $value) {
$alias .= $result[$value] . " ";
}
$alias = trim($alias);
$alias = str_replace('.', ' ', $alias);
$alias = str_replace(',', ' ', $alias);
$alias = str_replace(';', ' ', $alias);
$alias = str_replace(':', ' ', $alias);
$alias = str_replace(';', ' ', $alias);
$alias = str_replace('\'', ' ', $alias);
$alias = str_replace('"', ' ', $alias);
$alias = str_replace('%', ' ', $alias);
$alias = str_replace('!', ' ', $alias);
$alias = str_replace('$', ' ', $alias);
$alias = str_replace('&', ' ', $alias);
$alias = str_replace('/', ' ', $alias);
$alias = str_replace('(', ' ', $alias);
$alias = str_replace(')', ' ', $alias);
$alias = str_replace('=', ' ', $alias);
$alias = str_replace('?', ' ', $alias);
$alias = str_replace('^', ' ', $alias);
$alias = str_replace('@', ' ', $alias);
$alias = str_replace('#', ' ', $alias);
$alias = str_replace('*', ' ', $alias);
$alias = str_replace(' ', '_', $alias);
$alias = $alias . '.html';
$alias = $this->_removeaccents($alias);
$alias = strtolower($alias);
//insert alias
$this->_insert_url_alias($query_path, $alias);
}
}
function _insert_url_alias($query, $alias) {
$database =& $this->locator->get('database');
$insert_sql = "replace into url_alias set query = '?', alias = '?'";
$database->query($database->parse($insert_sql, $query, $alias));
}
function _removeaccents($string){
$string = utf8_decode($string);
$txt = strtr($string,
"\xe1\xc1\xe0\xc0\xe2\xc2\xe4\xc4\xe3\xc3\xe5\xc5".
"\xaa\xe7\xc7\xe9\xc9\xe8\xc8\xea\xca\xeb\xcb\xed".
"\xcd\xec\xcc\xee\xce\xef\xcf\xf1\xd1\xf3\xd3\xf2".
"\xd2\xf4\xd4\xf6\xd6\xf5\xd5\x8\xd8\xba\xf0\xfa".
"\xda\xf9\xd9\xfb\xdb\xfc\xdc\xfd\xdd\xff\xe6\xc6\xdf",
"aAaAaAaAaAaAacCeEeEeEeEiIiIiIiInNoOoOoOoOoOoOoouUuUuUuUyYyaAs");
return $txt;
}
}
?>