2013-01-02 63 views
0

任何人都可以幫我調整我的opencart seo_url文件,以便我的博客條目從url_alias表中獲取seo關鍵字,並顯示爲mypage.co.uk/blog/post1而不是它現在正在做什麼是mypage.co.uk/blog?news_id=9opencart seo調整

如果我刪除線'information/news' => 'blog',則採用主從表中分配給博客文章的正確SEO關鍵詞,但網址顯示爲mypage.co.uk/post1

以下代碼可能有助於任何希望擁有超過opencart提供的更完整的seo優化url的人。

<?php 
class ControllerCommonSeoUrl extends Controller { 
     /* SEO Custom URL */ 
     private $url_list = array (
      'common/home'  => '', 
      'checkout/cart'  => 'basket', 
      'account/register' => 'register', 
         'account/wishlist' => 'wishlist', 
         'checkout/checkout' => 'checkout', 
         'account/login'  => 'login', 
         'product/special' => 'special', 
         'affiliate/account' => 'affiliate', 
         'checkout/voucher' => 'voucher', 
         'product/manufacturer' => 'brand', 
         'account/newsletter' => 'newsletter', 
         'account/order'  => 'order', 
         'account/account'  => 'account', 
         'information/contact' => 'contact', 
         'account/return/insert' => 'return/insert', 
         'information/sitemap' => 'sitemap', 
      'information/news'  => 'blog', 
      ); 
     /* SEO Custom URL */ 

    public function index() { 
     // 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'] = 'error/not_found'; 
       } 
      } 
         /* SEO Custom URL */ 
         if ($_s = $this->setURL($this->request->get['_route_'])) { 
           $this->request->get['route'] = $_s; 
         }/* SEO Custom URL */ 

      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/info'; 
      } elseif (isset($this->request->get['information_id'])) { 
       $this->request->get['route'] = 'information/information'; 
      } 

      if (isset($this->request->get['route'])) { 
       return $this->forward($this->request->get['route']); 
      } 
     } 
    } 

    public function rewrite($link) { 
     if ($this->config->get('config_seo_url')) { 
      $url_data = parse_url(str_replace('&amp;', '&', $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/info' || $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]); 
        }// 
             /* SEO Custom URL */ 
             if($_u = $this->getURL($data['route'])){ 
              $url .= $_u; 
              unset($data[$key]); 
             }/* SEO Custom URL */   


           } 
         } 

      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; 
     }  
    } 
     /* SEO Custom URL */ 
     public function getURL($route) { 
       if(count($this->url_list) > 0) { 
        foreach ($this->url_list as $key => $value) { 
         if($route == $key) { 
          return '/'.$value; 
         } 
        } 
       } 
       return false; 
     } 
     public function setURL($_route) { 
       if(count($this->url_list) > 0){ 
        foreach ($this->url_list as $key => $value) { 
         if($_route == $value) { 
          return $key; 
         } 
        } 
       } 
       return false; 
     }/* SEO Custom URL */ 
} 
?> 

回答

1

這僅僅是一個建議如何繼續:

在你rewrite方法存在如下情況?news_id=1&news_id=1被添加到URL的結尾部分if ($url) { ... }

我會在這裏做類似於在index方法正在測試一個測試 - 找出它是否是一個產品,製造商,信息類,新聞等,並更換其SEO關鍵詞 - 無論是從url_alias表或從相應的表...

而不是增加?news_id=1&news_id=1那麼你就只需要添加/<SEO_KEYWORD> ...

+0

你知道我需要改變什麼代碼。對不起,我是新來的。我明白你暗示的邏輯。只是不知道如何實施 – green4rrow