Cách viết vQmod cho opencar ( phần 1 )
Khi tìm hiểu về vQmod các bạn luôn muốn vừa học vừa thực hành tự viết cho riêng mình một vQmod để sử dụng, mình viết bài này để cho các bạn có thể hiểu làm thế nào để viết vQmod đúng cú pháp và nhanh chóng tiếp thu được những gì mình đã đọc và tìm hiểu. Để thuận tiện trong việc viết vQmod cho Opencart các bạn có thể sử dụng một công cụ nhỏ sau đây http://www.qualchem.co.nz/vqgen.php hoặc http://www.opencart-extensions.co.uk/vqgen nó sẽ giúp cho các bạn không phải ngồi gõ một loạt các code dài loàng ngoàng nữa ^^. Như ở bài một vài ví dụ sử dụng vQmod trên Opencart các bạn đã có dịp làm quen với một số ví dụ về vQmod, vQmod sử dụng một trình phân tích cú pháp xml được mặc định.
Cú pháp của file xml mà vQmod phân tích có dạng cơ bản như sau:
<?xml version="1.0" encoding="UTF-8"?> <modification> <id>Replace 123 with ABC</id> <version>1.0.0</version> <vqmver>1.0.9</vqmver> <author>qphoria</author> <file name="relative/path/myfile.php"> <operation> <search position="replace"><![CDATA[ $var = '123'; ]]></search> <add><![CDATA[ $var = 'ABC'; ]]></add> </operation> </file> </modification>
Giải thích cú pháp XML
<modification></modification>
Đây là cấp cao nhất của file *.XML mỗi một file chỉ được suất hiện một lần cặp
<id></id>
Đây là tên dùng để cung cấp thông tin mô tả mod được định dạng bằng văn bản.
<version></version>
Cung cấp thông tin về phiên bản của mod được định dạng bằng số thập phân ví dụ: 1.1.0
<vqmver></vqmver>
Cung cấp thông tin phiên bản tối thiểu của VirtualQMod cần thiết để làm việc, được định dạng bằng số
thập phân ví dụ: 2.1.5
<author></author>
Cung cấp thông tin về tác giả của mod, được định dạng bằng văn bản.
<file name=”name_file.php”></file>
Đây là tên của file cần thay đổi là tên của file có liên quan đến file index.php
ví dụ như: catalog/controller/product/product.php
Đường dẫn được hỗ trợ dấu (*) để đại diện cho một đường dẫn linh động mỗi một dấu (*) được đại diện cho
duy nhất một thư mục ví dụ:
Mã:
– catalog/view/theme/*/template/product/product.tpl – catalog/view/theme/*/*/product/product.tpl – v.v…
Có thể có nhiều file cần thay đổi trong một file *.xml
<operation></operation>
Đây là nơi các hoạt động thay đổi được diễn ra.
Có thể có nhiều thay đổi trong một file
Tùy chọn:
“error” được thiết lập là skip | log | abort
skip bỏ qua tất cả các hoạt động khác, không lưu lại lỗi trong nhật ký (Error Log)
log giống như skip nhưng lưu lại lỗi trong nhật ký
abort hủy bỏ các lỗi để trở lại mặc định
<search position=”replace | before | after | top | bottom | all”></search>
Đây là bước đầu tiên diễn ra các hoạt động. Cần sử dụng [CDATA[ đoạn code]]> để bao bọc đoạn mã.
replace: dùng khi muốn thay thế dữ liệu tìm kiếm bằng dữ liệu trong thẻ <add></add> (Mặc định)
before: dùng khi muốn chèn dữ liệu trong thẻ <add></add> vào trước dữ liệu tìm kiếm.
after: dùng khi muốn chèn dữ liệu trong thẻ <add></add> vào sau dữ liệu tìm kiếm.
top: dùng khi muốn chèn dữ liệu trong thẻ <add></add> lên trên cùng của file và bỏ qua dữ liệu tìm kiếm
bottom: dùng khi muốn chèn dữ liệu trong thẻ <add></add> xuống dưới cùng của file và bỏ qua dữ liệu tìm kiếm
all: thay thế tất cả dữ liệu của file bằng dữ liệu trong thẻ <add></add>
Tùy chọn “offset” thuộc tính này sẽ làm việc cùng với các vị trí của position giả sử offset nhận giá trị là 2 (oifset=”2″) :
Nếu giá trị của position là before thì nó sẽ đưa dữ liệu trong thẻ <add></add> lên trước dữ liệu tìm kiếm 2 dòng.
Nếu giá trị của position là after thì nó sẽ đưa dữ liệu trong thẻ <add></add> xuống dưới dữ liệu tìm kiếm 2 dòng.
Tùy chọn “index”
Rảnh rỗi mình sẽ viết tiếp .
Đây là một Vqmod do mình viết các bạn tham khảo sẽ dễ hình dung hơn :
VQMOD DARKS AUTO FILL SEO KEYWORD :
Dark’s AutoFill Seo Field Seo link Opencart , rewrite link html cho Opencart free (Miễn phí )
<modification> <id>Dark's Autofill SEO field (Category, Product, Information) 1.4.x - 1.5.x</id> <version>1.4.x - 1.5.x</version> <vqmver>1.2.3</vqmver> <author>Darkstorns Admonistrator theme4u.biz</author> - <file name="admin/view/template/common/header.tpl"> - <operation> - <search position="before"> - <![CDATA[ </head> ]]> </search> - <add> - <![CDATA[ <script type="text/javascript"> $(document).ready(function(){ var keyword = $("input[name=keyword]"); if(!keyword.val()){ $("input[name^='product_description'],input[name^='category_description'],input[name='name'],input[name^='information_description']").keyup(function(){ var SEOlink = $(this).val(); SEOlink = SEOlink.replace(/^\s+|\s+$/g, ''); // trim SEOlink = SEOlink.toLowerCase(); // remove accents, swap, etc var from = "ọẹạịụớđàáäâèéëêìíïîòóöôùúüûñcçčlľštžýnrrd·ạảãầấậẩẫăắằẳẵặ_ịỉĩ/ọỏõôồốộổỗơờởợởỡ;ẹẻẽềếệểễ:ụủũưừứựửữ,ỵỷỹỳ"; var to = "oeaiuodaaaaeeeeiiiioooouuuuncccllstzynrrd--aaaaaaaaaaaaaa-iii-ooooooooooooooo-eeeeeeee-uuuuuuuu-yyyy"; for (var i=0, l=from.length ; i<l ; i++) { SEOlink = SEOlink.replace(new RegExp(from.charAt(i), 'g'), to.charAt(i)); } SEOlink = SEOlink.replace(/[^a-z0-9 -]/g, '') // remove invalid chars .replace(/\s+/g, '-') // collapse whitespace and replace by - .replace(/-+/g, '-'); // collapse dashes // return SEOlink; keyword.val(SEOlink); }); } }); </script> ]]> </add> </operation> </file> </modification>