2013-07-09 2 views
0

Мне удалось получить URL-адреса SEO для работы в opencart, а также удалось настроить стандартный URL-адрес URL-адреса, чтобы включить другие настраиваемые URL-адреса. Тот, с которым у меня возникают проблемы, относится к блогу, который я создал. В таблице для записей в блоге есть столбец ключевых слов SEO для каждой соответствующей записи. Текущий URL-адрес появляется как http://www.imbued.co.uk/blog?news_id=5, а 5 - пятая запись в блоге. Я бы предпочел, чтобы URL был более чистым, например http://www.imbued.co.uk/blog/seokeywordfromthetableopencart seo url rewriting

Может ли URL-адрес URL-адреса SEO быть настроен для того, чтобы он стал таковым?

<?php 
class ControllerCommonSeoUrl extends Controller { 
     /* SEO Custom URL */ 
     private $url_list = array (
      'common/home'   => '', 
      'checkout/cart'   => 'basket', 
      'product/special'  => 'special', 
      'product/search'   => 'search', 
      'affiliate/account'  => 'affiliate', 
      'account/voucher'  => 'gift-voucher', 
      'checkout/success'  => 'checkout/success', 
      'product/manufacturer' => 'brand', 
      'account/transaction' => 'transactions', 
      'information/contact' => 'contact-us', 
      'product/compare'  => 'compare', 
      'information/news'  => 'blog', 
      'information/sitemap' => 'sitemap', 
      ); 
     /* 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

вам нужно написать пользовательский обработчик, так как записи в блоге динамические не статические – DevZer0

+0

@ DevZer0 не могли бы вы объяснить, как это делается пожалуйста? – green4rrow

ответ

1

Чтобы сделать это, вам действительно нужно добавить поле ключевых слов SEO в админ, затем добавить ключевые слова в url_alias таблицы, как они редактируются. Вам также необходимо будет использовать blog_id=XXX вместо, например, product_id=XXX. Самый простой способ сделать это - скопировать код из одного из основных типов кода (product, category, manufacturer или information файлов) и как они это делают в своих файлах моделей. После этого вам просто нужно обработать URL-адреса seo в common/seo_url.php, которые у вас есть выше, чтобы получить доступ к ссылкам (вам просто нужно скопировать один из четырех типов, которые являются частью ядра)

Если это рекламный ролик мод, который вы купили, я бы действительно связался с разработчиком. Вероятно, у них будет решение для этого, и если бы не было их интереса, чтобы добавить его для будущих клиентов

+0

Это было не коммерческое приложение. Это бесплатное приложение для подачи новостей, которое я изменил в блог. Я уже работал, используя то, что вы предложили. Спасибо хоть – green4rrow

Смежные вопросы