ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น

ThaiSEOBoard.comพัฒนาเว็บไซต์CMS & Free Script[PRESTASHOP] ปรับ SEARCH ให้โดนใจ(เรา) Support ภาษาไทยจ้า !!!
หน้า: [1] 2  ทั้งหมด   ลงล่าง
พิมพ์
ผู้เขียน หัวข้อ: [PRESTASHOP] ปรับ SEARCH ให้โดนใจ(เรา) Support ภาษาไทยจ้า !!!  (อ่าน 8201 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
kennn
Verified Seller
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 149
ออฟไลน์ ออฟไลน์

กระทู้: 1,199



ดูรายละเอียด
« เมื่อ: 30 พฤศจิกายน 2009, 18:20:26 »

UPDATE 4/12/2009
มีบางท่านบอกว่าได้ปรับแต่งตามที่ผมบอกหมดแล้ว แต่เมื่อทำการคลิกที่คำใน Tag กลับไม่เจอข้อมูลสินค้า ตรงนี้ผมได้หาจุดแก้ไขแล้วนะครับ
จากการทดสอบ ผมพบว่าคำใน Tag ที่ค้นหาไม่เจอข้อมูล คำนั้นๆจะมีแค่ 3 ตัวอักษร พอเพิ่มตัวอักษรเข้าไปในคำนั้นๆอีก กลับค้นหาข้อมูลเจอ ที่เป็นเหตุนี้เพราะว่าค่า Minimum word length มีค่าเป็น 3 ครับ

หลายท่านคงสงสัย มีค่าเป็น 3 ไม่ถูกหรือไง ก็อยากให้เก็บคำค้นหาขั้นต่ำ 3 อักษรขึ้นไป ตรงนี้ท่านไม่ผิดครับ แต่ทาง PS ทำมาให้เรางงเอง จากที่ดูในโค้ด ถ้าเราตั้ง Minimum word length เป็น 3 โปรแกรมก็จะเก็บคำค้นหาที่มี 4 ตัวอักษรขึ้นไปเท่านั้น ดังนั้น ใครที่ต้องการใช้คำค้นหาที่มี 3 ตัวอักษรขึ้นไป ก็ต้องตั้งค่า Minimum word length เป็น 2 นะครับ

Minimum word length อยู่ในส่วน Preferences>Search


UPDATE 3/12/2009
Module Block Search แบบมี Config สามารถนำไปใช้ได้กับเวอร์ชั่นที่ยังไม่ได้ปรับแต่งตามบทความของผมได้เลยนะครับ
โมดูลตัวนี้ผมเชื่อว่าทางฝรั่งยังไม่มีแน่นอน เพราะผมทำเองมากะมือ เป็นโมดูล Quick Search ที่มี Config ตัวแรกเลย
ความสามารถของมันคือ ปรับรูปแบบอักษรในข้อมูลที่เราค้นหาเจอนะครับ ลองนำไปเล่นดูแล้วจะเข้าใจ
วิธีติดตั้ง Uninstall Block Search ตัวเก่าออกก่อน และนำโฟลเดอร์ blocksearch ในโฟลเดอร์ modules ออกไปด้วย นำตัวใหม่ใส่เข้าไป และเข้าที่ส่วนติดตั้งโมดูล และลองปรับแต่ง Config แล้วก็ไปลอง Search ดูในช่อง Ajax Search จะเห็นครับว่ามันทำงานยังไง

Download


UPDATE 2/12/2009  
ใครปรับ $smarty->caching เป็น true ให้ปรับเป็น false เพื่อให้ได้ผลทดสอบแบบ Real time นะครับ

-----------------------------------------------------------------------------------------------------------------------------------------------

เพื่อนๆหลายคนคงมีปัญหากับการใช้ Search ใน Prestashop ไม่มาก็น้อยนะครับ ทั้งๆที่มีสินค้าและคำนั้นๆอยู่ในข้อมูลสินค้า แถมบางทีคำภาษาอังกฤษยังมีปัญหาเลย
ผมจะขออธิบายการทำงานของ Search ใน Prestashop ให้เพื่อนๆได้เข้าใจหลักการของมันก่อน ในตอนแรกผมก็งงกับมันเหมือนกัน เพราะเรื่องของเรื่อง การ Search ใน Prestashop(PS) มีทำงานที่ต่างจากที่ผมเคยเข้าใจ  PS จะไม่ได้ค้นหาข้อมูลใน ตาราง Product_lang โดยตรง แต่จะอ้างอิงเลข ID และ คำค้นหา มาจาก ตาราง Search_word ก่อน เรียกว่า คำค้นหาใดไม่ได้อยู่ในตาราง Search_word ก็ไม่มีทางเจอข้อมูลสินค้าตัวนั้นแน่นอน

การเพิ่มคำค้นหาให้กับสินค้าเพื่อการค้นหาที่เจอข้อมูลสินค้าแบบแน่นอน ทำดังนี้
- ในข้อมูลสินค้า ใส่คำค้นหาที่ Product Name, Friendly URL, Short Description, Long Description และ Tags ขออธิบายตรงนี้นิดนึง ทำไมถึงต้องใส่ขนาดนี้ ช่อง Tags ช่องเดียวไม่ได้หรอ ขอตอบว่า ได้ครับ ที่ผมจะบอกก็คือ PS ได้ออกแบบให้ทำการเก็บคำค้นหาจากส่วนที่ผมได้เอ่ยไปแล้ว เมื่อมีการ Save ข้อมูลสินค้า ดังนั้น ตาราง Search_word จะมีข้อมูลคำค้นหาที่เยอะมาก ขึ้นอยู่กับการกำหนดค่า ว่าเราจะให้ทำการเก็บคำค้นหาตั้งแต่กี่ตัวอักษรขึ้นไป ค่าปกติที่ทาง PS กำหนดมาอยู่ที่ 3 นะครับ สรุปคือ คำไหนมีมากกว่า 3 ตัวอักษร คำเหล่านั้นจะถูกเก็บลงใน Search_word หมด เช่นในข้อมูล Long Description มีคำว่า The movie on tour. จะมีทั้งหมด 3 คำค้นหาที่ถูกเก็บเข้าตาราง Search_word ก็คือ The, movie, tour ตรงนี้บอกได้เลยว่า ถ้าเนื้อหาข้อมูลสินค้าของใครเยอะมากๆ Database แย่แน่ แต่เดี๋ยวผมมีวิธีแก้ครับ

- ต่อมาเมื่อเพิ่มคำค้นหาให้กับสินค้าแล้ว ให้ไปที่ Tab Preference > Search ในส่วนของ Indexation จะมี 2 Text Link ตรงนี้บางท่านอาจจะนึกว่าเป็นแค่ข้อความเตือนหรือบอกอะไรไม่รู้ จริงๆมันเป็นลิงค์ที่ใช้เหมือนกับการ Submit เลยครับ แต่มันเป็นการเพิ่มคำค้นหาเข้าตาราง Search_word และเปิดการทำงานให้กับ Product ทุกตัวที่เรามีอยู่(เพิ่มค่า indexed จาก 0 เป็น 1 indexed คือ ฟิวล์ที่อยู่ในตาราง Product)
Indexed products: 10 / 10. คือ จำนวนสินค้าที่มีอยู่ในฐานข้อมูล
-> Add missing products to index. เป็น ลิงค์ที่ช่วยเพิ่มคำค้นหาให้เข้าไปอยู่ในตาราง Search_word
-> Re-build entire index. เป็นส่วนช่วยลบคำค้นหาในตาราง Search_word คือ ลบคำค้นหาที่ไม่ได้ใช้ หรือไม่มีอยู่ในข้อมูลสินค้า ส่วนนี้จะช่วยให้ตาราง search_word โล่งขึ้น
Minimum word length ส่วนนี้เป็นค่าที่กำหนดว่า จะให้เก็บคำค้นหาตั้งแต่กี่ตัวอักษรขึ้นไป(ค่าเริ่มต้น 3) ถ้าปรับค่าในส่วนนี้ใหม่ เช่น 5 และคลิกลิงค์ Re-build entire index. คำค้นหาที่มีต่ำกว่า 5 ตัวอักษรจะถูกลบออกหมด คราวนี้ถึงแม้ใน Tag ของเราจะมีคำค้นหาอยู่(สมมุติคำค้นหาใน Tag มี น้อยกว่า 5 ตัวอักษร) แต่พอคลิกที่คำค้นหาในส่วนของ Blog Tag เราก็จะไม่เจอข้อมูลสินค้าใดๆ และถึงแม้จะปรับค่า Minimum word length กลับมาเป็น 3 เราก็จะยังค้นหาข้อมูลสินค้าไม่เจออยู่ดี เพราะเราได้ Re-build entire index. ไปแล้ว ก็คือลบคำค้นหาที่น้อยกว่า 5 ตัวอักษรออกจากตาราง Search_word ไปแล้วนั่นเอง อย่างที่บอกไว้ตอนต้นๆครับ การค้นหาของ PS อ้างอิงจากข้อมูลในตาราง Search_word

วิธีแก้ไขเมื่อเราเผลอไปปรับค่า Minimum word length และกด Re-build entire index.
- กำหนดค่าที่แน่นอนสำหรับ Minimum word length ผมว่า 3 กำลังดี
- ในส่วนต่างๆของข้อมูลสินค้า ให้ใส่คำค้นหาเท่ากับหรือมากกว่าค่า Minimum word length และกด Save และทำแบบนี้กับทุกข้อมูลสินค้าที่มี

สำหรับเพื่อนๆที่มีข้อมูลเยอะๆคงหงุดหงิดแย่เลย เกิดมีสินค้าเป็นร้อยๆนะ ตรงนี้เดี๋ยวผมก็มีวิธีแก้ครับ

Blacklisted words คำที่ไม่ต้องการให้ค้นหาเจอ
ส่วนค่าด้านล่างของส่วนนี้ จะเป็นค่าความสำคัญหรือตำแหน่งของคำค้นหากับสินค้า ค่านี้จะถูกเก็บอยู่ในตาราง Search_index ชื่อ fiel weight ส่วนนี้จะมีความสำคัญกับการแสดงข้อมูลภายใต้ช่อง Search(ajax) เมื่อเราพิมข้อมูลลงไป ใต้ช่อง Search ก็จะแสดง List ข้อมูลสินค้าออกมา แต่ที่เห็นข้อมูลเรียงออกมานั้น ข้อมูลไม่ได้เรียงตาม Name หรือ id ของสินค้า แต่เรียงจากคะแนนที่ถูกบวกกันแล้วตาม fiel weigth อ่านแล้วอาจจะงง ผมยกตัวอย่างแล้วกัน

สมมุตเรามีการเพิ่มสินค้า 2 ตัว สินค้า
ตัวแรกใส่คำค้นหาคำว่า "iPod" ใน Tags
สินค้าตัวที่สองใส่คำค้นหาคำว่า "iPod" ทั้งใน Product Name และ Tags
ดังนั้น เมื่อมีการค้นหาคำว่า iPod ในช่อง Search สินค้าตัวที่ 2 จะอยู่อันดับแรก เหตุผลเพราะว่าสินค้าตัวที่สองมีคำค้นหา 2 ส่วน คือ Product Name และ Tags
Product Name มีค่า Product name weight = 6(อันนี้ค่าที่ PS ใส่มาเริ่มต้น) และ Tags มีค่า Tags weight = 4(อันนี้ค่าที่ PS ใส่มาเริ่มต้น) รวมกันเป็น 10 ส่วนสินค้าตัว

แรกรวมกันเป็น 4 ดังนั้นสินค้าตัวที่สองจึงแสดงที่ตำแหน่งบนสุดที่กล่าวมาคือ การทำงานในส่วน Search ของ PS ที่ร่ายให้อ่านกันเพราะผมเห็นว่ามันสำคัญมาก ผมเห็นว่าการทำงานของมันค่อนข้างยุ่งยาก แต่มีประโยชน์มากๆครับถ้าเข้าใจ ตรงนี้อย่าว่ากันนะครับ ก่อนจะปรับแต่ง Search ของ PS ผมแนะนำให้ไปที่กระทู้นี้ก่อนครับ

[Update#3] วิธีแก้ไข prestashop ให้ support SEF URL ภาษาไทยได้
By barco ของคุณ barco เป็นแบบปรับแต่งไม่มาก แต่ถ้าต้องการแบบเยอะหน่อยลองดูของผมครับ

การปรับใช้ภาษาไทยในส่วนของ Admin Prestashop
ในส่วนของ Admin แก้ไข 3 ไฟล์นี้ครับ
1. prestashop/js/admin.js แก้ไขที่ function str2url(str,encoding,ucfirst)
อ้างถึง
str = str.replace(/[^a-z0-9\s\'\:\/\[\]-]/g,'');
เปลี่ยนเป็น
อ้างถึง
str = str.replace(/[^a-z0-9ก-๙\s\'\:\/\[\]-]/g,'');

Credit คุณ barco

2. prestashop/classes/Validate.php แก้ไขที่ static public function isLinkRewrite($link)
อ้างถึง
return empty($link) OR preg_match('/^[_a-z0-9-]+$/ui', $link);
เปลี่ยนเป็น
อ้างถึง
return empty($link) OR preg_match('/^[_a-z0-9ก-๙-]+$/ui', $link);

Credit คุณ barco

3. prestashop/โฟลเดอร์adminของคุณ/tabs/AdminGenerator.php แก้ไขที่ function postProcess()
อ้างถึง
// PS Comments
               fwrite($writeFd, "# .htaccess automaticaly generated by PrestaShop e-commerce open-source solution\n");
               fwrite($writeFd, "# hxxp://www.prestashop.com - hxxp://www.prestashop.com/forums\n\n");

               // RewriteEngine
               if (Configuration::get('PS_REWRITING_SETTINGS'))
               {
                  fwrite($writeFd, $this->_htData['RewriteEngine']['comment']."\nRewriteEngine on\n\n");
                  fwrite($writeFd, $this->_htData['RewriteRule']['comment']."\n");
                  foreach ($this->_htData['RewriteRule']['content'] as $rule => $url)
                     fwrite($writeFd, 'RewriteRule '.$rule.' '.__PS_BASE_URI__.$url."\n");
                  fwrite($writeFd, "\n");
               }
               
               // ErrorDocument
               fwrite($writeFd, $this->_htData['ErrorDocument']['comment']."\nErrorDocument ".$this->_htData

['ErrorDocument']['content']."\n");
เปลี่ยนเป็น
อ้างถึง
// PS Comments
               fwrite($writeFd, "# .htaccess automaticaly generated by PrestaShop e-commerce open-source solution\r\n");
               fwrite($writeFd, "# hxxp://www.prestashop.com - hxxp://www.prestashop.com/forums\r\n");

               // RewriteEngine
               if (Configuration::get('PS_REWRITING_SETTINGS'))
               {
                  fwrite($writeFd, $this->_htData['RewriteEngine']['comment']."\r\nRewriteEngine on\r\n\r\n");
                  fwrite($writeFd, $this->_htData['RewriteRule']['comment']);
                  foreach ($this->_htData['RewriteRule']['content'] as $rule => $url)
                     fwrite($writeFd, 'RewriteRule '.$rule.' '.__PS_BASE_URI__.$url."\n");
                  fwrite($writeFd, "\r\n");
               }
               
               // ErrorDocument
               fwrite($writeFd, $this->_htData['ErrorDocument']['comment']."\nErrorDocument ".$this->_htData

['ErrorDocument']['content']."\r\n");


ในส่วน public function _getHtaccessContent()
อ้างถึง
// ErrorDocument
      $tab['ErrorDocument']['comment'] = '# Catch 404 errors';
      $tab['ErrorDocument']['content'] = '404 '.__PS_BASE_URI__.'404.php';

      // RewriteEngine
      $tab['RewriteEngine']['comment'] = '# URL rewriting module activation';

      // RewriteRules
      //IMPORTANT : if you change the lines bellow, don"t forget to change the "urlcanonical" module too
      $tab['RewriteRule']['comment'] = '# URL rewriting rules';
      $tab['RewriteRule']['content']['^([a-z0-9]+)\-([a-z0-9]+)(\-[_a-zA-Z0-9-]*)/([_a-zA-Z0-9-]*)\.jpg$'] = 'img/p/$1-$2$3.jpg [L,E]';
      $tab['RewriteRule']['content']['^([0-9]+)(\-[_a-zA-Z0-9-]*)/([_a-zA-Z0-9-]*)\.jpg$'] = 'img/c/$1$2.jpg [L,E]';
      $tab['RewriteRule']['content']['^lang-([a-z]{2})/([a-zA-Z0-9-]*)/([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$'] = 'product.php?

id_product=$3&isolang=$1$5 [L,E]';
      $tab['RewriteRule']['content']['^lang-([a-z]{2})/([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$'] = 'product.php?id_product=$2&isolang=$1$4

[L,E]';
      $tab['RewriteRule']['content']['^lang-([a-z]{2})/([0-9]+)\-([a-zA-Z0-9-]*)(.*)$'] = 'category.php?id_category=$2&isolang=$1 [QSA,L,E]';
      $tab['RewriteRule']['content']['^([a-zA-Z0-9-]*)/([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$'] = 'product.php?id_product=$2$4 [L,E]';
      $tab['RewriteRule']['content']['^([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$'] = 'product.php?id_product=$1$3 [L,E]';
      $tab['RewriteRule']['content']['^([0-9]+)\-([a-zA-Z0-9-]*)(.*)$'] = 'category.php?id_category=$1 [QSA,L,E]';
      $tab['RewriteRule']['content']['^content/([0-9]+)\-([a-zA-Z0-9-]*)(.*)$'] = 'cms.php?id_cms=$1 [QSA,L,E]';
      $tab['RewriteRule']['content']['^([0-9]+)__([a-zA-Z0-9-]*)(.*)$'] = 'supplier.php?id_supplier=$1$3 [QSA,L,E]';
      $tab['RewriteRule']['content']['^([0-9]+)_([a-zA-Z0-9-]*)(.*)$'] = 'manufacturer.php?id_manufacturer=$1$3 [QSA,L,E]';
      $tab['RewriteRule']['content']['^lang-([a-z]{2})/(.*)$'] = '$2?isolang=$1 [QSA,L,E]';


และแก้ไขดังนี้
อ้างถึง
// ErrorDocument
      $tab['ErrorDocument']['comment'] = '# Catch 404 errors'."\r\n";
      $tab['ErrorDocument']['content'] = '404 '.__PS_BASE_URI__.'404.php'."\r\n";

      // RewriteEngine
      $tab['RewriteEngine']['comment'] = '# URL rewriting module activation'."\r\n";

      // RewriteRules
      //IMPORTANT : if you change the lines bellow, don"t forget to change the "urlcanonical" module too
      $tab['RewriteRule']['comment'] = '# URL rewriting rules'."\r\n";
      /*
      $tab['RewriteRule']['content']['^([a-z0-9]+)\-([a-z0-9]+)(\-[_a-zA-Z0-9-]*)/(.*)\.jpg$'] = 'img/p/$1-$2$3.jpg [L,E]';
      $tab['RewriteRule']['content']['^([0-9]+)(\-[_a-zA-Z0-9-]*)/([_a-zA-Z0-9-]*)\.jpg$'] = 'img/c/$1$2.jpg [L,E]';
      $tab['RewriteRule']['content']['^lang-([a-z]{2})/([a-zA-Z0-9-]*)/([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$'] = 'product.php?

id_product=$3&isolang=$1$5 [L,E]';
      $tab['RewriteRule']['content']['^lang-([a-z]{2})/([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$'] = 'product.php?id_product=$2&isolang=$1$4

[L,E]';
      $tab['RewriteRule']['content']['^lang-([a-z]{2})/([0-9]+)\-([a-zA-Z0-9-]*)(.*)$'] = 'category.php?id_category=$2&isolang=$1 [QSA,L,E]';
      $tab['RewriteRule']['content']['^([a-zA-Z0-9-]*)/([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$'] = 'product.php?id_product=$2$4 [L,E]';
      $tab['RewriteRule']['content']['^([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$'] = 'product.php?id_product=$1$3 [L,E]';
      $tab['RewriteRule']['content']['^([0-9]+)\-([a-zA-Z0-9-]*)(.*)$'] = 'category.php?id_category=$1 [QSA,L,E]';
      $tab['RewriteRule']['content']['^content/([0-9]+)\-([a-zA-Z0-9-]*)(.*)$'] = 'cms.php?id_cms=$1 [QSA,L,E]';
      $tab['RewriteRule']['content']['^([0-9]+)__([a-zA-Z0-9-]*)(.*)$'] = 'supplier.php?id_supplier=$1$3 [QSA,L,E]';
      $tab['RewriteRule']['content']['^([0-9]+)_([a-zA-Z0-9-]*)(.*)$'] = 'manufacturer.php?id_manufacturer=$1$3 [QSA,L,E]';
      $tab['RewriteRule']['content']['^lang-([a-z]{2})/(.*)$'] = '$2?isolang=$1 [QSA,L,E]';
      */
      $tab['RewriteRule']['content']['^([a-z0-9]+)\-([a-z0-9]+)(\-[_a-zA-Z0-9-]*)/(.*)\.jpg$'] = 'img/p/$1-$2$3.jpg [L,E]'."\r\n";
      $tab['RewriteRule']['content']['^([0-9]+)(\-[_a-zA-Z0-9-]*)/(.*)\.jpg$'] = 'img/c/$1$2.jpg [L,E]'."\r\n";
      $tab['RewriteRule']['content']['^lang-([a-z]{2})/(.*)/([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$'] = 'product.php?id_product=$3&isolang=$1$5

[L,E]'."\r\n";
      $tab['RewriteRule']['content']['^lang-([a-z]{2})/([0-9]+)\-(.*)\.html(.*)$'] = 'product.php?id_product=$2&isolang=$1$4 [L,E]'."\r\n";
      $tab['RewriteRule']['content']['^lang-([a-z]{2})/([0-9]+)\-(.*)$'] = 'category.php?id_category=$2&isolang=$1 [QSA,L,E]'."\r\n";
      $tab['RewriteRule']['content']['^(.*)/([0-9]+)\-(.*)\.html(.*)$'] = 'product.php?id_product=$2$4 [L,E]'."\r\n";
      $tab['RewriteRule']['content']['^([0-9]+)\-(.*)\.html(.*)$'] = 'product.php?id_product=$1$3 [L,E]'."\r\n";
      $tab['RewriteRule']['content']['^([0-9]+)\-(.*)$'] = 'category.php?id_category=$1 [QSA,L,E]'."\r\n";
      $tab['RewriteRule']['content']['^content/([0-9]+)\-(.*)$'] = 'cms.php?id_cms=$1 [QSA,L,E]'."\r\n";
      $tab['RewriteRule']['content']['^([0-9]+)__(.*)$'] = 'supplier.php?id_supplier=$1$3 [QSA,L,E]'."\r\n";
      $tab['RewriteRule']['content']['^([0-9]+)_(.*)$'] = 'manufacturer.php?id_manufacturer=$1$3 [QSA,L,E]'."\r\n";
      $tab['RewriteRule']['content']['^tag/(.*)\/(.*)$'] = 'search.php?tag=$1$2 [L,E]'."\r\n";
      $tab['RewriteRule']['content']['^lang-([a-z]{2})/tag/(.*)\/(.*)$'] = 'search.php?tag=$2&isolang=$1$3 [L,E]'."\r\n";
$tab['RewriteRule']['content']['^lang-([a-z]{2})/(.*)$'] = '$2?isolang=$1 [QSA,L,E]'."\r\n";


จะเห็นว่าส่วนของ RewriteRule จะมี tag เพิ่มขึ้นมา ในส่วนของ tag ผมจะบอกวิธีปรับแต่งในขั้นตอนถัดไปนะครับ

เมื่อทำตามด้านบนแล้วในส่วนของ admin หรือ Back office คุณจะสามารถใส่คำภาษาไทยได้ ในส่วนของ Friendly url ของหน้าเพิ่มหรือแก้ไข Products หรือ Categories และสามารถ Generate ไฟล์ .htaccess ที่ support url ภาษาไทยได้ ในไฟล์ .htaccess เวลาเปิดขึ้นมาก็จะอ่านรู้เรื่องครับ ไม่ติดกันเป็นขบวนรถไฟ แต่ในส่วนของการ Generate การเว้นบรรทัดของไฟล์ robot.txt ผมยังไม่ทำไว้ให้นะครับ กลัวจะสับสนไปมากกว่านี้ หรือท่านไหนต้องการทำ ก็ดูที่ส่วน if (Tools::isSubmit('submitRobots')) ลงไปด้านล่างนะครับ ตรงไหนมี \n ก็ให้เติม \r เข้าไปด้านหน้า จะได้เป็น \r\n ถ้าเป็น \n\n ก็ให้เติมแค่ \r\n\n ก็พอ เท่านี้ไฟล์ robot.txt ของท่านก็จะอ่านรู้เรื่องแล้ว

วิธี Generate ไฟล์ .htaccess แบบถูกวิธี
- สร้างไฟล์ .htaccess ที่ว่างเปล่า(หรือไม่ว่างเปล่าก็ได้) ไปวางไว้ที่โฟลเดอร์ prestashop หรือ root แรกของเว็ป
- ไปยัง Back office คลิกที่ Tab Preferences และเปิดใช้งาน Friendly URL
- ที่ Back office คลิกที่ Tab Tools > Generators และกดปุ่ม 'Generate .htaccess file'

« แก้ไขครั้งสุดท้าย: 26 มกราคม 2010, 17:39:39 โดย kennn » บันทึกการเข้า

kennn
Verified Seller
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 149
ออฟไลน์ ออฟไลน์

กระทู้: 1,199



ดูรายละเอียด
« ตอบ #1 เมื่อ: 30 พฤศจิกายน 2009, 18:22:41 »

ปรับแต่ง Modules ให้เข้ากันกับ Friendly URL

ผมได้ทำการปรับแต่ง Modules ทั้งหมด 3 ตัวนะครับ คือ Block Languages, Block Tag และ Block Search ส่วนใหญ่จะเป็นการ Decode คำภาษาไทยให้อ่านรู้เรื่องเมื่อเปิดใช้งาน Friendly URL นะครับ
การปรับ Block Language
เปิดไฟล์ prestashop/modules/blocklanguages/bloglanguages.php ไปที่ function hookTop($params)
อ้างถึง
$smarty->assign('languages', $languages);
แก้เป็น
อ้างถึง
$smarty->assign(array('languages'=>$languages, 'rewrite_settings'=>Configuration::get('PS_REWRITING_SETTINGS')));
เป็นการเพิ่มตัวแปร 'rewrite_settings' เข้ามาเพื่อตรวจสอบว่าได้เปิดใช้งาน Friendly URL หรือไม่ ถ้าเปิดใช้ก็ปรับให้ลิงค์ทำการ Decode คำภาษาไทยให้อ่านรู้เรื่อง

ต่อมาเปิดไฟล์ prestashop/modules/blocklanguages/blocklanguages.tpl
อ้างถึง
<a href="{$link->getLanguageLink($language.id_lang, $language.name)}" title="{$language.name}">
แก้เป็น
อ้างถึง
<a href="{if $rewrite_settings == 1}{$link->getLanguageLink($language.id_lang, $language.name)|urldecode}{else}{$link->getLanguageLink($language.id_lang, $language.name)}{/if}" title="{$language.name}">
ส่วนนี้ถ้าท่านใดต้องการให้คำภาษาไทยอ่านรู้เรื่องตอนที่ยังไม่เปิดใช้ Friendly URL ก็ให้ทำตามนี้ครับ แต่มีข้อเสียครับ ให้ดูที่หมายเหตุด่านล่าง *
อ้างถึง
<a href="{$link->getLanguageLink($language.id_lang, $language.name)|urldecode}" title="{$language.name}">

การปรับ Block Tags
เปิดไฟล์ prestashop/modules/blocktags/blocktags.php ไปที่ function hookLeftColumn($params)
อ้างถึง
$smarty->assign('tags', $tags);
แก้เป็น
อ้างถึง
$smarty->assign(array('tags'=>$tags, 'rewrite_settings'=>Configuration::get('PS_REWRITING_SETTINGS')));

เปิดไฟล์ prestashop/modules/blocktags/blocktags.tpl
อ้างถึง
<a href="{$base_dir}search.php?tag={$tag.name|urlencode}" title="{l s='More about' mod='blocktags'} {$tag.name|escape:htmlall:'UTF-8'}" class="{$tag.class} {if $smarty.foreach.myLoop.last}last_item{elseif $smarty.foreach.myLoop.first}first_item{else}item{/if}">{$tag.name|escape:htmlall:'UTF-8'}</a>
แก้เป็น
อ้างถึง
{if $rewrite_settings == 1}
      <a href="{$base_dir}tag/{$tag.name}/" title="{l s='More about' mod='blocktags'} {$tag.name|escape:htmlall:'UTF-8'}" class="{$tag.class} {if $smarty.foreach.myLoop.last}last_item{elseif $smarty.foreach.myLoop.first}first_item{else}item{/if}">{$tag.name|escape:htmlall:'UTF-8'}</a>
        {else}
        <a href="{$base_dir}search.php?tag={$tag.name|urlencode}" title="{l s='More about' mod='blocktags'} {$tag.name|escape:htmlall:'UTF-8'}" class="{$tag.class} {if $smarty.foreach.myLoop.last}last_item{elseif $smarty.foreach.myLoop.first}first_item{else}item{/if}">{$tag.name|escape:htmlall:'UTF-8'}</a>
        {/if}
เป็นการปรับให้ Link ของ Tag ดูดีในแบบ Friendly URL ครับ เมื่อเปิดใช้งาน Friendly URL
ท่านใดต้องการให้คำภาษาไทยอ่านรู้เรื่องตอนที่ยังไม่เปิดใช้ Friendly URL ก็ให้ทำตามนี้ครับ แต่มีข้อเสียครับ ให้ดูที่หมายเหตุด่านล่าง *
อ้างถึง
<a href="{$base_dir}search.php?tag={$tag.name}" title="{l s='More about' mod='blocktags'} {$tag.name|escape:htmlall:'UTF-8'}" class="{$tag.class} {if $smarty.foreach.myLoop.last}last_item{elseif $smarty.foreach.myLoop.first}first_item{else}item{/if}">{$tag.name|escape:htmlall:'UTF-8'}</a>

การปรับ Block Search ** ถ้าโหลด Module Block Search ที่ผมทำไว้ให้โหลดแล้ว ไม่ต้องแก้ไขส่วน Block Search ด้านล่างนี้แล้วนะครับ
เปิดไฟล์ prestashop/modules/blocksearch/blocksearch.tpl และ prestashop/modules/blocksearch/blocksearch-top.tpl ขึ้นมาพร้อมกันเลยครับ หาบรรทัด
อ้างถึง
$('document').ready( function() {
         $("#search_query").autocomplete(
            '{/literal}{$base_dir}{literal}search.php', {
            minChars: 3,
            max:10,
            width:500,
            scroll: false,
            formatItem:formatSearch,
            extraParams:{ajaxSearch:1,id_lang:{/literal}{$cookie->id_lang}{literal}}
         }).result(redirectSearch)
แก้ไขดังนี้
อ้างถึง
$('document').ready( function() {
         $("#search_query").autocomplete(
            '{/literal}{$base_dir}{literal}search.php', {
            minChars: 1,
            max:10,
            width:500,
            scroll: false,
            scrollHeight: 300,
            formatItem:formatSearch,
            extraParams:{ajaxSearch:1,id_lang:{/literal}{$cookie->id_lang}{literal}}
         }).result(redirectSearch)
แก้ไขทั้งสองไฟล์เลยนะครับ ผมขออธิบายค่าต่างๆดังนี้ครับ

minChars: 1, ตรงนี้จะเป็นค่าที่กำหนดว่าจะให้ค้นหาคำค้นหาเริ่มต้นที่อักษรตัวที่เท่าไหร่ ถ้าตั้งเป็น 1 พอพิมพ์อักษรไปตัวแรกก็ค้นหาเลยครับ
max:10,      เป็นค่าแสดงจำนวนแถวของข้อมูลสินค้าภายใต้ช่อง Search ค่านี้ถ้าปรับมากกว่า 10 เราจำเป็นต้องไปปรับค่า LIMIT ในไฟล์ classes/search.php ด้วยครับ ถึงจะมีผล
width:500,   เป็นค่าที่กำหนดความกว้างที่แสดงข้อมูลสินค้าใต้ช่อง Search
scroll: false,  ค่านี้จะเป็นตัวเปิดปิดการทำงานของ Scroll Bar ในส่วนแสดงข้อมูลสินค้าใต้ช่อง Search ปรับค่า width และเปิด scroll จะเห็น Scroll เวลา Search
scrollHeight: 300, ปรับความสูงของส่วนแสดงสินค้าใต้ช่อง Search

ส่วนพวกนี้ไปปรับกันเองนะครับ ความชอบคงไม่เหมือนกัน ต่อมาก็ไปที่ไฟล์  prestashop/js/jquery/jquery.autocomplete.js หาบรรทัดประมาณแถว 409
อ้างถึง
return value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + term.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi, "\\$1") + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "<strong>$1</strong>");
ส่วนที่ไฮไลสีแดงไว้เป็นส่วนแสดงผลเวลา ตัวอักษรที่ถูกค้นหาเจอจะแสดงเป็นตัวหนา สามารถตกแต่งตัวอักษรแบบ HTML ได้เพิ่มเติมครับ เช่น
อ้างถึง
return value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + term.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi, "\\$1") + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "<font color=red><u><strong>$1</strong></u></font>");

* หมายเหตุ การ Decode url เมื่อไม่ได้ทำการเปิด Friendly URL จะมีปัญหากับ URL ที่เป็นแบบนี้ เช่น
hxxp://www.domain.com/search.php?tag=ของแต่งบ้าน  ถ้าคลิกจากลิงค์ไปจะค้นหาข้อมูลได้ปกติ แต่ถ้าเมื่อไหร่มี Refresh หรือมีการ Copy Link ไปเปิดใน ie จะเกิดปัญหาค้นหาข้อมูลไม่เจอ ตัวอักษรจะเป็น Westurn มั้งครับไม่แน่ใจ แต่ที่แน่ๆ เป็นกับ Browser ครับ ใน firefox ก็คงจะเป็นด้วย ส่วนนี้แล้วแต่เพื่อนๆครับว่าจะปรับหรือไม่ปรับใช้ แต่ถ้าเปิด Friendly URL จะหมดปัญหาครับ

« แก้ไขครั้งสุดท้าย: 03 ธันวาคม 2009, 20:12:01 โดย kennn » บันทึกการเข้า

kennn
Verified Seller
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 149
ออฟไลน์ ออฟไลน์

กระทู้: 1,199



ดูรายละเอียด
« ตอบ #2 เมื่อ: 30 พฤศจิกายน 2009, 18:23:22 »

4 ไฟล์หลักที่ต้องปรับแต่ง เพื่อการค้นหาคำภาษาไทย

1. prestashop/init.php ให้หาบรรทัดตามนี้ครับ จะมีอยู่ 2 ที่ แก้ทั้งสองที่เลยครับ
อ้างถึง
'come_from' => 'http://'.htmlspecialchars($_SERVER['HTTP_HOST'], ENT_COMPAT, 'UTF-8').htmlentities($_SERVER['REQUEST_URI']),
แก้เป็น
อ้างถึง
'come_from' => 'http://'.htmlspecialchars($_SERVER['HTTP_HOST'], ENT_COMPAT, 'UTF-8').htmlentities($_SERVER['REQUEST_URI'], ENT_NOQUOTES, 'utf-8'),
ตรงฟังค์ชั่น htmlentities บางทีมักจะมีปัญหาทำให้ข้อมูล Charactor หรือภายใน View Source ไม่ใช่ UTF-8 ครับ ทำให้ค้นหาข้อมูลไม่เจอ

2. prestashop/classes/Link.php ส่วนนี้จะเป็นการปรับแต่งในส่วนของลิงค์ ลิสจำนวนรายการสินค้าต่อหน้า 10/20/50 และลิงค์ในส่วนของ Sort By(จัดเรียงสินค้า)
ดูที่ public function getPaginationLink
อ้างถึง
if ($ifNb AND $ifSort AND $ifPagination AND !is_array($value))
               !$array ? ($vars .= ((!$n++ AND ($this->allow == 1 OR $url == $this->url)) ? '?' : '&amp;').urlencode($k).'='.urlencode($value)) : ($vars[urlencode($k)] = urlencode($value));
แก้เป็น
อ้างถึง
if ($ifNb AND $ifSort AND $ifPagination AND !is_array($value))
               !$array ? ($vars .= ((!$n++ AND ($this->allow == 1 OR $url == $this->url)) ? '?' : '&').($k).'='.($value)) : ($vars[($k)] = ($value));
จะเป็นการปรับแต่งคำในลิงค์ที่เป็นภาษาไทย เป็นคำที่อ่านรู้เรื่อง เวลา SE มาเก็บข้อมูลไป

3. prestashop/classes/Tools.php ไปที่ static public function link_rewrite($str, $utf8_decode = false)
อ้างถึง
if (Tools::strlen(htmlentities($char)) > 1)
แก้เป็น
อ้างถึง
if (Tools::strlen(htmlentities($char, ENT_COMPAT, 'UTF-8')) > 1)


อ้างถึง
elseif (preg_match('|[[:alpha:]]{1}|u', $char))
แก้เป็น
อ้างถึง
elseif (preg_match('|[a-zA-Zก-๙]{1}|u', $char))
ส่วนนี้ช่วยในการใส่ชื่อภาษาไทยให้กับ Manufacture, Supplier จากปกติจะใส่ไม่ได้

4. prestashop/classes/Search.php
อ้างถึง
define('PREG_CLASS_SEARCH_EXCLUDE',
'\x{0}\x{3a}-\x{40}\x{5b}-\x{60}\x{7b}-\x{bf}\x{d7}\x{f7}\x{2b0}-'.
'\x{385}\x{387}\x{3f6}\x{482}-\x{489}\x{559}-\x{55f}\x{589}-\x{5c7}\x{5f3}-'.
'\x{61f}\x{640}\x{64b}-\x{65e}\x{66a}-\x{66d}\x{670}\x{6d4}\x{6d6}-\x{6ed}'.
'\x{6fd}\x{6fe}\x{700}-\x{70f}\x{711}\x{730}-\x{74a}\x{7a6}-\x{7b0}\x{901}-'.
'\x{903}\x{93c}\x{93e}-\x{94d}\x{951}-\x{954}\x{962}-\x{965}\x{970}\x{981}-'.
'\x{983}\x{9bc}\x{9be}-\x{9cd}\x{9d7}\x{9e2}\x{9e3}\x{9f2}-\x{a03}\x{a3c}-'.
'\x{a4d}\x{a70}\x{a71}\x{a81}-\x{a83}\x{abc}\x{abe}-\x{acd}\x{ae2}\x{ae3}'.
'\x{af1}-\x{b03}\x{b3c}\x{b3e}-\x{b57}\x{b70}\x{b82}\x{bbe}-\x{bd7}\x{bf0}-'.
'\x{c03}\x{c3e}-\x{c56}\x{c82}\x{c83}\x{cbc}\x{cbe}-\x{cd6}\x{d02}\x{d03}'.
'\x{d3e}-\x{d57}\x{d82}\x{d83}\x{dca}-\x{df4}\x{e31}\x{e34}-\x{e3f}\x{e46}-'.
'\x{e4f}\x{e5a}\x{e5b}\x{eb1}\x{eb4}-\x{ebc}\x{ec6}-\x{ecd}\x{f01}-\x{f1f}'.
'\x{f2a}-\x{f3f}\x{f71}-\x{f87}\x{f90}-\x{fd1}\x{102c}-\x{1039}\x{104a}-'.
'\x{104f}\x{1056}-\x{1059}\x{10fb}\x{10fc}\x{135f}-\x{137c}\x{1390}-\x{1399}'.
'\x{166d}\x{166e}\x{1680}\x{169b}\x{169c}\x{16eb}-\x{16f0}\x{1712}-\x{1714}'.
'\x{1732}-\x{1736}\x{1752}\x{1753}\x{1772}\x{1773}\x{17b4}-\x{17db}\x{17dd}'.
'\x{17f0}-\x{180e}\x{1843}\x{18a9}\x{1920}-\x{1945}\x{19b0}-\x{19c0}\x{19c8}'.
'\x{19c9}\x{19de}-\x{19ff}\x{1a17}-\x{1a1f}\x{1d2c}-\x{1d61}\x{1d78}\x{1d9b}-'.
'\x{1dc3}\x{1fbd}\x{1fbf}-\x{1fc1}\x{1fcd}-\x{1fcf}\x{1fdd}-\x{1fdf}\x{1fed}-'.
'\x{1fef}\x{1ffd}-\x{2070}\x{2074}-\x{207e}\x{2080}-\x{2101}\x{2103}-\x{2106}'.
'\x{2108}\x{2109}\x{2114}\x{2116}-\x{2118}\x{211e}-\x{2123}\x{2125}\x{2127}'.
'\x{2129}\x{212e}\x{2132}\x{213a}\x{213b}\x{2140}-\x{2144}\x{214a}-\x{2b13}'.
'\x{2ce5}-\x{2cff}\x{2d6f}\x{2e00}-\x{3005}\x{3007}-\x{303b}\x{303d}-\x{303f}'.
'\x{3099}-\x{309e}\x{30a0}\x{30fb}-\x{30fe}\x{3190}-\x{319f}\x{31c0}-\x{31cf}'.
'\x{3200}-\x{33ff}\x{4dc0}-\x{4dff}\x{a015}\x{a490}-\x{a716}\x{a802}\x{a806}'.
'\x{a80b}\x{a823}-\x{a82b}\x{d800}-\x{f8ff}\x{fb1e}\x{fb29}\x{fd3e}\x{fd3f}'.
'\x{fdfc}-\x{fe6b}\x{feff}-\x{ff0f}\x{ff1a}-\x{ff20}\x{ff3b}-\x{ff40}\x{ff5b}-'.
'\x{ff65}\x{ff70}\x{ff9e}\x{ff9f}\x{ffe0}-\x{fffd}');
แก้เป็น
อ้างถึง
define('PREG_CLASS_SEARCH_EXCLUDE',
'\x{0}\x{3a}-\x{40}\x{5b}-\x{60}\x{7b}-\x{bf}\x{d7}\x{f7}\x{2b0}-'.
'\x{385}\x{387}\x{3f6}\x{482}-\x{489}\x{559}-\x{55f}\x{589}-\x{5c7}\x{5f3}-'.
'\x{61f}\x{640}\x{64b}-\x{65e}\x{66a}-\x{66d}\x{670}\x{6d4}\x{6d6}-\x{6ed}'.
'\x{6fd}\x{6fe}\x{700}-\x{70f}\x{711}\x{730}-\x{74a}\x{7a6}-\x{7b0}\x{901}-'.
'\x{903}\x{93c}\x{93e}-\x{94d}\x{951}-\x{954}\x{962}-\x{965}\x{970}\x{981}-'.
'\x{983}\x{9bc}\x{9be}-\x{9cd}\x{9d7}\x{9e2}\x{9e3}\x{9f2}-\x{a03}\x{a3c}-'.
'\x{a4d}\x{a70}\x{a71}\x{a81}-\x{a83}\x{abc}\x{abe}-\x{acd}\x{ae2}\x{ae3}'.
'\x{af1}-\x{b03}\x{b3c}\x{b3e}-\x{b57}\x{b70}\x{b82}\x{bbe}-\x{bd7}\x{bf0}-'.
'\x{c03}\x{c3e}-\x{c56}\x{c82}\x{c83}\x{cbc}\x{cbe}-\x{cd6}\x{d02}\x{d03}'.
'\x{d3e}-\x{d57}\x{d82}\x{d83}\x{dca}-\x{df4}\x{e3f}\x{e46}\x{e4f}' .
'\x{e5a}\x{e5b}\x{eb1}\x{eb4}-\x{ebc}\x{ec6}-\x{ecd}\x{f01}-\x{f1f}' .
'\x{f2a}-\x{f3f}\x{f71}-\x{f87}\x{f90}-\x{fd1}\x{102c}-\x{1039}\x{104a}-' .
'\x{104f}\x{1056}-\x{1059}\x{10fb}\x{10fc}\x{135f}-\x{137c}\x{1390}-\x{1399}' .
'\x{166d}\x{166e}\x{1680}\x{169b}\x{169c}\x{16eb}-\x{16f0}\x{1712}-\x{1714}' .
'\x{2108}\x{2109}\x{2114}\x{2116}-\x{2118}\x{211e}-\x{2123}\x{2125}\x{2127}'.
'\x{2129}\x{212e}\x{2132}\x{213a}\x{213b}\x{2140}-\x{2144}\x{214a}-\x{2b13}'.
'\x{2ce5}-\x{2cff}\x{2d6f}\x{2e00}-\x{3005}\x{3007}-\x{303b}\x{303d}-\x{303f}'.
'\x{3099}-\x{309e}\x{30a0}\x{30fb}-\x{30fe}\x{3190}-\x{319f}\x{31c0}-\x{31cf}'.
'\x{3200}-\x{33ff}\x{4dc0}-\x{4dff}\x{a015}\x{a490}-\x{a716}\x{a802}\x{a806}'.
'\x{a80b}\x{a823}-\x{a82b}\x{d800}-\x{f8ff}\x{fb1e}\x{fb29}\x{fd3e}\x{fd3f}'.
'\x{fdfc}-\x{fe6b}\x{feff}-\x{ff0f}\x{ff1a}-\x{ff20}\x{ff3b}-\x{ff40}\x{ff5b}-'.
'\x{ff65}\x{ff70}\x{ff9e}\x{ff9f}\x{ffe0}-\x{fffd}');
ส่วนนี้จะเป็น Pattern ในการตัดคำออกจากคำค้นหา ผมพบว่ามีการตัด 'ย' ออกด้วย

ต่อมา
อ้างถึง
AND sw.word LIKE '.($word[0] == '-' ? ' \''.pSQL(substr($word, 1, PS_SEARCH_MAX_WORD_LENGTH)).'%\'' : '\''.pSQL(substr($word, 0, PS_SEARCH_MAX_WORD_LENGTH)).'%\'').'
แก้เป็น
อ้างถึง
AND sw.word LIKE '.($word[0] == '-' ? ' \''.pSQL(Tools::substr($word, 1, PS_SEARCH_MAX_WORD_LENGTH)).'%\'' : '\''.pSQL(Tools::substr($word, 0, PS_SEARCH_MAX_WORD_LENGTH)).'%\'').'


ต่อมา
อ้างถึง
$scoreArray[] = 'sw.word LIKE \''.pSQL(substr($word, 0, PS_SEARCH_MAX_WORD_LENGTH)).'%\'';
แก้เป็น
อ้างถึง
$scoreArray[] = 'sw.word LIKE \''.pSQL(Tools::substr($word, 0, PS_SEARCH_MAX_WORD_LENGTH)).'%\'';


ต่อมา ตรงนี้จะขอกระโดดข้ามไปท้ายๆไฟล์ก่อน เพราะเป็นส่วนเก็บคำค้นหาเข้าตาราง Search_word ให้ไปที่ public static function indexation($full = false)
อ้างถึง
$products = $db->ExecuteS('
      SELECT p.id_product, pl.id_lang, pl.name as pname, p.reference, p.ean13, pl.description_short, pl.description, cl.name as cname, m.name as mname
      FROM '._DB_PREFIX_.'product p
      LEFT JOIN '._DB_PREFIX_.'product_lang pl ON p.id_product = pl.id_product
      LEFT JOIN '._DB_PREFIX_.'category_lang cl ON (cl.id_category = p.id_category_default AND pl.id_lang = cl.id_lang)
      LEFT JOIN '._DB_PREFIX_.'manufacturer m ON m.id_manufacturer = p.id_manufacturer
      WHERE p.indexed = 0', false);
แก้เป็น
อ้างถึง
/*
      $products = $db->ExecuteS('
      SELECT p.id_product, pl.id_lang, pl.name as pname, p.reference, p.ean13, pl.description_short, pl.description, cl.name as cname, m.name as mname
      FROM '._DB_PREFIX_.'product p
      LEFT JOIN '._DB_PREFIX_.'product_lang pl ON p.id_product = pl.id_product
      LEFT JOIN '._DB_PREFIX_.'category_lang cl ON (cl.id_category = p.id_category_default AND pl.id_lang = cl.id_lang)
      LEFT JOIN '._DB_PREFIX_.'manufacturer m ON m.id_manufacturer = p.id_manufacturer
      WHERE p.indexed = 0', false);
      */

      $products = $db->ExecuteS('
      SELECT p.id_product, pl.id_lang, pl.name as pname, p.reference, p.ean13, cl.name as cname, m.name as mname
      FROM '._DB_PREFIX_.'product p
      LEFT JOIN '._DB_PREFIX_.'product_lang pl ON p.id_product = pl.id_product
      LEFT JOIN '._DB_PREFIX_.'category_lang cl ON (cl.id_category = p.id_category_default AND pl.id_lang = cl.id_lang)
      LEFT JOIN '._DB_PREFIX_.'manufacturer m ON m.id_manufacturer = p.id_manufacturer
      WHERE p.indexed = 0', false);
จะเห็นว่าผมตัด pl.description_short, pl.description, ออก เพราะส่วนนี้จะเป็นตัวกำหนดให้โปรแกรมเก็บคำค้นหาจากในส่วนของ Short Description และ Long Description ซึ่งก่อนหน้าที่ผมบอกไปแล้วว่า ถ้าข้อมูลสินค้าใครเยอะๆ ฐานข้อมูลแย่แน่ๆเลย ในส่วนนี้เราไม่จำเป็นต้องให้โปรแกรมไปเก็บคำค้นหาก็ได้ เก็บคำค้นหาจากชื่อสินค้า, ชื่อหมวดหมู่, ชื่อผู้ผลิต, ชื่อสินค้าจาก Feature แล้วก็ Tags ก็พอแล้วครับ อนาคตสดใสกว่า

บรรทัดถัดมา
อ้างถึง
$word = substr($word, 0, PS_SEARCH_MAX_WORD_LENGTH);
แก้เป็น
อ้างถึง
$word = Tools::substr($word, 0, PS_SEARCH_MAX_WORD_LENGTH);
ฟังค์ชั่น substr อีกแล้วครับท่าน ตรงนี้แหละครับที่ทำให้คำค้นหาที่อยู่ใน Tag ของท่านค้นหาข้อมูลสินค้าไม่เจอ ทั้งๆที่มีคำค้นหาอยู่ใน Tag แล้วก็มีสินค้าอยู่ เหตุผลเพราะว่า เมื่อคุณเพิ่มคำค้นหาเข้าไปใน Tags หรือส่วนต่างๆที่โปรแกรมจะไปเก็บคำค้นหา และถ้าคุณพิมพ์คำค้นหาเป็นภาษาไทย และติด สระเอ แอ เข้าไป เช่น ของแต่งบ้าน (คำนี้ผมไปเห็นอยู่เว็ปนึงครับ แอบเข้าไปเล่น อิอิอิ) คำค้นหาที่เป็นภาษาไทยบางคำนั้นจะไม่ถูกเก็บเข้าไปในตาราง Search_word เป็นเหตุให้คำค้นหาไม่อ้างอิงกับ id_product ตัวใดเลย ทำให้เวลา Search หรือคลิกที่ลิงค์ใน Blog Tag จะไม่เจอข้อมูลสินค้าครับ

ต่อมา ส่วนของ Ajax Search หรือช่อง Search เมื่อเราพิมตัวอักษรเข้าไป แล้วจะมี List สินค้าโชว์ขึ้นมาใต้ช่อง Search
อ้างถึง
if ($ajax)
      {
         $queryResults = '
         SELECT p.id_product, pl.name as pname, IF(cl.name REGEXP "^[0-9]{2}\\.", SUBSTRING(cl.name, 4), cl.name) as cname   '.$score.', cl.link_rewrite as crewrite, pl.link_rewrite as prewrite
         FROM '._DB_PREFIX_.'product p
         LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON (p.`id_product` = pl.`id_product` AND pl.`id_lang` = '.intval($id_lang).')
         LEFT JOIN `'._DB_PREFIX_.'category_lang` cl ON (p.`id_category_default` = cl.`id_category` AND cl.`id_lang` = '.intval($id_lang).')
         WHERE '.implode(' AND ', $whereArray).'
         AND p.active = 1
         AND p.`id_product` IN (
            SELECT cp.`id_product`
            FROM `'._DB_PREFIX_.'category_group` cg
            LEFT JOIN `'._DB_PREFIX_.'category_product` cp ON (cp.`id_category` = cg.`id_category`)
            WHERE cg.`id_group` '.(!$cookie->id_customer ?  '= 1' : 'IN (SELECT id_group FROM '._DB_PREFIX_.'customer_group WHERE id_customer = '.intval($cookie->id_customer).')').'
         )
         ORDER BY position DESC
         LIMIT 20';
         return Db::getInstance()->ExecuteS($queryResults);
      }
แก้เป็น
อ้างถึง
$words = str_replace(' ', '', Search::sanitize($expr, $id_lang));
      
      if ($ajax)
      {
         $queryResults = '
         SELECT p.id_product, pl.name as pname, IF(cl.name REGEXP "^[0-9]{2}\\.", SUBSTRING(cl.name, 4), cl.name) as cname   '.$score.', cl.link_rewrite as crewrite, pl.link_rewrite as prewrite
         FROM '._DB_PREFIX_.'product p
         LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON (p.`id_product` = pl.`id_product` AND pl.`id_lang` = '.intval($id_lang).')
         LEFT JOIN `'._DB_PREFIX_.'category_lang` cl ON (p.`id_category_default` = cl.`id_category` AND cl.`id_lang` = '.intval($id_lang).')
         WHERE '.implode(' AND ', $whereArray).' AND pl.`name` LIKE \'%'.$words.'%\'
         AND p.active = 1
         AND p.`id_product` IN (
            SELECT cp.`id_product`
            FROM `'._DB_PREFIX_.'category_group` cg
            LEFT JOIN `'._DB_PREFIX_.'category_product` cp ON (cp.`id_category` = cg.`id_category`)
            WHERE cg.`id_group` '.(!$cookie->id_customer ?  '= 1' : 'IN (SELECT id_group FROM '._DB_PREFIX_.'customer_group WHERE id_customer = '.intval($cookie->id_customer).')').'
         )
         ORDER BY position DESC
         LIMIT 10';
         return Db::getInstance()->ExecuteS($queryResults);
      }
ส่วนที่ไฮไลสีเขียว คือ การ ปรับค่า LIMIT มีความจำเป็นที่จะต้องปรับก็ต่อเมื่อ ปรับค่า max ในไฟล์ prestashop/modules/blogsearch/blogsearch.php หรือprestashop/modules/blogsearch/blogsearch-top.php

ส่วนที่ไฮไลสีแดงเข้ามา คือ

$words = str_replace(' ', '', Search::sanitize($expr, $id_lang)); เป็นส่วนที่นำคำค้นหาไปตรวจสอบและตัดตัวอักษรพิเศษออกไปแล้ว นำเข้าตัวแปร $word ตัวแปรนี้จะใช้ในการนำคำค้นหาไปค้นในฐานข้อมูลจากตาราง Product_lang ฟิวล์ของ name(เก็บชื่อของสินค้า)

AND pl.`name` LIKE \'%'.$words.'%\' ส่วนนี้จะเพิ่มหรือไม่เพิ่มก็ได้ เพราะผมเชื่อว่า แต่ละคนอาจชอบการทำงานแตกต่างกัน เพิ่มหรือไม่เพิ่มตรงนี้จะทำงานแตกต่างกันอย่างไร เดิมที่การทำงานตรงส่วนนี้เมื่อไม่ได้เพิ่มเติมโค้ดเข้าไป โปรแกรมจะนำคำค้นหาไปค้นหาคำในตาราง Search_word เท่านั้น คือ คำค้นหาคำนั้นตรงกับ id_product ตัวไหน ก็จะนำข้อมูล name ของ id_product ตัวนั้นๆมาแสดงภายใต้ช่อง Search แต่คำค้นหาไม่จำเป็นต้องมีอยู่ในฟิวล์ name(ฟิวล์เก็บชื่อสินค้า) แต่เมื่อคุณเติมโค้ดที่เพิ่มมาเข้าไป และเมื่อเราพิมพ์คำค้นหาลงไปในช่อง Search ถ้าคำค้นหาไม่มีอยู่ในชื่อสินค้าด้วยข้อมูลสินค้าก็จะไม่แสดงออกมาภายใต้ช่อง Search ครับ และถ้าผมเปลี่ยน AND เป็น OR จะได้ข้อมูลออกมาเท่ากับหรือมากกว่าเดิมคือ โปรแกรมจะเอาคำค้นหาไปค้นที่ตาราง Search_word และ Product_lang หรือก็คือ เอาข้อมูลที่ตรงกับคำค้นหาในตาราง Search_word และข้อมูลที่ตรงกับชื่อสินค้า(จะตรงหรือไม่ตรงก็ได้)ในตาราง Product_lang ออกมาแสดงภายใต้ช่อง Search แต่ไม่จำเป็นที่ id_product ของชื่อสินค้าตัวนั้นๆต้องอยู่ในตาราง Search_word

สรุปอีกรอบให้อ่านกัน
- ถ้าไม่เพิ่มโค้ดใหม่เข้าไป คำค้นหาต้องมีอยู่ในตาราง Search_word เท่านั้น
- ถ้าเพิ่มโค้ดใหม่เข้าไปเป็น AND คำค้นหาต้องมีอยู่ในตาราง Search_word และต้องมีอยู่ในฟิวล์ที่เก็บชื่อของสินค้าด้วย และ id_product ต้องอยู่ในตาราง Search_word ด้วยเท่านั้น ถึงจะได้ข้อมูลสินค้าออกมา
- ถ้าเพิ่มโค้ดใหม่เข้าไปเป็น OR คำค้นหาต้องมีอยู่ในตาราง Search_word แต่จะมีหรือไม่มีอยู่ในฟิวล์ที่เก็บชื่อสินค้าก็ได้ id_product ไม่จำเป็นต้องมีอยู่ในตาราง Search_word ขอให้ชื่อของสินค้าตรงกับคำค้นหาก็จะได้ข้อมูลสินค้าออกมาแสดงด้วย

และยังมีการกำหนดในส่วนนี้อีกครับ AND pl.`name` LIKE \'%'.$words.'%\' ที่ไฮไลสีเขียวไว้ อ้างอิงจากข้อมูล Mysql
การค้นหาข้อมูลในฟิวล์ต่างๆ เช่น pl.name คือ หาในฟิวล์ชื่อข้อมูลสินค้า และสมมุติผมมีข้อมูลดังนี้ 'สี', 'เสีย', 'เส้นเสียง', 'เสียด', 'เสียง' ถ้าผมใส่รูปแบบนี้
pl.`name` LIKE \''.$words.'%\' หมายความว่า ตัวอักษรด้านหน้าต้องตรงกับตัวอักษรที่เราค้นหาทุกคำ เช่น ผมพิมพ์ 'เสี' ผมจะเจอคำว่า 'เสีย', 'เสียง' แต่จะไม่เจอคำว่า 'สี', 'เส้นเสียง'

อีกรูปแบบ pl.`name` LIKE \'%'.$words.'%\' แบบนี้หมายความว่า ตัวอักษรอะไรอยู่ก่อนคำค้นหาก็ได้ เช่น พิมพ์คำว่า 'สีย' จะเจอข้อมูลดังนี้ 'เสีย', 'เส้นเสียง', 'เสียด', 'เสียง'

อย่างที่ผมตั้งหัวข้อเลยครับ ปรับ Search ให้โดนใจ(เรา) ใครอยากให้ Search ในเว็ปของเราทำงานแบบไหน ก็ปรับตั้งแต่ค่า AND OR แล้วก็ % กันตามใจชอบครับ
ในรูปแบบข้างต้นผมจะใช้รูปแบบนี้ AND pl.`name` LIKE \''.$words.'%\' เพราะผมต้องการให้ข้อมูลสินค้าที่ลิสออกมา มีคำเหมือนที่เราพิมพ์เท่านั้น หากคำที่พิมเข้าไปไม่เจอข้อมูลสินค้าใดเลย เราก็ยังมีอีกทางเลือกให้ค้นหา ก็คือ กดปุ่ม Search ที่อยู่ด้านข้าง แต่ของเดิมถ้าไม่มีในลิสใต้ช่อง Ajax Search กดปุ่ม Search ไปก็ไม่เจอข้อมูลครับ ต้องทำการปรับแต่งเพิ่มดังนี้ครับ ค้นหาช่วงนี้(ยังอยู่ในไฟล์ classes/Search.php นะครับ)
อ้างถึง
$queryResults = '
      SELECT SQL_CALC_FOUND_ROWS p.*, pl.`description_short`, pl.`available_now`, pl.`available_later`, pl.`link_rewrite`, pl.`name`,
      t.`rate`, i.`id_image`, il.`legend`, m.`name` AS manufacturer_name
      '.$score.'
      FROM '._DB_PREFIX_.'product p
      LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON (p.`id_product` = pl.`id_product` AND pl.`id_lang` = '.intval($id_lang).')
      LEFT OUTER JOIN `'._DB_PREFIX_.'image` i ON (i.`id_product` = p.`id_product` AND i.`cover` = 1)
      LEFT JOIN `'._DB_PREFIX_.'image_lang` il ON (i.`id_image` = il.`id_image` AND il.`id_lang` = '.intval($id_lang).')
      LEFT JOIN `'._DB_PREFIX_.'tax` t ON (p.`id_tax` = t.`id_tax`)
      LEFT JOIN `'._DB_PREFIX_.'manufacturer` m ON (m.`id_manufacturer` = p.`id_manufacturer`)
      WHERE '.implode(' AND ', $whereArray).'
      AND p.active = 1
      AND p.`id_product` IN (
         SELECT cp.`id_product`
         FROM `'._DB_PREFIX_.'category_group` cg
         LEFT JOIN `'._DB_PREFIX_.'category_product` cp ON (cp.`id_category` = cg.`id_category`)
         WHERE cg.`id_group` '.(!$cookie->id_customer ?  '= 1' : 'IN (SELECT id_group FROM '._DB_PREFIX_.'customer_group WHERE id_customer = '.intval($cookie->id_customer).')').'
      )
      '.($orderBy ? 'ORDER BY  '.$orderBy : '').($orderWay ? ' '.$orderWay : '').'
      LIMIT '.intval(($pageNumber - 1) * $pageSize).','.intval($pageSize);
      $result = Db::getInstance()->ExecuteS($queryResults);
      $total = Db::getInstance()->getValue('SELECT FOUND_ROWS()');
แล้วเพิ่มตรงที่ไฮไลสีแดงเข้าไปครั�
อ้างถึง
$queryResults = '
      SELECT SQL_CALC_FOUND_ROWS p.*, pl.`description`,pl.`description_short`, pl.`available_now`, pl.`available_later`, pl.`link_rewrite`, pl.`name`,
      t.`rate`, i.`id_image`, il.`legend`, m.`name` AS manufacturer_name
      '.$score.'
      FROM '._DB_PREFIX_.'product p
      LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON (p.`id_product` = pl.`id_product` AND pl.`id_lang` = '.intval($id_lang).')
      LEFT OUTER JOIN `'._DB_PREFIX_.'image` i ON (i.`id_product` = p.`id_product` AND i.`cover` = 1)
      LEFT JOIN `'._DB_PREFIX_.'image_lang` il ON (i.`id_image` = il.`id_image` AND il.`id_lang` = '.intval($id_lang).')
      LEFT JOIN `'._DB_PREFIX_.'tax` t ON (p.`id_tax` = t.`id_tax`)
      LEFT JOIN `'._DB_PREFIX_.'manufacturer` m ON (m.`id_manufacturer` = p.`id_manufacturer`)
      WHERE '.implode(' AND ', $whereArray).' OR pl.`name` LIKE \'%'.$words.'%\' OR pl.`description_short` LIKE \'%'.$words.'%\' OR pl.`description` LIKE \'%'.$words.'%\'
      AND p.active = 1
      AND p.`id_product` IN (
         SELECT cp.`id_product`
         FROM `'._DB_PREFIX_.'category_group` cg
         LEFT JOIN `'._DB_PREFIX_.'category_product` cp ON (cp.`id_category` = cg.`id_category`)
         WHERE cg.`id_group` '.(!$cookie->id_customer ?  '= 1' : 'IN (SELECT id_group FROM '._DB_PREFIX_.'customer_group WHERE id_customer = '.intval($cookie->id_customer).')').'
      )
      '.($orderBy ? 'ORDER BY  '.$orderBy : '').($orderWay ? ' '.$orderWay : '').'
      LIMIT '.intval(($pageNumber - 1) * $pageSize).','.intval($pageSize);
      $result = Db::getInstance()->ExecuteS($queryResults);
      $total = Db::getInstance()->getValue('SELECT FOUND_ROWS()');
ส่วนที่เพิ่มเข้าไปจะเป็นการเพิ่มการค้นหาในฟิวล์ name(ชื่อสินค้า), description(รายละเอียดสินค้าแบบเต็ม), description_short(รายละเอียดสินค้าแบบย่อ) เราสามารถเอาฟิวล์ที่ไม่ต้องการให้เข้าไปค้นหาออกได้ โดยตัดช่วงนี้ออกครับ OR pl.`ชื่อฟิวล์` LIKE \'%'.$words.'%\'

ถ้าอ่านแล้วยังงงๆ ก็ลองทดสอบเลยครับ ผมจะคอยเข้ามาตอบปัญหาให้ ผมหวังว่าเพื่อนๆจะมี Search ดีๆที่มีประโยชน์ตามรูปแบบของตัวเองไว้ใช้ในร้านกันทุกคนนะครับ และหากเนื้อหาบางส่วนผิดพลาดไปบ้าง ผมก็ขออภัยไว้ ณ ที่นี้นะครับ


ส่งท้ายครับ แจก 3D Tags Flash support (for Prestashop)ภาษาไทยครับ ไม่รู้ว่ามีใช้กันหรือยังนะครับ เอาเป็นว่าแจกไว้ก่อน ตัวนี้แก้เองเลยครับ
hxxp://www.upload-thai.com/download.php?id=59ee401cb90c5f96b4c43f70147c1240


« แก้ไขครั้งสุดท้าย: 02 ธันวาคม 2009, 02:29:58 โดย kennn » บันทึกการเข้า

mrdreamer
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 105
ออฟไลน์ ออฟไลน์

กระทู้: 1,525



ดูรายละเอียด
« ตอบ #3 เมื่อ: 30 พฤศจิกายน 2009, 18:43:56 »

โอ้ววว มีเทพ PRESTASHOP มาอีกแล้ว
แบบนี้สุดยอด

ขอบคุณครับพ้ม
(ต้องนั่งแก้อีกแล้ว หุหุ)

 wanwan017

ปล.มีใครสอนทำ theme มันมั่งมะเนี่ย
บันทึกการเข้า
~บอล~
Verified Seller
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 494
ออฟไลน์ ออฟไลน์

กระทู้: 3,553



ดูรายละเอียด เว็บไซต์
« ตอบ #4 เมื่อ: 30 พฤศจิกายน 2009, 19:09:26 »

โอ้วข้อมูนแน่น...
บันทึกการเข้า

mrdreamer
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 105
ออฟไลน์ ออฟไลน์

กระทู้: 1,525



ดูรายละเอียด
« ตอบ #5 เมื่อ: 02 ธันวาคม 2009, 02:36:16 »

ขอบพระคุณมาก ๆ เลยครับ
ที่ช่วยผมแก้ปัญหาใน pm เป็นชั่วโมงๆ จนสำเร็จไปด้วยดี
+ 1 ไปแล้วครับ

ไม่รู้จะตอบแทนไงดี
ขอบคุณมากๆ ครับพ้ม
 wanwan017

อันนี้เป็นไฟล์ที่ผมแก้ไว้ จาก v1.2.5 ใครขี้เกียจแก้เองก็ลองเอาไปใช้ดูครับ
ควร BACKUP ไฟล์ของท่านก่อนเอาไฟล์นี้ไปทับนะครับ

http://www.mediafire.com/?kkjdjx3mlwz
« แก้ไขครั้งสุดท้าย: 02 ธันวาคม 2009, 03:08:52 โดย mrdreamer » บันทึกการเข้า
kennn
Verified Seller
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 149
ออฟไลน์ ออฟไลน์

กระทู้: 1,199



ดูรายละเอียด
« ตอบ #6 เมื่อ: 04 ธันวาคม 2009, 14:57:05 »

อัพเดทเป็นความรู้ครับ
บันทึกการเข้า

deedy
Verified Seller
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 63
ออฟไลน์ ออฟไลน์

กระทู้: 1,343



ดูรายละเอียด เว็บไซต์
« ตอบ #7 เมื่อ: 04 ธันวาคม 2009, 16:25:26 »

ว๊าว เทพ prestashop

+1 Thanks สำหรับข้อมูลแน่นปึ๊ก

จะไล่แก้ตาม แต่คงจะนานเลย  Tongue
บันทึกการเข้า

kennn
Verified Seller
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 149
ออฟไลน์ ออฟไลน์

กระทู้: 1,199



ดูรายละเอียด
« ตอบ #8 เมื่อ: 04 ธันวาคม 2009, 16:46:50 »

ว๊าว เทพ prestashop

+1 Thanks สำหรับข้อมูลแน่นปึ๊ก

จะไล่แก้ตาม แต่คงจะนานเลย  Tongue

ที่จริง แก้ไม่เยอะหรอกครับ ประมาณ 6-7 ไฟล์เท่านั้นครับ แต่ข้อมูลการใช้มันซับซ้อนเท่านั้นเองครับ ที่ต้องแก้เน้นๆคือ ไฟล์ classes/Search.php เท่านั้นเองครับ แต่ถ้าไม่อยากแก้ไขเอง รออีกนิดครับ กำลังแก้ไขที่ตัวติดตั้งอยู่ เดี๋ยวเอามาให้โหลดยกชุดเลยครับ
« แก้ไขครั้งสุดท้าย: 04 ธันวาคม 2009, 16:48:57 โดย kennn » บันทึกการเข้า

mrdreamer
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 105
ออฟไลน์ ออฟไลน์

กระทู้: 1,525



ดูรายละเอียด
« ตอบ #9 เมื่อ: 04 ธันวาคม 2009, 20:39:05 »

ว๊าว เทพ prestashop

+1 Thanks สำหรับข้อมูลแน่นปึ๊ก

จะไล่แก้ตาม แต่คงจะนานเลย  Tongue

ที่จริง แก้ไม่เยอะหรอกครับ ประมาณ 6-7 ไฟล์เท่านั้นครับ แต่ข้อมูลการใช้มันซับซ้อนเท่านั้นเองครับ ที่ต้องแก้เน้นๆคือ ไฟล์ classes/Search.php เท่านั้นเองครับ แต่ถ้าไม่อยากแก้ไขเอง รออีกนิดครับ กำลังแก้ไขที่ตัวติดตั้งอยู่ เดี๋ยวเอามาให้โหลดยกชุดเลยครับ



แก้ตัว install ด้วยใช่มะครับงั้นฝากแก้พวก truncate: ในโมดูลด้วยอะครับ เช่น :
blockviewed
homefeatured

ผมเห็นเว็บบางคน (ส่วนมาก) แสดงภาษาไทยได้ไม่ครบอะ ต้อง pm ไปบอกเรื่อยไป หุหุ

ขอบคุณครับ
บันทึกการเข้า
bankster
ก๊วนเสียว
*

พลังน้ำใจ: 27
ออฟไลน์ ออฟไลน์

กระทู้: 289



ดูรายละเอียด เว็บไซต์
« ตอบ #10 เมื่อ: 08 ธันวาคม 2009, 14:26:19 »

สุดยอดมากครับ สำหรับการแบ่งปัน ข้อมูลแน่นจริงๆ wanwan017 wanwan017 wanwan017
บันทึกการเข้า

รับออกแบบและพัฒนาเว็บไซต์
maycy04
คนรักเสียว
*

พลังน้ำใจ: 4
ออฟไลน์ ออฟไลน์

กระทู้: 132



ดูรายละเอียด เว็บไซต์
« ตอบ #11 เมื่อ: 08 ธันวาคม 2009, 14:47:22 »



โอวสุดยอดจริงๆ คะ ขอบคุณสำหรับการแบ่งปันนะคะ

สงสัยต้องใ้ช้เวลาทั้งวันแน่นๆ  wanwan006
บันทึกการเข้า

~SolariS~
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 76
ออฟไลน์ ออฟไลน์

กระทู้: 1,149



ดูรายละเอียด เว็บไซต์
« ตอบ #12 เมื่อ: 08 ธันวาคม 2009, 15:00:56 »

โอ้ว แน่นมากครับ สงสัยต้องเก็บไว้แก้ตอนว่างๆซะแล้ว ( เยอะจัด )  Tongue

ขอบคุณมากครับ  wanwan017

+1 ไปเลยครับ
บันทึกการเข้า

The Secret
Verified Seller
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 71
ออฟไลน์ ออฟไลน์

กระทู้: 1,152



ดูรายละเอียด เว็บไซต์
« ตอบ #13 เมื่อ: 11 ธันวาคม 2009, 22:32:11 »

เมพ ขิงๆ แล้วๆ  wanwan014
บันทึกการเข้า
sugar
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 113
ออฟไลน์ ออฟไลน์

กระทู้: 4,647



ดูรายละเอียด เว็บไซต์
« ตอบ #14 เมื่อ: 11 ธันวาคม 2009, 22:51:37 »

 wanwan017 wanwan017 ขอบคุณครับ ขอเก็บไว้ก่อนนะครับ เดี๋ยวจะลองอีกที่  Tongue สำเร็จแล้วจะกลับมาแทงครับ ใจจ้า  Cry
บันทึกการเข้า

ADS2009
Verified Seller
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 770
ออฟไลน์ ออฟไลน์

กระทู้: 1,273



ดูรายละเอียด เว็บไซต์
« ตอบ #15 เมื่อ: 11 ธันวาคม 2009, 22:58:29 »

โอ้..ยอดเยียมจริงๆครับ นับถือๆๆ ขอบคุณมากครับ  + 1 Thank ครับ
« แก้ไขครั้งสุดท้าย: 11 ธันวาคม 2009, 23:00:02 โดย ADS2009 » บันทึกการเข้า

kerokid
สมุนแก๊งเสียว
*

พลังน้ำใจ: 48
ออฟไลน์ ออฟไลน์

กระทู้: 571



ดูรายละเอียด เว็บไซต์
« ตอบ #16 เมื่อ: 25 ธันวาคม 2009, 18:17:16 »

กำลัง พบปัญหานี้อยู่พอดีเลย  Lips Sealed
กว่าจะแก้ไขเสร็จ เล่นเอาตาลายเหมือนกัน  Tongue

+1 Thank a lot ครับ

ในส่วน 3d tag มันยังมีส่วนที่เป็นภาษาไทย ยังหาไม่พบอยู่ดีนะครับ
บันทึกการเข้า

maycy04
คนรักเสียว
*

พลังน้ำใจ: 4
ออฟไลน์ ออฟไลน์

กระทู้: 132



ดูรายละเอียด เว็บไซต์
« ตอบ #17 เมื่อ: 28 ธันวาคม 2009, 10:35:05 »



กรี๊ดดดดดดดดดดดดดดดดดดดดด

ขอบคุณมากเลยคะ  wanwan019 wanwan019 wanwan019 wanwan019 wanwan019
บันทึกการเข้า

Step9
Verified Seller
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 122
ออฟไลน์ ออฟไลน์

กระทู้: 8,518



ดูรายละเอียด เว็บไซต์
« ตอบ #18 เมื่อ: 28 ธันวาคม 2009, 11:14:27 »

เขียนหนังสือขายได้ไม่ยาก  police

+1
บันทึกการเข้า

bm.com
คนรักเสียว
*

พลังน้ำใจ: 4
ออฟไลน์ ออฟไลน์

กระทู้: 100



ดูรายละเอียด
« ตอบ #19 เมื่อ: 28 ธันวาคม 2009, 15:30:36 »



สุดยอดดดด    นี่แหล่ะ ที่หามานาน


ขอบคุณมากๆค่ะ 
บันทึกการเข้า
หน้า: [1] 2  ทั้งหมด   ขึ้นบน
พิมพ์