Post by dennisforrest » Sat Aug 02, 2008 4:34 am

Hi All,

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;
	}
}
?>

Newbie

Posts

Joined
Tue Aug 07, 2007 7:55 pm

Post by bruce » Sat Aug 02, 2008 11:02 am

That looks very interesting dennis. Is there anywhere that we can see it in action?

Active Member

Posts

Joined
Wed Dec 12, 2007 2:26 pm
Who is online

Users browsing this forum: No registered users and 44 guests