This is default featured slide 1 title

You can completely customize the featured slides from the theme theme options page. You can also easily hide the slider from certain part of your site like: categories, tags, archives etc. More »

This is default featured slide 2 title

You can completely customize the featured slides from the theme theme options page. You can also easily hide the slider from certain part of your site like: categories, tags, archives etc. More »

This is default featured slide 3 title

You can completely customize the featured slides from the theme theme options page. You can also easily hide the slider from certain part of your site like: categories, tags, archives etc. More »

This is default featured slide 4 title

You can completely customize the featured slides from the theme theme options page. You can also easily hide the slider from certain part of your site like: categories, tags, archives etc. More »

This is default featured slide 5 title

You can completely customize the featured slides from the theme theme options page. You can also easily hide the slider from certain part of your site like: categories, tags, archives etc. More »

 

ตั้งค่าใช้งาน gmail (smtp) ใน PrestaShop 1.5

ใน PrestaShop มีช่องทางในการส่งอีเมล์อยู่ลองช่องทางคือ PHP Mail กับ SMTP โดยตัวเลือกปกติเราจะใช้กันที่ PHP Mail ทีนี้เราลองมาเปลี่ยนมาใช้ SMTP กันบ้าง ขอเลือกใช้ SMTP จาก gmail มาเป็นตัวอย่าง มาดูกันว่าต้องทำยังไงกันบ้างครับ

50+ PHP optimisation

จาก 50+ PHP optimisation tips revisited แปะไว้เผื่อไว้เตือนความจำ

  1. echo is faster than print. [Citation]
  2. Wrap your string in single quotes (‘) instead of double quotes (“) is faster because PHP searches for variables inside “…” and not in ‘…’, use this when you’re not using variables you need evaluating in your string. [Citation]
  3. Use sprintf instead of variables contained in double quotes, it’s about 10x faster. [Citation]
  4. Use echo‘s multiple parameters (or stacked) instead of string concatenation. [Citation]
  5. Use pre-calculations, set the maximum value for your for-loops before and not in the loop. ie: for ($x=0; $x < count($array); $x), this calls the count() function each time, use $max=count($array) instead before the for-loop starts. [Citation]
  6. Unset or null your variables to free memory, especially large arrays. [Citation]
  7. Avoid magic like __get, __set, __autoload. [Citation]
  8. Use require() instead of require_once() where possible. [Citation]
  9. Use full paths in includes and requires, less time spent on resolving the OS paths. [Citation]
  10. require() and include() are identical in every way except require halts if the file is missing. Performance wise there is very little difference. [Citation]
  11. Since PHP5, the time of when the script started executing can be found in $_SERVER[’REQUEST_TIME’], use this instead of time() or microtime(). [Citation]
  12. PCRE regex is quicker than EREG, but always see if you can use quicker native functions such as strncasecmp, strpbrk and stripos instead. [Citation]
  13. When parsing with XML in PHP try xml2array, which makes use of the PHP XML functions, for HTML you can try PHP’s DOM document or DOM XML in PHP4. [Citation]
  14. str_replace is faster than preg_replace, str_replace is best overall, however strtr is sometimes quicker with larger strings. Using array() inside str_replace is usually quicker than multiple str_replace. [Citation]
  15. “else if” statements are faster than select statements aka case/switch. [Citation]
  16. Error suppression with @ is very slow. [Citation]
  17. To reduce bandwidth usage turn on mod_deflate in Apache v2 [Citation] or for Apache v1 try mod_gzip. [Citation]
  18. Close your database connections when you’re done with them. [Citation]
  19. $row[’id’] is 7 times faster than $row[id], because if you don’t supply quotes it has to guess which index you meant, assuming you didn’t mean a constant. [Citation]
  20. Use <?php … ?> tags when declaring PHP as all other styles are depreciated, including short tags. [Citation]
  21. Use strict code, avoid suppressing errors, notices and warnings thus resulting in cleaner code and less overheads. Consider having error_reporting(E_ALL) always on. [Citation]
  22. PHP scripts are be served at 2-10 times slower by Apache httpd than a static page. Try to use static pages instead of server side scripts. [Citation]
  23. PHP scripts (unless cached) are compiled on the fly every time you call them. Install a PHP caching product (such as memcached or eAccelerator or Turck MMCache) to typically increase performance by 25-100% by removing compile times. You can even setup eAccelerator on cPanel using EasyApache3. [Citation]
  24. An alternative caching technique when you have pages that don’t change too frequently is to cache the HTML output of your PHP pages. Try Smarty or Cache Lite. [Citation]
  25. Use isset where possible in replace of strlen. (ie: if (strlen($foo) < 5) { echo “Foo is too short”; } vs. if (!isset($foo{5})) { echo “Foo is too short”; } ). [Citation]
  26. ++$i is faster than $ i++, so use pre-increment where possible. [Citation]
  27. Make use of the countless predefined functions of PHP, don’t attempt to build your own as the native ones will be far quicker; if you have very time and resource consuming functions, consider writing them as C extensions or modules. [Citation]
  28. Profile your code. A profiler shows you, which parts of your code consumes how many time. The Xdebug debugger already contains a profiler. Profiling shows you the bottlenecks in overview. [Citation]
  29. Document your code. [Citation]
  30. Learn the difference between good and bad code. [Citation]
  31. Stick to coding standards, it will make it easier for you to understand other people’s code and other people will be able to understand yours. [Citation]
  32. Separate code, content and presentation: keep your PHP code separate from your HTML. [Citation]
  33. Don’t bother using complex template systems such as Smarty, use the one that’s included in PHP already, see ob_get_contents and extract, and simply pull the data from your database. [Citation]
  34. Never trust variables coming from user land (such as from $_POST) use mysql_real_escape_string when using mysql, and htmlspecialchars when outputting as HTML. [Citation]
  35. For security reasons never have anything that could expose information about paths, extensions and configuration, such as display_errors or phpinfo() in your webroot. [Citation]
  36. Turn off register_globals (it’s disabled by default for a reason!). No script at production level should need this enabled as it is a security risk. Fix any scripts that require it on, and fix any scripts that require it off using unregister_globals(). Do this now, as it’s set to be removed in PHP6. [Citation]
  37. Avoid using plain text when storing and evaluating passwords to avoid exposure, instead use a hash, such as an md5 hash. [Citation]
  38. Use ip2long() and long2ip() to store IP addresses as integers instead of strings. [Citation]
  39. You can avoid reinventing the wheel by using the PEAR project, giving you existing code of a high standard. [Citation]
  40. When using header(‘Location: ‘.$url); remember to follow it with a die(); as the script continues to run even though the location has changed or avoid using it all together where possible. [Citation]
  41. In OOP, if a method can be a static method, declare it static. Speed improvement is by a factor of 4. [Citation].
  42. Incrementing a local variable in an OOP method is the fastest. Nearly the same as calling a local variable in a function and incrementing a global variable is 2 times slow than a local variable. [Citation]
  43. Incrementing an object property (eg. $this->prop++) is 3 times slower than a local variable. [Citation]
  44. Incrementing an undefined local variable is 9-10 times slower than a pre-initialized one. [Citation]
  45. Just declaring a global variable without using it in a function slows things down (by about the same amount as incrementing a local var). PHP probably does a check to see if the global exists. [Citation]
  46. Method invocation appears to be independent of the number of methods defined in the class because I added 10 more methods to the test class (before and after the test method) with no change in performance. [Citation]
  47. Methods in derived classes run faster than ones defined in the base class. [Citation]
  48. A function call with one parameter and an empty function body takes about the same time as doing 7-8 $localvar++ operations. A similar method call is of course about 15 $localvar++ operations. [Citation]
  49. Not everything has to be OOP, often it is just overhead, each method and object call consumes a lot of memory. [Citation]
  50. Never trust user data, escape your strings that you use in SQL queries using mysql_real_escape_string, instead of mysql_escape_string or addslashes. Also note that if magic_quotes_gpc is enabled you should use stripslashes first. [Citation]
  51. Avoid the PHP mail() function header injection issue. [Citation]
  52. Unset your database variables (the password at a minimum), you shouldn’t need it after you make the database connection.
  53. RTFM! PHP offers a fantastic manual, possibly one of the best out there, which makes it a very hands on language, providing working examples and talking in plain English. Please USE IT! [Citation]

Also see:

[D.I.Y] มาดัดแปลง module blocknewproducts ให้แสดงผลในตำแหน่ง home กัน

Module blocknewproducts ปกติจะมีการแสดงผลทางด้านซ้ายและขวาเท่านั้น แต่ถ้าเราอยากจะให้แสดงผลตรงกลางเหมือนกับ module homefeatured เราจะต้องทำยังไงบ้าง มาลองทำกันดู

สิ่งที่ต้องเตรียมมีดังนี้
- Text editor อะไรก็ได้แล้วแต่ถนัด
- Module blocknewproducts.php เป็นส่วนที่เราจะแก้ไข
- Tpl ของ module homefeatured (homefeatured.tpl) เอาไว้เป็นแม่แบบ

มาเริ่มกันเลยดีกว่า

- ให้ทำการ copy ไฟล์ homefeatured.tpl ไปยัง
modules/blocknewproducts แล้วเปลี่ยนชื่อเป็น blockhomenewproducts.tpl จะใช้ชื่ออื่นต่างจากนี้ก็ได้นะครับ
- เปิด blocknewproducts.php ด้วย Text editor ที่เตรียมไว้จากนั้นเราจะค่อยเพิ่ม php code ลงไปทีละจุดเริ่มจาก

public function install()

ให้แทรกชุดคำสั่ง

!$this->registerHook('displayHome')

ดูภาพด้านล่างประกอบ

ต่อมาที่ให้เพิ่ม code ตามด้านล่างนี้ ดูภาพด้านล่างประกอบ

public function hookDisplayHome($params)
{
     $newProducts = Product::getNewProducts((int)($params['cookie']->id_lang), 0,
          (int)(Configuration::get('NEW_PRODUCTS_NBR')));

     if (!$newProducts && !Configuration::get('PS_BLOCK_NEWPRODUCTS_DISPLAY'))
          return;

     $this->smarty->assign(array(
          'products' => $newProducts,
          'add_prod_display' => Configuration::get('PS_ATTRIBUTE_CATEGORY_DISPLAY'),
          'homeSize' => Image::getSize('home_default'),
     ));

     return $this->display(__FILE__, 'blockhomenewproducts.tpl');
}



ต่อมาเรามาแก้ไขในส่วนของ blockhomenewproducts.tpl เพื่อให้รองรับการแปลภาษาสำหรับ module blocknewproducts นะครับ อย่าได้ช้าลงมือกันต่อ เปิดไฟล์ แล้วค้นหาคำว่า

mod='homefeatured'

จากนั้นให้แก้ไขเป็น

mod='blocknewproducts'

เป็นอันเสร็จสำหรับส่วนนี้ แต่ถ้าใครอยากจะเปลี่ยนคำไหนเป็นอะไรก็ตามสะดวกเลยครับ ยกตัวอย่างสักตัว เช่น

{l s='Featured products' mod='homefeatured'}

ก็เปลี่ยนเป็น

{l s='New products' mod='blocknewproducts'}

s='New products' คือส่วนของคำที่เราจะเอาไปแสดงและแปลเป็นภาษาอื่น ๆ นะครับ

จบในส่วนที่จำเป็นต้องแก้ไขแล้ว เราก็มาต่อในส่วนของ Backoffice กันเลย สิ่งที่เราจะต้องทำหลังจากนี้คือ
- reset module หรือ uninstall และ install ใหม่
- แปลภาษาเพิ่มเติมสำหรับ tpl ที่เพิ่มเข้าไปใหม่

ผลสำเร็จจะเป็นตามภาพด้านล่างนี้ครับ

จบ. กันง่าย ๆ แบบนี้แหละ ^^ ถ้าเขียนไม่เข้าใจยังไงถามได้นะครับ

*** เนื้อหาการดัดแปลงจะอ้างอิงกับ Module ใน PrestaShop 1.5 นะครับ สามารถนำไปประยุกต์กับ 1.4 ได้เหมือนกัน


หากมีข้อสงสัยหรืออยากแบ่งปันความเห็นของท่าน ยินดีรับฟังและร่วมออกความเห็นได้ที่กลุ่ม PrestaShop Thailand เชิญได้ที่ http://www.facebook.com/groups/prestashop.th ครับ
หรือบ้านใหม่อีกแห่งใน G+ ที่ https://plus.google.com/communities/107595456751483898239

ส่วนใครได้ใช้ Google+ แล้ว แต่ยังไม่รู้จะเพิ่มใครเข้าแวดวง (Circle) ดี ก็จัดผมเข้าไปในแวดวงของท่านได้ที่
http://gplus.to/nokaek นะครับ

 

บันทึกการติดตั้ง Centos 6.2 บน VPS

เนื่องจากก่อนหน้านี้ได้ลง Centos 5.7 ไว้บน VPS ที่เช่า แต่ดันลืมบันทึกขั้นตอนและวิธีการลงโปรแกรมหลายๆ ตัว และเมื่อถึงคราวจำเป็นที่จะต้องลงใหม่ เลยไม่มีอะไรอ้างอิงเลย T_T ต้องค้นใหม่สถานเดียว

ครานี้ไหนๆ จะต้องลงใหม่จำต้องเลือกตัวใหม่ไปเลยไหนๆ ก็ต้องค้นหาวิธีการใช้อยู่แล้ว เลยเลือก Centos 6.2 (Final) 32bit มาลงซะเลย (ยังหาเหตุผลที่จะใช้ 64bit ไม่ได้อะ) มาเริ่มกันเลย!

หลังจากติดตั้ง Centos 6.2 เสร็จเรียบร้อย (ขอข้ามมาเลย มันเยอะ) ตามแผนคือต้องการจะลง LAMP (Linux, Apache, MySQL, PHP) และโปรแกรมจัด server เล็กๆ สักตัว เอาล่ะลงมือกัน

วิธีลบ orders ออกอย่างถาวรใน PrestaShop 1.4

มือใหม่และมือเก่าที่เปิดร้านด้วย PrestaShop คงไม่มีใครเปิดร้านโดยไม่ทดลองสั่งซื้อสินค้าในร้านตัวเองใช่ไหมครับ และดูท่าจะมีจำนวนไม่ใช่น้อยเลยทีเดียวเชียว แล้วทีนี้เกิดไม่อยากเห็น test orders เหล่านี้ล่ะจะมีวิธีการยังไงที่จะกำจัดออกไปให้สิ้นซาก

แต่พอลองไปดูหน้า Backoffice > Orders เรากลับไม่เห็นหนทางเลยว่าเราจะกำจัดมันออกไปยังไง ปุ่มลบสักอันก็ยังไม่มีเลย ก็ต้องจำใจอยู่กับมันต่อไปใช่ไหม ขอบอกไม่ต้องทนอีกต่อไป เรามีวิธีการที่จะทำให้มีปุ่มลบนั้นเผยตัวออกให้เราใช้กัน

ลอง เล่น ใช้งาน Git ใน Shared Hosting กับ Hostgator

ในตอนที่แล้วได้ลองใช้ Subversion (SVN) บน Hostgator กันไปแล้ว และตอนนี้ลองมาใช้ Git บน Hostgator กันบ้าง ทำยังไงมาลองดูกัน

ก่อนอื่นต้องเปิดการใช้งาน SSH บน Hostgator ก่อนโดยการ

  1. ล๊อกอินเข้า the HostGator billing tool, GatorBill.
  2. จากนั้นไปที่ ‘Hosting Packages’ และคลิกที่ “View Hosting Packages”
  3. ไปที่ package ที่ต้องการจะเปิดใช้งาน ssh และคลิกที่ “Enable Shell Access”

หลังจากเปิดใช้งานเป็นที่เรียบร้อยก็เตรียมเปิดโปรแกรม SSH Client เพื่อทำการ connect ไปยัง Hostgator ของเรา รอบนี้จะใช้ SSH ผ่านโปรแกรม Terminal ของ Mac Os X โดยใช้คำสั่ง

“ssh <ip host> -p2222″

วิธีแก้ไขปัญหาภาษาไทย PrestaShop 1.4 แบบขัดตาทัพ

สำหรับมือใหม่ที่เริ่มใช้งาน PrestShop โดยเฉพาะรุ่นใหม่ๆ ตั้งแต่ 1.4 เป็นต้นมา คงเคยเจอปัญหาเรื่องของภาษาไทยไม่มากก็น้อย โดยเฉพาะเรื่องของการแปลภาษา และ email template ต่างๆ มีแนวทางการแก้ไขมาแนะนำครับ

สำหรับคนที่ติดตั้ง PrestaShop 1.4 เรียบร้อยแล้ว จะแบ่งเป็นสองแบบนะครับ

วิธีแก้ไขให้รายชื่อลูกค้าแสดงชื่อ-สกุล แบบเต็มในหน้า Orders สำหรับ PrestaShop 1.4

ถ้ารู้สึกขัดใจกับการแสดงผลชื่อ-สกุลในรูปแบบย่อๆ  เราลองมาแก้ไขให้แสดงผลแบบเต็มๆ กัน แล้วแบบไหนแบบย่อ และแบบไหนแบบเต็ม มาลองดูกัน

สมมุติชื่อลูกค้าเป็นภาษาอังกฤษ ชื่อ John Doe เวลาย่อ จะได้ J. Doe ซึ่งมันก็พอเข้าใจได้ในแบบของต่างประเทศ แต่ถ้าเป็นชื่อ-สกุลเป็นภาษาไทยล่ะ สมมุติชื่อ สรราม ศิษย์รามสอง เวลาย่อ จะได้ ส. ศิษย์รามสอง เอิ่มมม เวลาหาด้วยสายตาคงสนุกไม่น้อย

แล้วถ้าอยากจะเปลี่ยนล่ะ ต้องไปแก้ไขที่ไหน ยังไง คิดว่าไม่ยากครับ ตามอ่านกันต่อเลย

เอารูปจาก iPhone ลง Mac แบบง่ายๆ

ใช้ macbook มาได้สักระยะ เพิ่งนึกขึ้นได้ว่ายังไม่ได้ backup รูปภาพจาก iPhone เก็บเอาไว้เลย (ถ้าหายไปเสียดายแย่) ส่วนวิธี backup ใช้โปรแกรมชื่อ “Image Capture” ค้นหาในเครื่องได้เพราะมันมากับ Mac OS X ตั้งแต่ 10.5

ทำความรู้จักกับการเขียน PrestaShop module เบื้องต้น

วันนี้เอาลิ้งก์แนะนำการเขียน PrestaShop modules มาแนะนำ ซึ่งค่อยข้างแปลกสักหน่อย คือมา อัพบล็อกแต่ไม่อยากเอาบทความเค้ามาแปลเพราะว่ากลัวจะแปลไม่ถูก โหะๆ

แต่ว่าบทความนี้มันดีจริงๆ ก็เลยต้องเอามาบล็อกกัน ทั้งๆ ที่ Copy มาเป็นลิ้งก์แบบนี้แหละ

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

เพราะ PrestaShop ในปัจจุบันและในอนาคตนี้ก็ไม่มีทางตายง่ายๆ นับวันมีแต่จะใหญ่โตขึ้นเรื่อยๆ