Página 1 de 2

Automatic seo url remover identificador das urls

Enviado: 19 Fev 2016, 01:59
por ronan
Bom dia pessoal, consegui instalar o automatic seo url

Porém gostaria que as urls não tivesse números, como estes

http://www.loja.com.br/carrinho-de-cont ... 11c76.html

Gostaria de retirar esses identificadores de todas oas urls inclusive categorias.

o código do arquivo é este:
Código: Selecionar todos
<?php
class ControllerCommonAutomaticSeoUrl extends Controller {


	// configuration attributes
	var $forceAutoUrl = true; //if set to true, default OC SEO keyword for urls will be ignored
	var $manufacturerNameInUrl = true;
	var $categoriesPathInProductUrl = true;
	var $languageSlugInUrl = true;
	var $preventProdDuplicates = true; //if a product is linked to more then one category, only use one category for product details page
	var $product_identifier = 'p';
	var $category_identifier = 'c';
	var $manufacturer_identifier = 'm';
	var $info_identifier = 'i';
	var $jblog_post_identifier = 'b';
	var $jblog_post_cat_identifier = 'bc';
	var $route_identifier = 'r';
	var $_sep = '-';
	var $_url_ext = '.html'; // .html, .php etc.

	// reserved attributes
	var $_cachefile;
	var $_products = array();
	var	$_categories = array();
	var $_tmp_cat_path = array();
	var	$_manufacturers = array();
	var	$_jblog_posts = array();
	var $_jblog_post_cats = array();
	var	$_infos = array();
	var $_infoString;
	var $_languages;


	public function index() {
		header('Content-Type: text/html; charset=utf-8');

		if(!defined('DIR_CACHE')) define('DIR_CACHE', DIR_SYSTEM.'cache/');
		$cache_folder = DIR_CACHE.'autourl/';
		if (!is_dir($cache_folder)) {
			mkdir($cache_folder);
		}
		// Error utf-8 fail -> remove urlencode
		//$this->_cachefile = $cache_folder.'cache.autourl.'.$this->session->data['language'].'.'.md5(urlencode($_SERVER['REQUEST_URI']));
		$this->_cachefile = $cache_folder.'cache.autourl.'.$this->session->data['language'].'.'.md5($_SERVER['REQUEST_URI']);
		if(file_exists($this->_cachefile)){
			$data = file_get_contents($this->_cachefile);
			$data = unserialize($data);
			$this->_products = $data['products'];
			$this->_categories = $data['categories'];
			$this->_manufacturers = $data['manufacturers'];
			$this->_infos = $data['infos'];
			$this->_jblog_posts = $data['jblog_posts'];
			$this->_jblog_post_cats = $data['jblog_post_cats'];
		}else{
			$cachefile = fopen($this->_cachefile, "w") or die("Unable to open file!");
			fclose($cachefile);
		}

		//change language id: i.e. for sitemap
		if(isset($this->request->get['language'])){
			$this->_getLanguages();
			if(isset($this->_languages[$this->request->get['language']]) && $this->request->get['language'] != $this->config->get('config_language')){
				$this->session->data['language'] = $this->request->get['language'];
				if(isset($this->request->get['_route_']) && $this->request->get['_route_'] == 'feed/google_sitemap')
					$this->config->set('config_language', $this->_languages[$this->request->get['language']]); //google webmaster tools deny redirects
				else header('location: '.urldecode($_SERVER['REQUEST_URI']));
			}
		}
		// Add rewrite to url class
		if ($this->config->get('config_seo_url')) {
			$this->url->addRewrite($this);
		}
		//detect language change
		if(
			$this->languageSlugInUrl
			&& isset($this->request->get['route'])
			&&
			(
				$this->request->get['route'] == 'common/language/language' //OC 2.0
				||
				( $this->request->get['route'] == 'module/language' && isset($this->request->post['language_code']) ) //OC up to 1.5.4
			)
		){
			$this->session->data['language_is_changing'] = true;
		}

		// Decode URL
		if (isset($this->request->get['_route_'])) {
			if(substr($this->request->get['_route_'], strlen($this->_url_ext)*-1) == $this->_url_ext)
				$this->request->get['_route_'] = substr($this->request->get['_route_'], 0, strlen($this->request->get['_route_']) - strlen($this->_url_ext));
			//decode url
			$segments = explode('/', $this->request->get['_route_']);
			//language slug
			if($this->languageSlugInUrl){
				$this->_getLanguages();
				if(!isset($this->request->post['language_code']) && isset($this->_languages[$segments[0]]) && $segments[0] != $this->config->get('config_language')){
					$this->session->data['language'] = $segments[0];
					header('location: '.urldecode($_SERVER['REQUEST_URI']));
				}
				if(isset($this->_languages[$segments[0]])){
					unset($segments[0]);
					$segments = array_values($segments);
				}
			}
			if(!empty($segments)){
				$_segments = array_reverse($segments);
				$segment = array_reverse(explode($this->_sep, $_segments[0]));
				$string = $segment[0];
				$string = preg_replace('/[^A-Za-z0-9]/','',$string);
				$parts = preg_split("/(,?\s+)|((?<=[a-z])(?=\d))|((?<=\d)(?=[a-z]))/i", $string);

				if(!empty($parts)){

					// adjust path and manufacturer id
					$path = array();
					foreach($parts as $k=>$p){
						$next = $k+1;
						if( ($k % 2) == 0 && $p == $this->category_identifier){
							$path[] = $parts[$next];
						}else if( ($k % 2) == 0 && $p == $this->manufacturer_identifier){
							$this->request->get['manufacturer_id'] = (int) $parts[$next];
						}
					}
					$path = implode('_',$path);
					// end adjust path and manufacturer id

					switch($parts[0]){
						case $this->product_identifier:
							// product page
							$this->request->get['route'] = 'product/product';
							$this->request->get['product_id'] = (int) $parts[1];
							if(isset($parts[2]) && $parts[2] == $this->category_identifier){
								$this->request->get['path'] = $path; //$parts[3];
							}
							break;
						case $this->category_identifier:
							// category page
							$this->request->get['route'] = 'product/category';
							$this->request->get['path'] = $path; //$parts[1];
							break;
						case $this->manufacturer_identifier:
							// manufacturer page
							$mroute = ( version_compare(VERSION, '1.5.4.0') >= 0 ) ? 'product/manufacturer/info' : 'product/manufacturer/product';
							$this->request->get['route'] = $mroute;
							$this->request->get['manufacturer_id'] = (int) $parts[1];
							break;
						case $this->info_identifier:
							// information page
							$this->request->get['route'] = 'information/information';
							$this->request->get['information_id'] = (int) $parts[1];
							break;
						case $this->jblog_post_identifier:
							$this->request->get['route'] = 'journal2/blog/post';
							$this->request->get['journal_blog_post_id'] = (int) $parts[1];
							if(isset($parts[2]) && $parts[2] == $this->jblog_post_cat_identifier){
								$this->request->get['journal_blog_category_id'] = $parts[3];
							}
							break;
						case $this->jblog_post_cat_identifier:
							// category page
							$this->request->get['route'] = 'journal2/blog';
							$this->request->get['journal_blog_category_id'] = $parts[1];
							break;
						case $this->route_identifier:
							// other route pages
							$this->request->get['route'] = implode('/',$segments);
							break;
						default:
							if($this->forceAutoUrl)
								$this->request->get['route'] = implode('/',$segments);
							else{
								$this->request->get['_route_'] = implode('/',$segments);
								return $this->index_standard();
							}

							break;
					}
				}else{
					if($this->forceAutoUrl)
						$this->request->get['route'] = implode('/',$segments);
					else{
						$this->request->get['_route_'] = implode('/',$segments);
						return $this->index_standard();
					}

				}
			}
			if( $this->languageSlugInUrl && isset($this->session->data['language_is_changing']) && $this->session->data['language_is_changing']){
				unset($this->session->data['language_is_changing']);
				$route = '';
				if(isset($this->request->get['route'])){
					$route = $this->request->get['route'];
					unset($this->request->get['route']);
				}
				unset($this->request->get['_route_']);
				$args = http_build_query($this->request->get);
				$redirect = $this->url->link($route, $args);
				if( version_compare(VERSION, '1.5.4') >= 0 ){
					$this->response->redirect($redirect);
				}else{
					$this->redirect($redirect);
				}
			}
			if (isset($this->request->get['route'])) {
				if (defined('VERSION') && version_compare(VERSION, '2.0.0.0') >= 0) {
					return new Action($this->request->get['route']);
				}
				else{
					return $this->forward($this->request->get['route']);
				}
			}
		}

	}
	public function rewrite($link){

		if(!$this->forceAutoUrl){
			$_link = $this->rewrite_standard($link);
			if($_link != $link) return $_link;
		}

		if($this->config->get('config_seo_url')){
			$this->_infoString = '';
			$url_data = parse_url(str_replace('&', '&', $link));
			if(!isset($url_data['query']))return $link;
			$url = $urlpre = $urlpost = '';
			$data = array();
			parse_str($url_data['query'], $data);
			if(isset($data['route'])){
				switch($data['route']){
					case 'common/currency/currency':
					case 'common/language/language':
					case 'module/language':
					case 'module/currency':
						return $link;
						break;
					case 'product/product':
						$pid = (isset($data['product_id'])) ? $data['product_id'] : 0;
						$this->_get_products($pid);
						unset($data['product_id']);
						//$url .= '/'.$this->product_identifier.'/'.$pid;
						$this->_infoString .= $this->product_identifier.$pid;
						if(isset($this->_products[$pid])){
							if(isset($data['path']) && !$this->preventProdDuplicates){
								$cats = array_reverse(explode('_', $data['path']));
								$catid = $cats[0];
							}else{
								$catid = $this->_products[$pid]['category_id'];
							}
							$url .= $this->_traverse_categories($catid, $this->categoriesPathInProductUrl);
							if($this->manufacturerNameInUrl){
								$this->_get_manufacturers($this->_products[$pid]['manufacturer_id']);
								if(isset($this->_manufacturers[$this->_products[$pid]['manufacturer_id']]))
									$url .= $this->_manufacturers[$this->_products[$pid]['manufacturer_id']].'/';
							}
							$url .= $this->_products[$pid]['name'];
						}
						if(isset($data['path'])){
							unset($data['path']);
						}
						if(isset($data['manufacturer_id'])){
							$this->_infoString .= $this->manufacturer_identifier.$data['manufacturer_id'];
							unset($data['manufacturer_id']);
						}

						break;
					case 'product/category':
						$data['path'] = isset($data['path']) ? $data['path'] : 0;
						$ppath = array_reverse(explode('_',$data['path']));
						$url .= $this->_traverse_categories($ppath[0]);
						unset($data['path']);
						break;
					case 'product/manufacturer/info':
					case 'product/manufacturer/product':
						$data['manufacturer_id'] = isset($data['manufacturer_id']) ? $data['manufacturer_id'] : 0;
						//$url .= '/'.$this->manufacturer_identifier.'/'.$data['manufacturer_id'];
						$this->_infoString .= $this->manufacturer_identifier.$data['manufacturer_id'];
						$this->_get_manufacturers($data['manufacturer_id']);
						if(isset($this->_manufacturers[$data['manufacturer_id']]))
							$url .= '/'.$this->_manufacturers[$data['manufacturer_id']];
						unset($data['manufacturer_id']);
						break;
					case 'information/information':
						$data['information_id'] = isset($data['information_id']) ? $data['information_id'] : 0;
						//$url .= '/'.$this->info_identifier.'/'.$data['information_id'];
						$this->_infoString .= $this->info_identifier.$data['information_id'];
						$this->_get_infos($data['information_id']);
						if(isset($this->_infos[$data['information_id']]))
							$url .= '/'.$this->_infos[$data['information_id']];
						unset($data['information_id']);
						break;
					/*journal 2 blog */
					case 'journal2/blog/post':
						$pid = isset($data['journal_blog_post_id']) ? $data['journal_blog_post_id'] : 0;
						$this->_get_jblog_posts($pid);
						unset($data['journal_blog_post_id']);
						$this->_infoString .= $this->jblog_post_identifier.$pid;
						$url .= $this->_get_jblog_key().'/';
						if(isset($this->_jblog_posts[$pid])){
							if(isset($data['journal_blog_category_id'])){
								$catid = (int)$data['journal_blog_category_id'];
								unset($data['journal_blog_category_id']);
							}else{
								$catid = $this->_jblog_posts[$pid]['category_id'];
							}
							$this->_get_jblog_post_cats($catid);
							$this->_infoString .= $this->jblog_post_cat_identifier.$catid;
							$url .= $this->_jblog_post_cats[$catid].'/';
						}
						$url .= $this->_jblog_posts[$pid]['name'];
						break;
					case 'journal2/blog':
						$data['journal_blog_category_id'] = isset($data['journal_blog_category_id']) ? $data['journal_blog_category_id'] : '0';
						$url .= '/'.$this->_get_jblog_key();
						if(isset($data['journal_blog_category_id'])){
							$catid = (int)$data['journal_blog_category_id'];
							unset($data['journal_blog_category_id']);
							$this->_get_jblog_post_cats($catid);
							$this->_infoString .= $this->jblog_post_cat_identifier.$catid;
							if($catid && $this->_jblog_post_cats[$catid])
								$url .= '/'.$this->_jblog_post_cats[$catid];
						}else{
							$url .= '/'.$data['route'];
						}
						break;
					/*end journal 2 blog */
					case 'common/home':
						$arr = array('vi', 'en');
						$url = str_replace($arr, '', $url);
						return $url;
						break;
					default:
						$url .= '/'.$data['route'];
						//$url .= '/'.$this->route_identifier.'/'.$data['route'];
						//return $link;
						break;
				}

				unset($data['route']);
				$query = '';
				if ($data) {
					foreach ($data as $key => $value)
						$query .= '&' . $key . '=' . $value;

					if ($query)
						$query = '?' . trim($query, '&');
				}
				//$url .= $this->_sep.$this->_infoString;
				if(!empty($this->_infoString))
					$url = '/'.trim($url,'/').$this->_sep.$this->_infoString;
				$url = str_replace('!', 'i', $url);
				$arr = array('(', ')', ' ( ', ' ) ', '.', ' ');
				$url = str_replace($arr, '', $url);
				$url = $this->make($url);
				$url = strtolower($url);
				return 	$url_data['scheme'].'://'.$url_data['host'].(isset($url_data['port']) ? ':'.$url_data['port'] : '').str_replace('/index.php', '', $url_data['path']).rtrim($url,'/').(rtrim($url,'/') == '' ? '' : $this->_url_ext).$query;
			}else{
				return $link;
			}
		}else{
			return $link;
		}
	}

	private function _get_products($id = 0){
		if($id && !isset($this->_products[$id])){
			$query = $this->db->query("
				SELECT p.product_id, pd.name, pc.category_id, p.manufacturer_id FROM " . DB_PREFIX . "product AS p
				LEFT JOIN " . DB_PREFIX . "product_description AS pd ON pd.product_id = p.product_id
				LEFT JOIN " . DB_PREFIX . "product_to_category AS pc ON pc.product_id = p.product_id
				WHERE p.product_id = ".$id." AND pd.language_id = ".(int)$this->config->get('config_language_id')." AND p.status = 1");
			foreach($query->rows as $prod)
				$this->_products[$prod['product_id']] = array(
					'name'=>$this->clean_name($prod['name']),
					'category_id'=>$prod['category_id'],
					'manufacturer_id'=>$prod['manufacturer_id'],
				);
			$this->_cache_rebuild();
		}
	}
	private function _get_categories($id = 0){

		if($id && !isset($this->_categories[$id])){
			$query = $this->db->query("
				SELECT c.category_id, c.parent_id, cd.name FROM " . DB_PREFIX . "category AS c
				LEFT JOIN " . DB_PREFIX . "category_description AS cd ON cd.category_id = c.category_id
				WHERE c.category_id = ".$id." AND cd.category_id = c.category_id AND cd.language_id = ".(int)$this->config->get('config_language_id')." AND c.status = 1");
			foreach($query->rows as $cat){
				$this->_categories[$cat['category_id']] = array(
					'name'=>$this->clean_name($cat['name']),
					'parent'=>$cat['parent_id']
				);
			}
			$this->_cache_rebuild();
		}
	}
	private function _traverse_categories($catId, $appendCatName = true){
		if(!in_array($catId,$this->_tmp_cat_path))
			$this->_tmp_cat_path[] = $catId;
		$this->_get_categories($catId);
		if(isset($this->_categories[$catId])){
			if($this->_categories[$catId]['parent'] == 0){
				$this->_infoString .= $this->category_identifier.implode($this->category_identifier,array_reverse($this->_tmp_cat_path));
				$this->_infoString = rtrim($this->_infoString, $this->category_identifier);
				$return = $appendCatName ? $this->_categories[$catId]['name'].'/' : '';
				$this->_tmp_cat_path = array();
			}else{
				$return = $this->_traverse_categories($this->_categories[$catId]['parent'], $appendCatName).($appendCatName ? $this->_categories[$catId]['name'].'/' : '');
			}
		}else{
			$return = '';
		}
		return $return;
	}
	private function _get_manufacturers($id = 0){
		if($id && !isset($this->_manufacturers[$id])){
			$query = $this->db->query("SELECT manufacturer_id, name FROM " . DB_PREFIX . "manufacturer WHERE manufacturer_id = ".$id);
			foreach($query->rows as $man)
				$this->_manufacturers[$man['manufacturer_id']] = $this->clean_name($man['name']);
			$this->_cache_rebuild();
		}
	}
	private function _get_infos($id = 0){
		if($id && !isset($this->_infos[$id])){
			$query = $this->db->query("SELECT i.information_id, id.title FROM " . DB_PREFIX . "information AS i LEFT JOIN " . DB_PREFIX . "information_description AS id ON id.information_id = i.information_id WHERE i.information_id = ".$id." AND id.information_id = i.information_id AND id.language_id = ".(int)$this->config->get('config_language_id')." AND i.status = 1");
			foreach($query->rows as $infos)
				$this->_infos[$infos['information_id']] = $this->clean_name($infos['title']);
			$this->_cache_rebuild();
		}
	}

	private function _get_jblog_key(){
		if(!isset($this->_jblog_key)){
			$query = $this->db->query("SELECT `value` FROM " . DB_PREFIX . "journal2_config WHERE `key`='blog_settings' AND `store_id` = ".$this->config->get('config_store_id')." AND `serialized` = 1");
			$data = json_decode($query->row['value']);
			$lang = (int)$this->config->get('config_language_id');
			$this->_jblog_key = empty($data->keyword->value->{$lang}) ? $this->clean_name($data->name->value->{$lang}) : $data->keyword->value->{$lang};
		}

		return $this->_jblog_key;
	}

	private function _get_jblog_posts($id = 0){
		if($id && !isset($this->_jblog_posts[$id])){
			$query = $this->db->query("
				SELECT p.post_id, pd.name, c.category_id
				FROM " . DB_PREFIX . "journal2_blog_post AS p
				LEFT JOIN " . DB_PREFIX . "journal2_blog_post_description AS pd ON p.post_id = pd.post_id
				LEFT JOIN " . DB_PREFIX . "journal2_blog_post_to_category AS c ON p.post_id = c.post_id
				WHERE p.post_id = ".$id." AND pd.language_id = ".(int)$this->config->get('config_language_id')." AND p.status = 1");
			foreach($query->rows as $post){
				$this->_jblog_posts[$post['post_id']] = array(
					'name'=>$this->clean_name($post['name']),
					'category_id'=>$post['category_id'],
				);
			}
			$this->_cache_rebuild();
		}
	}

	private function _get_jblog_post_cats($id = 0){
		if($id && !isset($this->_jblog_post_cats[$id])){
			$query = $this->db->query("
				SELECT c.category_id, cd.name
				FROM " . DB_PREFIX . "journal2_blog_category c
				LEFT JOIN " . DB_PREFIX . "journal2_blog_category_description cd
					ON c.category_id = cd.category_id
				WHERE c.category_id = ".$id.' AND cd.language_id='.(int)$this->config->get('config_language_id')." AND c.status = 1");
			foreach($query->rows as $jcat)
				$this->_jblog_post_cats[$jcat['category_id']] = $this->clean_name($jcat['name']);
			$this->_cache_rebuild();
		}
	}

	private function _getLanguages(){
		if(empty($this->_languages)){
			$this->_languages = array();
			$query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "language` WHERE status = '1'");
			foreach ($query->rows as $result) {
				$this->_languages[$result['code']] = $result;
			}
		}
	}

	private function _cache_rebuild(){
		$data = array(
			'products' => $this->_products,
			'categories' => $this->_categories,
			'manufacturers' => $this->_manufacturers,
			'infos' => $this->_infos,
			'jblog_posts' => $this->_jblog_posts,
			'jblog_post_cats' => $this->_jblog_post_cats
		);
		header('Content-Type: text/html; charset=utf-8');
		$json = serialize($data);
		file_put_contents($this->_cachefile, $json);
	}

	private function clean_name($name){
		$name = htmlspecialchars_decode($name);
		$bad_array = array("сква",
			" ","!","(",")", " ( ", " ) ",
			"À","à","Á","á","Â","â","Ã","ã","Ä","ä","Å","å","Ā","ā","Ă","ă","Ą","ą","Ǟ","ǟ","Ǻ","ǻ","Α","α","ả","ắ",
			"Æ", "æ", "Ǽ", "ǽ",
			"Ḃ","ḃ","Б","б",
			"Ć","ć","Ç","ç","Č","č","Ĉ","ĉ","Ċ","ċ","Ч","ч","Χ","χ",
			"Ḑ","ḑ","Ď","ď","Ḋ","ḋ","Đ","đ","Ð","ð","Д","д","Δ","δ",
			"DZ",  "Dz","dz", "DŽ", "Dž", "dž",
			"È","è","É","é","Ě","ě","Ê","ê","Ë","ë","Ē","ē","Ĕ","ĕ","Ę","ę","Ė","ė","Ʒ","ʒ","Ǯ","ǯ","Е","е","Э","э","Ε","ε","Ế","ế","ệ","Ề","ề",
			"Ḟ","ḟ","ƒ","Ф","ф","Φ","φ",
			"fi", "fl",
			"Ǵ","ǵ","Ģ","ģ","Ǧ","ǧ","Ĝ","ĝ","Ğ","ğ","Ġ","ġ","Ǥ","ǥ","Г","г","Γ","γ",
			"Ĥ","ĥ","Ħ","ħ","Ж","ж","Х","х",
			"Ì","ì","Í","í","Î","î","Ĩ","ĩ","Ï","ï","Ī","ī","Ĭ","ĭ","Į","į","İ","ı","И","и","Η","η","Ι","ι",
			"IJ", "ij",
			"Ĵ","ĵ",
			"Ḱ","ḱ","Ķ","ķ","Ǩ","ǩ","К","к","Κ","κ",
			"Ĺ","ĺ","Ļ","ļ","Ľ","ľ","Ŀ","ŀ","Ł","ł","Л","л","Λ","λ",
			"LJ", "Lj", "lj",
			"Ṁ","ṁ","М","м","Μ","μ",
			"Ń","ń","Ņ","ņ","Ň","ň","Ñ","ñ","ʼn","Ŋ","ŋ","Н","н","Ν","ν",
			"NJ", "Nj", "nj",
			"Ò","ò","Ó","ó","Ô","ô","Õ","õ","Ö","ö","Ō","ō","Ŏ","ŏ","Ø","ø","Ő","ő","Ǿ","ǿ","О","о","Ο","ο","Ω","ω",
			"Œ", "œ",
			"Ṗ","ṗ","П","п","Π","π",
			"Ŕ","ŕ","Ŗ","ŗ","Ř","ř","Р","р","Ρ","ρ","Ψ","ψ",
			"Ś","ś","Ş","ş","Š","š","Ŝ","ŝ","Ṡ","ṡ","ſ","ß","С","с","Ш","ш","Щ","щ","Σ","σ","ς",
			"Ţ","ţ","Ť","ť","Ṫ","ṫ","Ŧ","ŧ","Þ","þ","Т","т","Ц","ц","Θ","θ","Τ","τ",
			"Ù","ù","Ú","ú","Û","û","Ũ","ũ","Ü","ü","Ů","ů","Ū","ū","Ŭ","ŭ","Ų","ų","Ű","ű","У","у","ự",
			"В","в","Β","β",
			"Ẁ","ẁ","Ẃ","ẃ","Ŵ","ŵ","Ẅ","ẅ",
			"Ξ","ξ",
			"Ỳ","ỳ","Ý","ý","Ŷ","ŷ","Ÿ","ÿ","Й","й","Ы","ы","Ю","ю","Я","я","Υ","υ",
			"Ź","ź","Ž","ž","Ż","ż","З","з","Ζ","ζ",
			"Ь","ь",'Ъ',"ъ","^","&");
		$good_array= array("scow",
			"-","i","", "", "", "",
			"A","a","A","a","A","a","A","a","A","a","A","a","A","a","A","a","A","a","A","a","A","a","A","a","a","a",
			"AE","ae","AE","ae",
			"B","b","B","b",
			"C","c","C","c","C","c","C","c","C","c","CH","ch","CH","ch",
			"D","d","D","d","D","d","D","d","D","d","D","d","D","d",
			"DZ","Dz","dz","DZ","Dz","dz",
			"E","e","E","e","E","e","E","e","E","e","E","e","E","e","E","e","E","e","E","e","E","e","Ye","ye","E","e","E","e","E","e","e","E","e",
			"F","f","f","F","f","F","f",
			"fi","fl",
			"G","g","G","g","G","g","G","g","G","g","G","g","G","g","G","g","G","g",
			"H","h","H","h","ZH","zh","H","h",
			"I","i","I","i","I","i","I","i","I","i","I","i","I","i","I","i","I","i","I","i","I","i","I","i",
			"IJ","ij",
			"J","j",
			"K","k","K","k","K","k","K","k","K","k",
			"L","l","L","l","L","l","L","l","L","l","L","l","L","l",
			"LJ","Lj","lj",
			"M","m","M","m","M","m",
			"N","n","N","n","N","n","N","n","n","N","n","N","n","N","n",
			"NJ","Nj","nj",
			"O","o","O","o","O","o","O","o","O","o","O","o","O","o","O","o","O","o","O","o","O","o","O","o","O","o",
			"OE","oe",
			"P","p","P","p","P","p","PS","ps",
			"R","r","R","r","R","r","R","r","R","r",
			"S","s","S","s","S","s","S","s","S","s","s","ss","S","s","SH","sh","SHCH","shch","S","s","s",
			"T","t","T","t","T","t","T","t","T","t","T","t","TS","ts","TH","th","T","t",
			"U","u","U","u","U","u","U","u","U","u","U","u","U","u","U","u","U","u","U","u","U","u","u",
			"V","v","V","v",
			"W","w","W","w","W","w","W","w",
			"X","x",
			"Y","y","Y","y","Y","y","Y","y","Y","y","Y","y","YU","yu","YA","ya","Y","y",
			"Z","z","Z","z","Z","z","Z","z","Z","z",
			"'","'",'"','"',"","and");

		$name = str_replace($bad_array,$good_array,$name);
		unset($bad_array);
		unset($good_array);
		// Fail url . remove preg_replace
		//$name = preg_replace("/[^a-zA-Z0-9]/",$this->_sep,$name);

		while(strpos($name, str_repeat($this->_sep,2))){
			$name = str_replace(str_repeat($this->_sep,2),$this->_sep,$name);
		}

		return trim($name,$this->_sep);
	}


	public function index_standard() {
		// Add rewrite to url class
		if ($this->config->get('config_seo_url')) {
			$this->url->addRewrite($this);
		}

		// Decode URL
		if (isset($this->request->get['_route_'])) {
			$parts = explode('/', $this->request->get['_route_']);

			foreach ($parts as $part) {
				$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE keyword = '" . $this->db->escape($part) . "'");

				if ($query->num_rows) {
					$url = explode('=', $query->row['query']);

					if ($url[0] == 'product_id') {
						$this->request->get['product_id'] = $url[1];
					}

					if ($url[0] == 'category_id') {
						if (!isset($this->request->get['path'])) {
							$this->request->get['path'] = $url[1];
						} else {
							$this->request->get['path'] .= '_' . $url[1];
						}
					}

					if ($url[0] == 'manufacturer_id') {
						$this->request->get['manufacturer_id'] = $url[1];
					}

					if ($url[0] == 'information_id') {
						$this->request->get['information_id'] = $url[1];
					}
				} else {
					$this->request->get['route'] = implode('/',$parts);
					if (defined('VERSION') && version_compare(VERSION, '2.0.0.0') >= 0) {
						return new Action($this->request->get['route']);
					}
					else{
						return $this->forward($this->request->get['route']);
					}
					$this->request->get['route'] = 'error/not_found';
				}
			}

			if (isset($this->request->get['product_id'])) {
				$this->request->get['route'] = 'product/product';
			} elseif (isset($this->request->get['path'])) {
				$this->request->get['route'] = 'product/category';
			} elseif (isset($this->request->get['manufacturer_id'])) {
				$this->request->get['route'] = 'product/manufacturer/product';
			} elseif (isset($this->request->get['information_id'])) {
				$this->request->get['route'] = 'information/information';
			}

			if (isset($this->request->get['route'])) {
				if (defined('VERSION') && version_compare(VERSION, '2.0.0.0') >= 0) {
					return new Action($this->request->get['route']);
				}
				else{
					return $this->forward($this->request->get['route']);
				}
			}
		}
	}

	public function rewrite_standard($link) {
		if ($this->config->get('config_seo_url')) {
			$url_data = parse_url(str_replace('&', '&', $link));
			if(!isset($url_data['query']))return $link;

			$url = '';

			$data = array();

			parse_str($url_data['query'], $data);

			foreach ($data as $key => $value) {
				if (isset($data['route'])) {
					if (($data['route'] == 'product/product' && $key == 'product_id') || (($data['route'] == 'product/manufacturer/product' || $data['route'] == 'product/product') && $key == 'manufacturer_id') || ($data['route'] == 'information/information' && $key == 'information_id')) {
						$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = '" . $this->db->escape($key . '=' . (int)$value) . "'");

						if ($query->num_rows) {
							$url .= '/' . $query->row['keyword'];

							unset($data[$key]);
						}
					} elseif ($key == 'path') {
						$categories = explode('_', $value);

						foreach ($categories as $category) {
							$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = 'category_id=" . (int)$category . "'");

							if ($query->num_rows) {
								$url .= '/' . $query->row['keyword'];
							}
						}

						unset($data[$key]);
					}
				}
			}

			if ($url) {
				unset($data['route']);

				$query = '';

				if ($data) {
					foreach ($data as $key => $value) {
						$query .= '&' . $key . '=' . $value;
					}

					if ($query) {
						$query = '?' . trim($query, '&');
					}
				}
				return $url_data['scheme'] . '://' . $url_data['host'] . (isset($url_data['port']) ? ':' . $url_data['port'] : '') . str_replace('/index.php', '', $url_data['path']) . $url . $query;
			} else {
				return $link;
			}
		} else {
			return $link;
		}
	}
	private function make($str){
		if(!$str) return false;
		$unicode = array(
			'a'=>array('á','à','ả','ã','ạ','ă','ắ','ặ','ằ','ẳ','ẵ','â','ấ','ầ','ẩ','ẫ','ậ'),
			'A'=>array('Á','À','Ả','Ã','Ạ','Ă','Ắ','Ặ','Ằ','Ẳ','Ẵ','Â','Ấ','Ầ','Ẩ','Ẫ','Ậ'),
			'd'=>array('đ'),
			'D'=>array('Đ'),
			'e'=>array('é','è','ẻ','ẽ','ẹ','ê','ế','ề','ể','ễ','ệ'),
			'E'=>array('É','È','Ẻ','Ẽ','Ẹ','Ê','Ế','Ề','Ể','Ễ','Ệ'),
			'i'=>array('í','ì','ỉ','ĩ','ị'),
			'I'=>array('Í','Ì','Ỉ','Ĩ','Ị'),
			'o'=>array('ó','ò','ỏ','õ','ọ','ô','ố','ồ','ổ','ỗ','ộ','ơ','ớ','ờ','ở','ỡ','ợ'),
			'0'=>array('Ó','Ò','Ỏ','Õ','Ọ','Ô','Ố','Ồ','Ổ','Ỗ','Ộ','Ơ','Ớ','Ờ','Ở','Ỡ','Ợ'),
			'u'=>array('ú','ù','ủ','ũ','ụ','ư','ứ','ừ','ử','ữ','ự'),
			'U'=>array('Ú','Ù','Ủ','Ũ','Ụ','Ư','Ứ','Ừ','Ử','Ữ','Ự'),
			'y'=>array('ý','ỳ','ỷ','ỹ','ỵ'),
			'Y'=>array('Ý','Ỳ','Ỷ','Ỹ','Ỵ'),
			'-'=>array('"','.',"'",'"'),
			'-'=>array('&', ' & ',  '%', '+', '*', '/', '\\', '?', ';', ',', '|', '_', '^', '$', '@', '#', '(', ')', '!'),
			'-'=>array('?')
		);

		foreach($unicode as $nonUnicode=>$uni){
			foreach($uni as $value)
				$str = str_replace($value,$nonUnicode,$str);
		}
		$str = str_replace('!', 'i', $str);
		$str=trim(strtolower($str));
		$str=rtrim($str,"-");
		return $str;
	}
}
?>

Gostaria de saber se daria pra no caso das categorias, em vez de gerar como /nome-categoria.html
gerar apenas como diretorio, /nome-categoria/

Este modulo é prático, já que não precisa instalar nada, e é bem suave.
Quem quiser ver direto no site opencart segue:
http://www.opencart.com/index.php?route ... load_id=41

Agradeço a todos!!

Re: Automatic seo url remover identificador das urls

Enviado: 19 Fev 2016, 10:10
por valdeir2000
Para remover os números:
1. Procure e remova os códigos abaixo
Código: Selecionar todos
$this->_infoString .= $this->product_identifier.$pid;

$this->_infoString .= $this->manufacturer_identifier.$data['manufacturer_id'];

$this->_infoString .= $this->manufacturer_identifier.$data['manufacturer_id'];

$this->_infoString .= $this->info_identifier.$data['information_id'];

$this->_infoString .= $this->jblog_post_identifier.$pid;

$this->_infoString .= $this->jblog_post_cat_identifier.$catid;

$this->_infoString .= $this->jblog_post_cat_identifier.$catid;
Para remover o sufixo:
1. Substitua o código
Código: Selecionar todos
var $_url_ext = '.html'; // .html, .php etc.
por
Código: Selecionar todos
var $_url_ext = '';
Não sei se vai funcionar. Espero que sim. :D

Re: Automatic seo url remover identificador das urls

Enviado: 19 Fev 2016, 11:26
por ronan
Super Valdeir!!!
cara, acho que me expressei mal, o que quero é tirar o c32p32 do fim da ulr, ficando somente nome-do-produto.html e no caso de categorias, ou manter os nomes que ja tenho no opencart, nas categorias eu ja uso seo url que cadastrei manualmente, ou então fazer esse código mostrar no caso de categoria sem o .html no final ficando assim: /categoria-de-produtos/ sem o c43 no nome da categoria sabe?

No caso dos produtos sem as tanqueiras também tipo c32p233 ficando somente nome-do-produto.html

Será que rola?
Abração

Re: Automatic seo url remover identificador das urls

Enviado: 19 Fev 2016, 11:30
por ronan
No mais, aproveitando o que acha desse código? para SEO vale a pena?

Se não qual você indica?

[]s

Re: Automatic seo url remover identificador das urls

Enviado: 19 Fev 2016, 11:57
por ronan
Super Valdeir, não funcionou ;-(

Re: Automatic seo url remover identificador das urls

Enviado: 19 Fev 2016, 15:08
por valdeir2000
ronan escreveu:Super Valdeir!!!
cara, acho que me expressei mal, o que quero é tirar o c32p32 do fim da ulr, ficando somente nome-do-produto.html e no caso de categorias, ou manter os nomes que ja tenho no opencart, nas categorias eu ja uso seo url que cadastrei manualmente, ou então fazer esse código mostrar no caso de categoria sem o .html no final ficando assim: /categoria-de-produtos/ sem o c43 no nome da categoria sabe?

No caso dos produtos sem as tanqueiras também tipo c32p233 ficando somente nome-do-produto.html

Será que rola?
Abração

Eu entendi e é exatamente isso que a modificação faz. Esqueci de comentar outras duas linhas para remover
Código: Selecionar todos
$this->_infoString .= $this->category_identifier.implode($this->category_identifier,array_reverse($this->_tmp_cat_path));

$this->_infoString = rtrim($this->_infoString, $this->category_identifier);

Re: Automatic seo url remover identificador das urls

Enviado: 19 Fev 2016, 23:11
por ronan
ahahah boa cara, agora deu certo porém as urls estão sendo geradas com falta de uma / ficando

www.loja.com.brcategoria/produto.html

não ta aparecendo a / depois do dominio

O que pode ser?

Obrigado mesmo cara

Re: Automatic seo url remover identificador das urls

Enviado: 20 Fev 2016, 02:32
por tubacana
Esse modulo não vai perder rangue amento de pagina no Google.

Re: Automatic seo url remover identificador das urls

Enviado: 20 Fev 2016, 06:46
por ronan
tubacana, na realidade o módulo serve pra aumentar esse rank hehehe é um módulo SEO url, pra corrigir algumas coisas

Re: Automatic seo url remover identificador das urls

Enviado: 20 Fev 2016, 11:35
por valdeir2000
ronan escreveu:ahahah boa cara, agora deu certo porém as urls estão sendo geradas com falta de uma / ficando

http://www.loja.com.brcategoria/produto.html

não ta aparecendo a / depois do dominio

O que pode ser?

Obrigado mesmo cara
Substitua return $str; por return "/" . $str;