User Tools

Site Tools


tutorials:zencartmods:nice_urls.html

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

tutorials:zencartmods:nice_urls.html [2011/10/12 16:35]
daigo
tutorials:zencartmods:nice_urls.html [2016/01/28 18:05]
Line 1: Line 1:
-{{:​tutorials:​zencartmods:​urls.png?​|}} 
  
-This mod will re-write your urls to look nice and pretty! There'​s several plugins that SEO your urls for you like [[http://​www.zen-cart.com/​index.php?​main_page=product_contrib_info&​products_id=1013|this one]] but they all seemed pretty complicated so we wrote our own. 
- 
- 
-This mod will change some core code and can potentially break a lot of things. Do not use this mod if: 
- 
-  * you are already using an SEO mod 
-  * you cannot or are uncomfortable editing your .htaccess setup 
-  * you are not forcing cookies (if "Force Cookies"​ is turned off, zencart will put the session id as a GET variable in the url - shortening this is not advised) 
- 
- 
-==== includes/​functions/​html_output.php ==== 
- 
-Find line 16: 
-<code php> 
-function zen_href_link($page = '',​ $parameters = '',​ $connection = '​NONSSL',​ $add_session_id = true, $search_engine_safe = true, $static = false, $use_dir_ws_catalog = true) { 
-</​code>​ 
-and replace with  
-<code php> 
-function zen_href_link($page = '',​ $parameters = '',​ $connection = '​NONSSL',​ $add_session_id = true, $search_engine_safe = true, $static = false, $use_dir_ws_catalog = true, $try_short_urls = true) { 
-</​code>​ 
- 
-Tehn replace this code block (ln 43): 
-<code php> 
-    if (!$static) { 
-      if (zen_not_null($parameters)) { 
-        $link .= '​index.php?​main_page='​. $page . "&"​ . zen_output_string($parameters);​ 
-      } else { 
-        $link .= '​index.php?​main_page='​ . $page; 
-      } 
-    } else { 
-      if (zen_not_null($parameters)) { 
-        $link .= $page . "?"​ . zen_output_string($parameters);​ 
-      } else { 
-        $link .= $page; 
-      } 
-    } 
-</​code>​ 
- 
-with  
- 
-<code php> 
-    $short_url_failed = true; 
-    if($try_short_urls == true && $page == '​product_info'​) 
-      { 
-        $sparam = explode('&',​ $parameters);​ 
-        $products_id_string = '';​ 
-        foreach($sparam as $full_parameter) 
-          { 
-            if( strstr($full_parameter,​ '​products_id='​) !== FALSE) 
- $products_id_string = str_replace('​products_id=',​ '',​ $full_parameter);​ 
-          } 
-        if( $products_id_string != ''​) 
-          { 
-            $link = '​products/'​ . $products_id_string;​ 
-            $short_url_failed = false; 
-          } 
-      } 
-    elseif($try_short_urls == true && $page == '​index'​) 
-      { 
-        $sparam = explode('&',​ $parameters);​ 
-        $cat_id_string = '';​ 
-        foreach($sparam as $full_parameter) 
-          { 
-            if( strstr($full_parameter,​ '​cPath'​) !== FALSE) 
-              $cat_id_string = str_replace('​cPath=',​ '',​ $full_parameter);​ 
-          } 
-        if($cat_id_string != ''​) 
-          { 
-            $link = '​category/'​ . $cat_id_string;​ 
-            $short_url_failed = false; 
-          } 
-      } 
-    elseif($try_short_urls == true && $page != ''​ && ($parameters == ''​)) 
-      { 
- $page = str_replace('​index.php?​main_page=',​ ''​ , $page); 
-        $link = str_replace('​products_',​ '',​ $page) . '/';​ 
-        $short_url_failed = false; 
-      } 
-  
-    if($short_url_failed){ 
-      if (!$static) { 
-        if (zen_not_null($parameters)) { 
-          $link .= '​index.php?​main_page='​. $page . "&"​ . zen_output_string($parameters);​ 
-        } else { 
-          $link .= '​index.php?​main_page='​ . $page; 
-        } 
-      } else { 
-        if (zen_not_null($parameters)) { 
-          $link .= $page . "?"​ . zen_output_string($parameters);​ 
-        } else { 
-          $link .= $page; 
-        } 
-      } 
-    } 
-</​code>​ 
- 
-This will make the ubiquitous **zen_href_link()** function try to generate a good-looking url. If it fails, it will fall back on the old type. 
- 
-This will change any links that are generated by this function, but you should go through your template files and make sure that there aren't hard-coded links to the old type of address also.  
- 
-==== .htaccess ==== 
- 
-Before you begin, always make a backup of your .htaccess file (we're going to be editing the one i your root html directory). 
- 
-<​code>​ 
-#redirect old product urls 
-RewriteCond %{QUERY_STRING} ^main_page=product_info&​(cPath=[0-9]+(_[0-9]+)?&​)?​products_id=([0-9]+)$ 
-RewriteRule ^index.php$ /​products/​%3?​ [R=301] 
- 
-#redirect old category urls 
-RewriteCond %{QUERY_STRING} ^main_page=index&​cPath=([0-9]+)$ 
-RewriteRule ^index.php$ /​category/​%1?​ [R=301] 
- 
- 
-#rewrite back to the old page 
-RewriteRule ^product[s]?/​([0-9]+) index.php?​hidden=yes&​main_page=product_info&​products_id=$1 [QSA,L] 
-RewriteRule ^(category|categories)/​([0-9_]+) index.php?​hidden=yes&​main_page=index&​cPath=$2 [QSA,L] 
-</​code>​ 
- 
-The first two blocks of this code redirects from the old, ugly type to the new, short type. The **[R=301]** flag will redirect the client browser, so the url will look nice in their address bar even if they somehow click on an ugly url. 
- 
-The last two lines redirect BACK from the nice-looking url to the ugly one, so that zencart will parse it correctly and output the correct page. As you could probably tell, this is very fragile and should cause an infinite loop of redirecting - make sure not to forget the **[L]** flag on the last two lines, it will make sure that it's the last command that is processed. 
- 
-If you'd like to change your define pages to have nice urls as well, you can add 
- 
-<code php> 
-RewriteRule ^MY_DEFINE_PAGE[/​]?​$ \?​main_page=MY_DEFINE_PAGE 
-</​code>​ 
- 
-for each one, replacing MY_DEFINE_PAGE with the name of your define page.  
/home/ladyada/public_html/wiki/data/pages/tutorials/zencartmods/nice_urls.html.txt · Last modified: 2016/01/28 18:05 (external edit)