Clicky

how to | suksit dot com

how to

Using Canonical Link Tag to Fix Duplicate Content in Drupal

อธิบายสั้นๆ ก่อนสำหรับ canonical link tag ว่าคือ tag ที่เอาไว้บอก search engine ว่า หน้าที่มันกำลังอ่านอยู่นั้น มีเนื้อหาซ้ำกับหน้าอื่น และจริงๆ มันควรจะไปอ่านจากหน้าไหนแทน เพื่อไม่ให้ search engine มองว่าเราทำ duplicate content รายละเอียดเต็มๆ แนะนำให้อ่านจากบล็อกของ Matt Cutts

ใน Drupal ที่สนับสนุนการใช้งาน clean URLs ก็มีโอกาสทำให้เกิด duplicate content ได้เช่นกัน ตัวอย่างที่ง่ายที่สุดคือเมื่อเปิดใช้งานโมดูล Path ที่สามารถสร้าง alias ให้กับ node ได้ สมมติว่าเราสร้าง alias ชื่อ /content/node-123-title ให้กับ /node/123 จะทำให้เราสามารถเข้าถึงเนื้อหาของ node นี้ได้สองทางคือ http://www.example.com/node/123 และ http://www.example.com/content/node-123-title ซึ่งถ้า search engine เห็นว่า URL ต่างกัน แต่มีเนื้อหาเหมือนกันเด๊ะ ก็จะมองว่าหน้าใดหน้าหนึ่งเป็น duplicate content แน่นอน

ทางแก้ที่นิยมใช้กันคือการใช้โมดูล Global Redirect ช่วยในการ redirect URL จาก /node/123 ไปยัง /content/node-123-title โดยอัตโนมัติ ซึ่งในเคสทั่วๆ ไปก็ใช้งานได้ดีในระดับหนึ่ง

Read the rest of this entry »

How to Neatly Dump Variables in Drupal for Debugging

เวลาพัฒนาโมดูล / ธีมใน Drupal สิ่งหนึ่งที่มักจะต้องทำบ่อยๆ คือการ dump ค่าตัวแปรใน Drupal ออกมาดู วิธีที่ง่ายที่สุดคือใช้คำสั่ง print_r(<variable>) แต่ผลลัพธ์ที่ได้ส่วนใหญ่จะเป็น string เละๆ อยู่ในส่วนบนสุดของหน้านั้นๆ ทำให้อ่านลำบากอย่างแรง

เห็น @sugree แนะนำบ่อยๆ ว่าให้ใช้ drupal_set_message() เวลา dump ค่าตัวแปร ลองดูแล้วปรากฏว่ามันใช้ไม่ได้กับ print_r() เนื่องจาก print_r() จะพรินท์ค่าออกมาทันที ไม่ได้ return ค่าเป็น string กลับมาให้ drupal_set_message()

วิธีแก้คือใช้ output buffering ช่วยอีกที สมมติว่าต้องการ dump ค่าในตัวแปร $vars['node'] ก็เขียนโค้ดแบบนี้

@sikachu มาชี้ทางสว่างให้ว่าจริงๆ แล้ว print_r() มัน return ค่าเป็น string กลับมาได้ ถ้าใส่ parameter ตัวที่สองให้เป็น TRUE จากนั้นเอามารวมกับโค้ดที่ @onequad บอกมา จะได้โค้ดสำหรับ dump ตัวแปร $vars['node'] เป็น

<?php
drupal_set_message('<pre>' . htmlspecialchars(print_r($vars['node'], TRUE), ENT_QUOTES) . '</pre>');
?>

จะได้โครงสร้างของตัวแปร $vars['node'] อยู่ในกล่องข้อความของ Drupal อย่างเป็นระเบียบเรียบร้อย อ่านง่ายกว่าเดิมเยอะ :)

How to Connect to VPN Using Command Line on Windows XP

เพิ่งค้นพบวิธีเชื่อมต่อ VPN บนวินโดวส์ โดยใช้ command line คำสั่งที่ใช้คือ

rasdial <connection name> <username> <password>

แต่ปรากฏว่าทุกครั้งที่ต่อ VPN เสร็จ วินโดวส์จะตั้ง default gateway เป็น IP ของเครื่องที่ได้จาก VPN ซะงั้น ทั้งๆ ที่จริงๆ gateway ที่ต้องการ คือ gateway ที่ตัว VPN server ใช้อยู่ วิธีแก้คือต้องเซ็ต route ใหม่ทุกครั้งที่ทำการเชื่อมต่อ

ด้วยความขี้เกียจ เลยพยายามเขียน batch file ให้มันแก้ route ให้เอง แต่ติดปัญหาตรง interface name ของ WAN (PPP/SLIP) ที่ได้ในการเชื่อมต่อแต่ละครั้งมันไม่แน่นอน ทำให้เขียน batch สคริปต์ลำบาก

ยังดีที่มี Cygwin เลยอาศัยลูกมั่ว เขียน shell script โดยใช้คำสั่ง DOS ผสม Unix เพื่อหาชื่อ interface แล้วค่อยเอาไปเซ็ต route ต่ออีกที ปรากฏว่าได้ผล รันได้แบบเนียนๆ หน้าตาก็เป็นประมาณนี้

#!/bin/bash
 
rasdial MyVPN user password
ifname=`route print | grep "WAN (PPP\/SLIP) Interface" | cut -f1 -d\ `
route delete 0.0.0.0
route -p add 0.0.0.0 mask 0.0.0.0 192.168.1.1 if ${ifname} metric 1

How to Move Drupal Installation to Another Host

แต่ก่อนมักจะรู้สึกว่า ย้ายโฮสต์ทีนี่มันเรื่องใหญ่มาก แต่คราวนี้รู้สึกง่ายๆ ดี เลยจดขั้นตอนไว้หน่อย อย่างแรกสุดคือเซ็ตเว็บให้เป็น Off-line mode (admin/settings/site-maintenance) โดยอาจจะใส่ message ให้รู้ว่าตอนนี้เรากำลังย้ายโฮสต์อยู่นะ อะไรทำนองนั้น โดยไม่จำเป็นต้อง disable โมดูลใดๆ จากนั้นก็แบ็กอัพข้อมูล โดยสิ่งที่ต้องแบ็กอัพคือ

  • ไดเร็กทอรี sites/
  • ไฟล์ .htaccess ใน root (ถ้ามีการแก้ไข)
  • ไฟล์ export ของฐานข้อมูล MySQL (ถ้า clear cache กับ access log ก่อน จะช่วยลดขนาดไฟล์ export ได้เยอะอยู่)
  • ไดเร็กทอรีอื่นๆ ที่ไม่ใช่ของ Drupal

Read the rest of this entry »

How to Setup Oracle Instant Client and PHP on XAMPP

เมื่อวานเพิ่งได้ลองใช้ Oracle Instant Client เพื่อให้ PHP ติดต่อกับฐานข้อมูลที่ทำงาน รู้สึกว่าใช้งานง่ายและสะดวกกว่าการลง Oracle client เต็มๆ เยอะ และวิธีการติดตั้งก็ไม่ยุ่งยากอะไร

  1. ดาวน์โหลด Oracle Instant Client เวอร์ชันที่ต้องการ จะได้ไฟล์ .zip มาไฟล์นึง (Oracle ผมเป็น 8.1.7 ต้องดาวน์โหลด OIC เวอร์ชัน 10.x มาใช้ เพราะลองเวอร์ชัน 11.x แล้วมันบอกว่าไม่ support)
  2. แตกไฟล์ที่ได้ ไว้ในโฟลเดอร์อะไรก็ได้ แนะนำว่าอย่าให้มี space ในชื่อพาธ ถ้าเอาแบบง่ายๆ ก็ C:\Oracle
  3. เพิ่ม/แก้ Environment variable ของวินโดวส์ โดยไปที่ My Computer » Properties » Advanced » Environment Variables

* แก้ตัวแปร PATH โดยเพิ่ม C:\Oracle เข้าไป * เพิ่มตัวแปร ORACLE_HOME ใส่ค่าเป็น C:\Oracle เช่นกัน 4. รีสตาร์ทวินโดวส์หนึ่งรอบ เพื่อความชัวร์ 5. เพิ่มการโหลด extension php_oci8.dll ใน PHP โดยแก้ไฟล์ php.ini (ถ้าเป็นใน XAMPP ไฟล์ php.ini จะอยู่ใน %XAMPP_DIR%\apache\bin) เอาเครื่องหมาย semicolon (;) ออกจากบรรทัดที่ต้องการ 6. รัน Apache ถ้าไม่มี error message อะไรก็เป็นอันเสร็จพิธี