多嚿魚教室

Opencart優化技巧

我想輸入兩個中文字的Product Attribute Name,但Opencart系統就警告我,難道它不了解漢語使用者的習慣?
沒錯!因為Opencart設計者是英國人,他不明白漢語的美妙之處在於「精簡」——跟其他語言相比,漢語用很少字符就表達相同的意思出來。所以Opencart所設的Product Attribute Name的三個字符下限是多卵魚的。
Opencart所設的Product Attribute Name的三個字符下限
低智簡單的解決方法是打空格湊夠三個字符。
但是,我才不會像個傻子每次都要留空格,所以要修正它的程式碼。

係咪無叉用呢?我有!
以下方法適用於Opencart v1.5.1.3
程式修正1:
  1. 編輯[admin/controller/catalog/attribute.php]。
  2. 搜尋下列程式碼:
    foreach ($this->request->post['attribute_description'] as $language_id => $value) {
       if ((utf8_strlen($value['name']) < 3) || (utf8_strlen($value['name']) > 64)) {
          $this->error['name'][$language_id] = $this->language->get('error_name');
       }
    }
  3. 只要將utf8_strlen($value['name']) < 3改成utf8_strlen($value['name']) < 2,就可以儲存兩個字符的Attribute Name。utf8_strlen()是用來計算UTF-8字符串的字數。)

Opencart系統容許儲存兩個中文字符,而且容許儲存兩個英文字符,好像有點奇怪。
Opencart系統容許儲存兩個中文字符,而且容許儲存兩個英文字符。
大多數有實際意義的英文字都超過兩個字母,所以設計者才要求使用者輸入不少於兩個英文字符,用有意義的詞語作為Attribute Name。下一步要修改程式令系統容許使用者儲存兩個中文字符,同強制輸入不少於兩個英文字符。
程式修正2:
  1. 復原剛才的attribute.php檔案,搜尋同一段程式碼。
  2. utf8_strlen($value['name']) < 3改成strlen($value['name']) < 3
Opencart系統容許儲存兩個中文字符,但不容許儲存兩個英文字符。
strlen()是用來計算字符串的字數,而實際上它是計算字符串的位元組。
由於UTF-8拉丁字母只佔一個位元組,而UTF-8漢字佔三個位元組,所以strlen()會將2個UTF-8漢字視為6個字符,而2個拉丁字母仍然是2個字符。
以上修正方法同樣適用於 Attribute Group Name 和 Manufacturer Name ,只要照辦煮碗編輯程式碼便可。
Attribute Group Name: [admin/controller/catalog/attribute_group.php]
Manufacturer Name: [admin/controller/catalog/manufacturer.php]

<p>
&#60;!--<br />
Make sure that you have properly installed Opencart vQmod.<br />
Copy this page of script.<br />
Save as a .xml file of utf-8 encoding without BOM into the directory [vqmod/xml].<br />
Name the file as you like.<br />
--&gt;</p>
<pre contenteditable="true">
&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;modification&gt;
&nbsp;&lt;id&gt;Allow attribute name of 2 charcters&lt;/id&gt;
&nbsp;&lt;version&gt;1.0.0&lt;/version&gt;
&nbsp;&lt;author&gt;Flexidigi Solution Ltd&lt;/author&gt;
&nbsp;&lt;file name="admin/controller/catalog/attribute.php"&gt;
&nbsp;&nbsp;&lt;operation error="skip"&gt;
&nbsp;&nbsp;&nbsp;&lt;search position="replace"&gt;&lt;![CDATA[utf8_strlen($value['name']) &lt; 3]]&gt;&lt;/search&gt;
&nbsp;&nbsp;&nbsp;&lt;add&gt;&lt;![CDATA[strlen($value['name']) &lt; 3]]&gt;&lt;/add&gt;
&nbsp;&nbsp;&lt;/operation&gt;
&nbsp;&lt;/file&gt;
&nbsp;&lt;file name="admin/controller/catalog/attribute_group.php"&gt;
&nbsp;&nbsp;&lt;operation error="skip"&gt;
&nbsp;&nbsp;&nbsp;&lt;search position="replace"&gt;&lt;![CDATA[utf8_strlen($value['name']) &lt; 3]]&gt;&lt;/search&gt;
&nbsp;&nbsp;&nbsp;&lt;add&gt;&lt;![CDATA[strlen($value['name']) &lt; 3]]&gt;&lt;/add&gt;
&nbsp;&nbsp;&lt;/operation&gt;
&nbsp;&lt;/file&gt;
&nbsp;&lt;file name="admin/controller/catalog/manufacturer.php"&gt;
&nbsp;&nbsp;&lt;operation error="skip"&gt;
&nbsp;&nbsp;&nbsp;&lt;search position="replace"&gt;&lt;![CDATA[utf8_strlen($value['name']) &lt; 3]]&gt;&lt;/search&gt;
&nbsp;&nbsp;&nbsp;&lt;add&gt;&lt;![CDATA[strlen($value['name']) &lt; 3]]&gt;&lt;/add&gt;
&nbsp;&nbsp;&lt;/operation&gt;
&nbsp;&lt;/file&gt;
&lt;/modification&gt;</pre>

當頁面有多筆資料,實在看得人眼花撩亂。


如果資料展示不同背景顏色,就不會混淆了。

無叉用?等我幫下你
以下方法適用於Opencart v1.5.1.3

修改方法:
  1. 編輯[admin/view/stylesheet/stylesheet.css]
  2. 搜尋到.list tbody td {
  3. 刪除background: #FFFFFF;
  4. 在最後一行插入以下源碼:
    .list tbody tr {
     background-color: Lime;
    }
    .list tbody tr:nth-child(odd) {
     background-color: Lime;
    }
    .list tbody tr:nth-child(even) {
     background-color: GreenYellow;
    }
    .list tbody tr:hover {
     background-color: white;
    }
    (由於nth-child是CSS3新增的Selector,所以舊瀏覽器並不支援,建議用最新版本的瀏覽器。)
你可以設定background-color為你喜歡的顏色。