[1.5] Tạo link thân thiện cho virtuemart với Virtuemart SEF

Thảo luận trong 'Tối ưu công cụ tìm kiếm' bắt đầu bởi VJL, 20/2/12.

  1. VJL

    VJL Be like no others ... Staff Member

    Bài viết:
    501
    Likes :
    303
    Giới thiệu: tạo đường link thân thiện trong Virtuemart, giúp SEO tốt hơn
    Tác giả: http://www.daycounts.com
    Hỗ trợ: Joomla 1.5
    Đây là bản miễn phí xong cũng phần nào đáp ứng được nhu cầu cơ bản.
    Nếu bạn có nhu cầu cao hơn chúng tôi khuyên bạn dùng bản Virtuemart SEF PRO hiện tại có giá 45$
    Chi tiết bản Pro: http://www.daycounts.com/en/shop/virtuemart/search-engine-friendly-urls-for-virtuemart-pro

    Thông tin thêm bản Virtuemart SEF
     

    Các file đính kèm:

  2. khanh_pro

    khanh_pro Rất tích cực

    Bài viết:
    180
    Likes :
    15
    Com này chỉ cần intall vào là tự động sửa link hả bạn? có cần tùy chỉnh gì thêm cho các phần khác ko? Thanks!
     
  3. ngvduy

    ngvduy Mới tham gia

    Bài viết:
    6
    Likes :
    2
    Joomla 2.5.x + Virtuemart 2.x.x đã sử dụng file Router tạo SEF url RẤT NGHON
     
  4. Nguyễn Sơn Ca

    Nguyễn Sơn Ca Lão già làng. Staff Member

    Bài viết:
    538
    Likes :
    296
    Bản Virtue Mart 1.1.9 là ổn nhất và được hỗ trợ nhiều nhất trong các phiên bản hiện tại. Bản 2.x đang trong giai đoạn được phát triển hoàn thiện thôi. :D
     
  5. huagiaco2012

    huagiaco2012 Mới tham gia

    Bài viết:
    1
    Likes :
    0
    trang web của mình là www.kimthusetlpi.com. có cách nào để phục hồi lại site nếu lỡ cài không thành công không?
     
  6. dinhchi

    dinhchi Administrator Staff Member

    Bài viết:
    1,358
    Likes :
    1,022
    bạn quản trị web mà chưa nghe nói đến công việc backup sao, đơn giản là bạn down source về, export cái data rồi cất thật kỹ, lỗi thì lôi ra phục hổi lại :D
     
  7. nguyen thanhtung

    nguyen thanhtung Mới tham gia

    Bài viết:
    17
    Likes :
    0
    cho mình xin link download đi bạn
    thanks
     
  8. tamkim2011

    tamkim2011 Mới tham gia

    Bài viết:
    23
    Likes :
    0
    mình đã bật chức năng SEO Settings trong joomla 1.5 nhưng nó chỉ được ở các mục tin tức thôi còn khi vào bên trong mục sản phẩm thì bị lỗi hiển thị. tức là tất cả các sản phẩm đang hiển thị khi click vào bất kỳ 1 sản phẩm nào cũng đều chỉ gọi ra 1 sản phẩm đứng ở vị trí đầu tiên chứ không ra đúng với nội dung của sẩn phẩm mình cần xem
     
  9. Nguyễn Sơn Ca

    Nguyễn Sơn Ca Lão già làng. Staff Member

    Bài viết:
    538
    Likes :
    296
    Để tối ưu link cho Com Virtuemart thì nên cài thêm Com SHS404SEF, trong đó có cài đặt SEO link cho từng Component.
     
    hangchuan102 thích bài này.
  10. Hoàng Sơn

    Hoàng Sơn Mới tham gia

    Bài viết:
    2
    Likes :
    0
    Các pro ơi cho mình nhờ chút. Mình cài Atio Joomsef và cài thêm com joomseo cho vituremart ở trên nhưng vẫn báo lỗi. Nó chỉ hiện phần component lên thui "http://component/virtuemart/detail/16/flypage|ask/66?sef=hcfp". Nọ chị bị thế khi vào chi tiết của sản phầm. Các Pro xem chỉ giúp nhé. Trang mình bị lỗi:"http:manhremhaiphong.com"
     
  11. nguyen the cong

    nguyen the cong Mới tham gia

    Bài viết:
    2
    Likes :
    0
    Các bác cho em hỏi cài vào Virtuemart ở đoạn nào ah !
    Thanks
     
  12. truonglychoi

    truonglychoi Rất nhiệt tình

    Bài viết:
    241
    Likes :
    85
    Cho joomla 1,5 hả bạn
     
  13. truonglychoi

    truonglychoi Rất nhiệt tình

    Bài viết:
    241
    Likes :
    85
    Code này dùng cho virtuemart joomla 1.5 Bạn tạo file php có tên router.php và coppy code bên dưới và lưu lại.
    Mã:
    <?php
    /**
    * @package		Joomla
    * @subpackage	VirtueMart 1.1.4 Router for Joomla! 1.5.14
    * @copyright	2010, Copyright vian. All rights reserved.
    * @license		GNU/GPL.
    * @author		L. K. Lalitesh
    * @ Website		www.vian.vn
    * @ Email		[email protected]
    * @ Date		25/09/2012
    * @ Version		1.1.4
     
    ## Bugs fixed in Version 1.1.4
    >> If SSL is enabled, checkout pages have https
    >>
     
    */
     
    defined( '_JEXEC' ) or die( 'Restricted access' );
     
    define('PAGE_SHOP_BROWSE','category');
    define('PAGE_SHOP_FEED','feed');
    define('PAGE_PRODUCT_DETAILS','details');
    define('PAGE_PRODUCT_ENQUIRY','enquiry');
    define('PAGE_CHECKOUT_INDEX','checkout');
    define('PAGE_ADVANCE_SEARCH','search');
     
    function virtuemartBuildRoute(&$query)
    {
     
    	$page = '';
    	$segments = array();
     
    	if(isset($query['page'])){
    		$page = $query['page'];
    		unset($query['page']);
    	}
     
    	if(isset($query['flypage'])){
    		unset($query['flypage']);
    	}
     
     
     
    	switch ($page) {
    	 
    		/* Case for shop browse/catgory page */
    		case 'shop.browse';
    					 
    			if(isset($query['category_id'])){
    				$segments[] = PAGE_SHOP_BROWSE;
    				$segments[] = $query['category_id'];			 
    				$category_alias = getCategoryTitle($query['category_id']);
    				$segments[] = $category_alias;	 
    				unset($query['category_id']);
    		 
    			}else{
    				$segments[] = "products";
    				unset($query['category']); 
    			}
     
    		 
     
    		break;
    		/*End shop browse/catgory page*/
     
     
    		/* Case for shop rss feed page */
    		case 'shop.feed';
    		 
    			$segments[] = PAGE_SHOP_FEED;
    		 
    			if(isset($query['category_id'])){
    				$segments[] = $query['category_id'];
    				$category_alias = getCategoryTitle($query['category_id']);
    				$segments[] = $category_alias;	 
    				unset($query['category_id']);
    			}		 
    		break;
    		/*End shop browse/catgory page*/
     
     
    		/* Case for product details page */
    		case 'shop.product_details';		 
    			$segments[] = PAGE_PRODUCT_DETAILS;		 
    			$product_id_exists = false;
    			if(isset($query['product_id']))	{
    				$segments[] = $query['product_id'];
    				$product_id_exists = true;
    				$pid = $query['product_id'];
    				unset($query['product_id']);
    			}
     
    			if(isset($query['category_id'])){
    				$segments[] = $query['category_id'];
    				$category_alias = getCategoryTitle($query['category_id']);
    				$segments[] = $category_alias;	 
    				unset($query['category_id']);
    			}
     
     
    			if($product_id_exists)	{
    				$product_alias = getProductTitle($pid);
    				$segments[] = $product_alias;	 
    			}
     
    		break;
    		/*End shop browse/catgory page*/
     
    		 
    		/*Case for ASK A QUESTION ABOUT THIS PRODUCT PAGE*/
    		case 'shop.ask';
    			$segments[] =PAGE_PRODUCT_ENQUIRY; 
    		 
    			if(isset($query['category_id']))	{
    				$segments[] = $query['category_id'];
    				unset($query['category_id']);
    			}
     
    			if(isset($query['product_id']))	{
    				$segments[] = $query['product_id'];
    				$product_id_exists = true;
    				$pid = $query['product_id'];
    				unset($query['product_id']);
    			}
     
    			if($product_id_exists)	{
    				$product_alias = getProductTitle($pid);
    				$segments[] = $product_alias;	 
    			}
     
    		break;
    		/*End*/
    	 
     
    		/*
    		Checkout Index page
    		*/	 
    		case 'checkout.index';
    		$segments[] = PAGE_CHECKOUT_INDEX;
     
    	 
    		if(isset($query['ssl_redirect']))	{
    			$segments[] = "ssl_redirect";
    			unset($query['ssl_redirect']);
    		}
     
    		if(isset($query['redirected']))	{
    			$segments[] = "redirected";
    			unset($query['redirected']);
    		}
     
     
    		break;
    		/** End of checkout index page */
     
     
    		case 'account.billing';
    			$segments[] ="account-billing";
    			if(isset($query['next_page']) )	{
    				$segments[] = "checkout";
    				unset($query['next_page']);			 
    			}
    		break;
     
     
    		case 'account.shipto';
    			$segments[] ="account-shipto";
    			if(isset($query['next_page']) )	{
    				$segments[] = "checkout";
    				unset($query['next_page']);			 
    			}
    		break;
     
     
     
    		case 'account.shipping';
    			$segments[] ="account-shipping";
    			if(isset($query['next_page']) )	{
    				$segments[] = "checkout";
    				unset($query['next_page']);			 
    			}
    		break;
     
     
     
    		case 'shop.registration';
    			$segments[] ="user-registration";
    		break;
     
     
    		case 'shop.recommend';
    			$segments[] ="recommend";
     
    			if(isset($query['tmpl']) )	{
    				$segments[] = $query['tmpl'];
    				unset($query['tmpl']);			 
    			}
     
    			if(isset($query['pop']) )	{
    				$segments[] = $query['pop'];
    				unset($query['pop']);			 
    			}
     
    			if(isset($query['product_id']) ){
    				$segments[] = $query['product_id'];
    				$product_alias = getProductTitle($query['product_id']);
    				$segments[] = $product_alias;	 
    				unset($query['product_id']);			 
    			}
     
    		break;
     
     
    		case 'shop.tos';
    			$segments[] ="terms-of-service";
    		break;
     
    		case 'shop.cart';
    			$segments[] ="cart";
    		break;
     
    		case 'account.index';
    			$segments[] ="account";
    		break;
     
     
     
    		case 'account.order_details';
    			$segments[] ="order-details";
    			if(isset($query['order_id']))	{
    				$segments[] = $query['order_id'];
    				unset($query['order_id']);
    			}
    		break;
     
     
    		case 'shop.waiting_list';
    			$segments[] ="notify";
    			if(isset($query['product_id']))	{
    				$segments[] = $query['product_id'];
    				$product_id_exists = true;
    				$pid = $query['product_id'];
    				unset($query['product_id']);
    			}
     
    			if($product_id_exists)	{
    				$product_alias = getProductTitle($pid);
    				$segments[] = $product_alias; 
    			}
    		break;
     
    		case 'shop.search';
    			$segments[] =PAGE_ADVANCE_SEARCH;		 
    		break;
     
    		case 'store.index';
    			$segments[] = 'administration';		 
    		break;
     
    	}
     
    	return $segments;
    }
    /*End of the function*/
     
     
     
    function virtuemartParseRoute($segments)
    {
     
    	$vars = array();
     
    	$firstSegment = $segments[0];
    	switch($firstSegment){
    	 
    		case PAGE_SHOP_BROWSE:
    			$vars['page'] = "shop.browse";
    			if(isset($segments[1])){
    				$vars['category_id'] = $segments[1];
    			}
    		break;
     
    		/*This is for all products page*/
    		case 'products':
    			$vars['page'] = "shop.browse";
    			$vars['category'] = ""; 
    		break;
     
    	 
    		case PAGE_SHOP_FEED:
    			$vars['page'] = "shop.feed";
    			if(isset($segments[1])){
    				$vars['category_id'] = $segments[1];
    			}
    		 
    		break;
     
    		case PAGE_PRODUCT_DETAILS:
    			$vars['page'] = "shop.product_details";
    		 
    			if(isset($segments[1])){
    				$vars['product_id'] = $segments[1];
    			}
     
    			if(isset($segments[2])){
    				$vars['category_id'] = $segments[2];
    			}
    		 
    		 
    		break;
     
    		case PAGE_PRODUCT_ENQUIRY:
    			$vars['page'] = "shop.ask";
    			$vars['category_id'] = $segments[1];
    			$vars['product_id'] = $segments[2];
    		break;
     
    		case PAGE_CHECKOUT_INDEX:
    			$vars['page'] = "checkout.index";
    	 
    			if(isset($segments[1]) && ($segments[1]=="ssl_redirect")){
    				$vars['ssl_redirect'] = 1;
    			 
    			}
     
    			if(isset($segments[2]) && ($segments[2]=="redirected")){
    				$vars['redirected'] = 1;
    			}
    		break;
     
    		case 'account:billing':
    			$vars['page'] = "account.billing";
    			if(isset($segments[1])){
    				$vars['next_page'] = "checkout.index";
    			}
    		break;
     
    		case 'account:shipto':
    			$vars['page'] = "account.shipto";
    			if($segments[1]){
    				$vars['next_page'] = "checkout.index";
    			}
    		break;
     
    		case 'account:shipping':
    			$vars['page'] = "account.shipping";
    			if($segments[1]){
    				$vars['next_page'] = "checkout.index";
    			}
    		break;
     
     
     
     
    		case 'recommend';
    			$vars['page'] = "shop.recommend";
    			$vars['pop'] = 1;
    			$vars['product_id'] = $segments[3];
    			$vars['tmpl']= "component";
    		break;
     
     
    		case 'user:registration';
    			$vars['page'] = "shop.registration";
    		break;
     
     
     
    		case 'account':
    			$vars['page'] = "account.index";
    		break;
     
     
    		case 'cart':
    			$vars['page'] = "shop.cart";
    		break;
     
     
    		case 'order:details':
    			$vars['page'] = "account.order_details";
    			$vars['order_id'] = $segments[1];			 
    		break;
     
    		case 'temrs:of:service':
    			$vars['page'] = "shop.tos";			 
    		break;
     
     
     
    		case 'notify':
    			$vars['page'] = "shop.waiting_list";
    			$vars['product_id'] = $segments[1];			 
    		break;
     
    		case PAGE_ADVANCE_SEARCH:
    			$vars['page'] = "shop.search";
    				 
    		break;
     
    		case 'administration':
    			$vars['page'] = "store.index";
    			$vars['pshop_mode'] = "admin";
    				 
    		break;
     
    	}
    	return $vars;
    }
     
     
    /*
    This function returns category/subcatgory alias string
    */
     
    function getCategoryTitle($id){
    	$db			= & JFactory::getDBO();
     
    	$query = "
    			SELECT t1.category_child_id AS lev1, t2.category_child_id as lev2, t3.category_child_id as lev3
    			FROM  #__vm_category_xref AS t1
    			LEFT JOIN #__vm_category_xref AS t2 ON t2.category_child_id = t1.category_parent_id
    			LEFT JOIN #__vm_category_xref AS t3 ON t3.category_child_id = t2.category_parent_id
    			WHERE t1.category_child_id= ".$id;
     
    	$db->setQuery($query);
    	$nestedCategoryIds = $db->loadObject();
    	if($nestedCategoryIds=="")
    		return;
     
    	$catIdsArr = array();
     
    	if($nestedCategoryIds->lev3){
    		$catIdsArr[] = $nestedCategoryIds->lev3;
    	}
     
    	if($nestedCategoryIds->lev2){
    		$catIdsArr[] = $nestedCategoryIds->lev2;
    	}
     
    	if($nestedCategoryIds->lev1){
    		$catIdsArr[] = $nestedCategoryIds->lev1;
    	}
     
    	$catIdsStr = implode( ',', $catIdsArr );
     
    	$query = "SELECT GROUP_CONCAT( category_name
    			SEPARATOR  '/' )
    			FROM #__vm_category
    			WHERE category_id IN (".$catIdsStr.")";
     
     
     
    	$db->setQuery($query);
    	$category_name = $db->loadResult();
    	$category_alias = strtolower($category_name);
     
    	//Remove following characters
    	$special_chars = array('!','@','#','$','%','*','(',')');
    	foreach($special_chars as $char){
    		$category_alias = str_replace($char,'', $category_alias);
    	}
     
    	$category_alias = str_replace(' ','-', $category_alias);
    	$category_alias = str_replace('  ','-', $category_alias);
    	return $category_alias;
    }
     
     
     
    function getProductTitle($id){
    	$db			= & JFactory::getDBO();
    	// gets category name
    	$query = 'SELECT product_name FROM #__vm_product  ' .
    	' WHERE product_id = ' . (int) $id;
     
    	$db->setQuery($query);
    	// gets category name of item
    	$product_name = $db->loadResult();
    	$product_name = strtolower($product_name);
     
    	//Remove following characters
    	$special_chars = array('!','@','#','$','%','*','(',')');
    	foreach($special_chars as $char){
    		$product_name = str_replace($char,'', $product_name);
    	}
     
    	$product_name = str_replace(' ','-', $product_name);
    	$product_name = str_replace('  ','-', $product_name);
    	return $product_name;
    }
     
    /*
    function getmanufacturerName($id){
    	$db			= & JFactory::getDBO();
    	// gets category name
    	$query = 'SELECT mf_name FROM #__vm_manufacturer  ' .
    	' WHERE manufacturer_id = ' . (int) $id;
    	echo $query;die();
    	$db->setQuery($query);
    	// gets category name of item
    	$mf_name = $db->loadResult();
    	$mf_name = strtolower($product_name);
     
    	//Remove following characters
    	$special_chars = array('!','@','#','$','%','*','(',')');
    	foreach($special_chars as $char){
    		$mf_name = str_replace($char,'', $mf_name);
    	}
     
    	$mf_name = str_replace(' ','-', $mf_name);
    	$mf_name = str_replace('  ','-', $mf_name);
    	return $mf_name;
    }
    */
    ?>
    Bạn upload file lên components/com_virtuemart/
    load lại web và xem thành quả. chúc các bạn thành công.
    nếu có lỗi gì vui lòng pm mình
     
    johnsmeeth0210 thích bài này.
  14. nguyen the cong

    nguyen the cong Mới tham gia

    Bài viết:
    2
    Likes :
    0
    Cảm ơn bác truonglychoi ah, để em thử xem thành quả , thanks
     
  15. truonglychoi

    truonglychoi Rất nhiệt tình

    Bài viết:
    241
    Likes :
    85
    Truoc đay mình cũng làm cho trang http://dokieu.com dùng virtuemart joomla 1.5 chạy rất ok đó. không biết phiên bản của bạn có xung đột gì không ngưng van chúc bạn thành công
     
  16. hanghieunara

    hanghieunara Mới tham gia

    Bài viết:
    2
    Likes :
    0
    link down bị die rồi bạn ơi, fix lại giùm mình đi, tks
     
  17. bunbo195

    bunbo195 Rất nhiệt tình

    Bài viết:
    349
    Likes :
    94
    fix lai link bác ới ^^
     
  18. hieu008

    hieu008 Mới tham gia

    Bài viết:
    3
    Likes :
    1
    Được đó hàng họ dao này ế quá bắc nào ủng họ em nhé số điện của em là 0942025588 em cán ơn nhiều nếu có gì hãy alo em nhân liền .khổ quá các bắc ạ.
     
  19. lythienlongcm87

    lythienlongcm87 Mới tham gia

    Bài viết:
    6
    Likes :
    0
  20. johnsmeeth0210

    johnsmeeth0210 Mới tham gia

    Bài viết:
    5
    Likes :
    0
    Rất hay cám ơn bạn. Cho mình hỏi thêm chút nhé, trong cái url khi truy cập bất kỳ product nào luôn có text 'virtuemart', Làm sao xóa cái text này hả bạn và có thể làm ngắn bớt phân cấp trong url không?
     
comments powered by Disqus

Chia sẻ trang này