TShopping

 找回密碼
 註冊
搜索
查看: 643|回復: 0

[教學] opencart靜態化與OPENCART偽靜態的方法

  [複製鏈接]
發表於 2014-10-15 17:11:33 | 顯示全部樓層 |閱讀模式
 
Push to Facebook Push to Plurk Push to Twitter 
今天分析了一下opencart的URL鏈接,總結一些小經驗. opencart是構建了一個輕量級的MVC框架,總體來說思路都是比較清析的. URL重構這一塊,就是分類(category)為例吧. o pencart默認就有URL重寫這個功能,你只需要在後台開啟這個功能則可,可系統自帶的這有一些不足之處,總結有以下幾個問題. 1.不能自動生成SEO keyword
2.SEO keyword的值不是惟一的. 針對
第一個問題,我是這麼解決的: 採用其它系統常用的一種方式,就是用產品名自動生成SEO keyword,一般生成比較友好的URL,通常只包括字母和數字. 這裡可以用正則替換就可以了. 可是呢,也不是替換就行了,還一種比較特殊的情況,就是如果產品名全是特殊字符,比如,我加一個中文產品,產品為"腦白金" 而SEO keyword又為空,這個又怎麼實現偽靜態呢,這種情況下,自動替換就不行了. 這種情況我是這麼處理的,就是假設如果全為特殊字符的話,我就直接生成category-{$category_id}的形式.
第二個問題 怎麼理解urlkey的值不是惟一的呢。 比如,我新加一個分類1,然後在Data裡面的SEO keyword裡面加入:mycategory 然後,我再建一個分類2,而且同樣也在Data裡面的SEO keyword裡面加入:mycategory 這樣一來,就會出現一個問題,那就是兩個URL都一個,你將無法訪問分類2. 好了,理論說了一大堆,我們來實際操作. 首先,保存SEO keyword的數據表是url_alias這個表,我們需要找到程序是在哪一個位置插入數據這個表的. 找到/admin/model/catalog/category.php文件
大概在20-30(添加分類),50-60(修改分類)左右,也就是
if ($data['keyword' ]) { $this->db->query("INSERT INTO " . DB_PREFIX . "url_alias SET query = 'category_id=" . (int)$category_id . "', keyword = '" . $this->db-> escape($data['keyword']) . "'"); }
opencart靜態化與OPENCART偽靜態的方法,如何去除修改OPENCART底部的版權信息POWERED BY OPENCART


轉靜態的方法:

Opencart的轉靜態是一個比較重要的問題!也是在第一次使用opencart是遇到一個最大的問題!也許我受到zen-cart轉靜態的影響!所以以為只要把“..htaccess”上傳到服務器跟目錄下!然後再打開opencart轉靜態按鈕!

可是結果卻超出了我想像之外!他是跟打開之前一模一樣!也就是還是動態的URL地址,當時我以為那一定是我的那個“.htaccess”出錯了!於是我就找我朋友拿了一個“.htaccess”,當然是Opencart使用(不同的網站,轉靜態用的“.htaccess”是不一樣的),可是還是不行!於是我只能把原程序上傳到服務器上!然後重新安裝一下!結果手動上傳產品到網站中!還是一樣的!於是我就很無語,按理來說(當然程序很多時候都不能按理來說的),我在安裝前就把“.htaccess”空的文件,上傳上網站的跟目錄下,並且把“.htaccess”設置為777,而且我把“.htaccess”下載下來也是可以使用的,可是就不知道為什麼!

於是我又用同樣的方法,不過這個時候有開啟測試產品!又自己上傳了產品!才發現原來測試產品是可以用的!自己上傳就不可以用了!於是我說開了數據庫看他們的數據有什麼差別!在一個表“url_alias”中有數據!而且沒勁的產品有!我上傳的就沒有了!於是就在後以找到那個產品在“url_alias”中的keyword數據才知道原來,Opencart後台產品編輯頁面的一個字段“Product Tags:”一樣,才知道原來Opencart的作者寫的跟別人不一樣!其他作品的URL地址都是自動生成的!但是他不一樣!他是用自己去填寫!而且你愛什麼寫就什麼寫!只要你是唯一的就可以!當然也給業務帶來一些不便!不過他卻可以給URL優化帶來很大的幫助!

這個就實現了Opencart 轉靜態,當然這樣做有點兒麻黃!我在自己做的Opencart 批量上傳中就把那個URL地址直接用產品的名字代替!把空格變成中劃線!這樣大家就不要為個URL而煩惱了!當然在我寫的PHP批量上傳中沒有提到!有時間我會寫一個《Opencart 批量上傳》再認真的說一下!

這是opencart “.htaccess”的內容:
  1. # 1.To use URL Alias​​ you need to be running apache with mod_rewrite enabled.

  2. # 2. In your opencart directory rename htaccess.txt to .htaccess.

  3. # For any support issues please visit: <a href="http://www.opencart.com" target="_blank">[url]http://www.opencart.com[/url]</a>

  4. RewriteEngine On

  5. RewriteCond %{HTTP_HOST} !^cheap-shoes-whole.com$ [NC]

  6. RewriteRule ^(.*)$ <a href=""></a>$1 [L,R=301]

  7. Options +FollowSymlinks

  8. RewriteEngine On

  9. RewriteBase /

  10. RewriteCond %{REQUEST_FILENAME} !-f

  11. RewriteCond %{REQUEST_FILENAME} !-d

  12. RewriteRule ^(.*)?*$ index.php?_route_=$1 [L,QSA] RewriteEngine
複製代碼
================================================== =========
偽靜態的方法:

我們需要在這個判斷前對$data['keyword']進行驗證,驗證它是否為空,因為只有不為空的情況下,
我們重構這個分類的URL才有意義.
  1. if ($data[' keyword']) {前面添加以下代碼 ...
  2. Oter code... if(!$data['keyword']){
  3. //生成友好的只帶數字和字母的URL
  4. $keywordUrl = preg_replace("/[^ -0-9a-zA-Z]+/","",str_replace(' ','-',$this->db->escape($value['name'])));
  5. //如果產品名為特殊字符,則改成category-{$category_id}的形式.同時給自動生成的SEO keywork加上標識ID
  6. $data['keyword'] = strlen($keywordUrl)>0?$keywordUrl.'-'. $category_id:'category'.'-'.$category_id;
  7. }
複製代碼
if ($data['keyword']) { ...Oter code... 根據同樣的方法可以修改產品的SEO keyword 修改文件/admin/model /catalog/product.php文件 則可,方法一樣,在此不重敘。


 

臉書網友討論
您需要登錄後才可以回帖 登錄 | 註冊 |

本版積分規則



Archiver|手機版|小黑屋|免責聲明|TShopping

GMT+8, 2016-12-5 20:41 , Processed in 0.056952 second(s), 22 queries .

本論壇言論純屬發表者個人意見,與 TShopping綜合論壇 立場無關 如有意見侵犯了您的權益 請寫信聯絡我們。

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表