แสดงบทความที่มีป้ายกำกับ drupal แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ drupal แสดงบทความทั้งหมด

วันพฤหัสบดีที่ 19 พฤษภาคม พ.ศ. 2554

การ embedded view ลงใน content บน drupal

โจทย์คือต้องการแสดงผลของ view หลายๆ view ในหน้าเดียวจะทำอย่างไร?

ก่อนอื่นผมได้ลองหา module เกี่ยวกับการ embedded view แล้วหาเท่าไรก็หาไม่เจอ ที่เจอก็ใช้ยากหรือใช้ไม่ได้เลย คราวนี้ก็เลยต้องมาหา API ในการเรียกใช้มันแทน ปรากฏว่าง่ายกว่าที่คิดเยอะ ทำให้รู้เลยว่าทำไมเขาไม่ทำเป็น module กัน

วิธีการ embedded มีดังนี้

<?php
  $viewName = 'viewname';
  print views_embed_view($viewName);
?>

แค่นี้เราก็สามารถ embedded view เข้าไปใน page หรือ story ได้แล้วครับ

ที่มา - thedrupalblog.com
Continue Reading...

วันพฤหัสบดีที่ 6 มกราคม พ.ศ. 2554

แก้ปัญหา warning: Attempt to assign property of non-object ใน drupal เมื่อใช้งาน Google Adwords

 เมื่อมีการเปิดการใช้งาน google adwords ในหน้าใดก็ตาม จะเกิด error  warning: Attempt to assign property of non-object in ...... theme.inc ขึ้นที่หน้าดังกล่าว พอลองไปดูที่ตำแหน่งดังกล่าวจะเป็นส่วนของ language ซึ่งไม่น่าจะเกิด error ได้เลย

ปัญหาดังกล่าวจริงๆ แล้วเกิดขึ้นที่ module google adwords ซึ่งดันไปเรียกใช้งาน global variable ชื่อว่า language ตัวเดียวกันทำให้เกิด warning ขึ้น

วิธีการแก้ไขคือให้ไปที่ module google_adwords แก้ไข google_adwords.module ใน function _google_adwords_view_adwords ให้แก้ไขตาม code ด้านล่าง โดยเปลี่ยนชื่อตัวแปร $language ให้เป็นตัวอื่นซะ

if (arg(0) != 'admin' && $track > 0) {
  if($node->google_adwords['enabled'] <> 0) { 
   
    $label = $node->google_adwords['label'];
    $id = variable_get('google_adwords_conversion_id', 0);
    $google_conversation_language = variable_get('google_adwords_conversion_language', $language->language); //change variable from $language to $google_conversation_language
    $format = variable_get('google_adwords_conversion_format', '2');
    $color = variable_get('google_adwords_conversion_color', 'FFFFFF');
    $google_js = variable_get('google_adwords_external_script', 'https://www.googleadservices.com/pagead/conversion.js');
    
    $output = '';
    
    $output .= "\n" . '<!-- Google Code for Conversion Page -->' . "\n";
    $output .= '<script language="JavaScript" type="text/javascript">' . "\n";
    $output .= '<!--' . "\n";
    $output .= '    var google_conversion_id = '. $id .';' . "\n";
    $output .= '    var google_conversion_language = "'. $google_conversation_language .'";' . "\n"; //change variable from $language to $google_conversation_language
    $output .= '    var google_conversion_format = "'. $format .'";' . "\n";
    $output .= '    var google_conversion_color = "'. $color .'";' . "\n";
    $output .= '    var google_conversion_label = "'. $label .'";' . "\n";
    $output .= '//-->' . "\n";
    $output .= '</script>' . "\n";
    $output .= '<script language="JavaScript" src="' . $google_js . '"></script>' . "\n";
    $output .= '<noscript>' . "\n";
    $output .= '    <img height="1" width="1" border="0" src="https://www.googleadservices.com/pagead/conversion/' . $id . '/?label='. $label .'&amp;guid=ON&amp;script=0"/>' . "\n";
    $output .= '</noscript>' . "\n";
       
    return $output;
    
  }
}

ที่มา http://goo.gl/EvPvO
Continue Reading...

วันศุกร์ที่ 17 ธันวาคม พ.ศ. 2553

สร้าง module ใน drupal

ถึง drupal จะยืดหยุ่นมากจนเราทำอะไรก็ได้ใน content จะเขียน php ลงใน content โดยใช้ php filter หรือจะทำ cck field สำหรับ download ไฟล์ แต่มันก็ยังไม่เพียงพอสำหรับการทำงานบางอย่างของ site ของเรา

เช่นผมอยากจะ validate ข้อมูลบน form ซึ่ง webfrom validation ไม่สามารถทำได้ เราจำเป็นต้องสร้าง custom module ขึ้นมาเพื่อจะทำงานนั้นๆ

การสร้าง custom module นั้นมี tutorial อยู่ที่ http://drupal.org/developing/modules หรือที่ ThaiTux ซึ่งได้แปลไว้เรียบร้อยแล้ว(อ่านแล้วงงนิดหน่อย) ซึ่งผมจะขออธิบายการสร้าง module ง่ายๆ คือ

การสร้าง module จำเป็นต้องมีไฟล์สำคัญอยู่ 2 ไฟล์คือ
  1. module_name.info
  2. module_name.module
ซึ่ง file info จะประกอบด้วยส่วนสำคัญคือ

; $Id$
name = leknarm
description = leknarm hook module
package = "Other"
core = 6.x

โดยความหมายก็ตรงตัวเลยครับ
  • name คือชื่อ
  • description คือรายละเอียด
  • package คือให้มันอยู่ package ไหน ในที่นี้คือ Other
  • และ core คือใช้ได้กับ version อะไร
เมื่อสร้างไฟล์ info เสร็จแล้วเราก็มาสร้างไฟล์ module กัน

<?php
// $Id$

/**
 * Implementation of hook_form().
 */
function leknarm_form_alter(&$form, $form_state, $form_id) {
  if($form_id == 'webform_client_form_1') {
    $form['#submit'][] = 'leknarm_form1_submit';
  }
  if($form_id == 'webform_client_form_2') {
    $form['#submit'][] = 'leknarm_form2_submit';
  }
}
function leknarm_form1_submit($form, &$form_state) {
  // do anything 
}
function leknarm_form2_submit($form, &$form_state) {
  // do anything 
}
?> 
จากด้านบน มีฟังก์ชัน leknarm_form_alter ซึ่งฟังก์ชันดังกล่าวเป็น hook ของ form โดยที่เมื่อมีการ request page ที่มี form ใดๆ มันจะไปเรียกฟังก์ชันดังกล่าวทันที ซึ่งในฟังก์ชันดังกล่าวเราเขียนไว้ว่า ถ้าเป็น form ที่มี id เป็น webform_client_form_1 มีการ submit ข้อมูลแล้วให้ไปเรียกฟังก์ชัน leknarm_form1_submit

นอกจากนี้เรายังสามารถทำ validation ได้โดยใช้คำสั่ง $form['#validate'][] แทนที่คำสั่ง $form['#submit'][]
Continue Reading...

วันพฤหัสบดีที่ 7 ตุลาคม พ.ศ. 2553

ทำ image ให้เป็น button ใน drupal from

ห่างหายกับการเขียน blog ไปนาน วันนี้จะมาเขียนเรื่องการทำรูปให้เป็นปุ่ม button แต่ทำใน drupal กัน

ก่อนอื่นต้องบอกก่อนว่าใน html นั้นเวลาทำ input ที่มี type เป็น image, image นั้นๆ จะทำหน้าที่เป็น submit button โดยอัตโนมัติ คราวนี้เราอยากจะใส่ <input type="image" src="/path/to/image" /> ใน drupal แต่ปัญหาดันเกิดขึ้นที่ต้องใช้ drupal api น่ะสิจะทำยังไง

จากการ google ดูเราได้หน้า API Quickstart ของ drupal มาเป็นหน้านี้

http://drupal.org/node/751826

แต่ว่าดันไม่มี example ของ image เลย ก็เลยลองหาก็ไปเจอหน้า API Reference

http://api.drupal.org/api/drupal/developer--topics--forms_api_reference.html/6

ซึ่งบอกไว้ว่า type image นั้นใน drupal ต้องเขียนว่า image_button ซึ่งถ้าจะเขียนในรูปแบบ drupal form api จะเขียนได้ดังนี้

<?php
$form['example'] = array(
  '#type' => 'image_button',
  '#value' => 'path/to/your/image',
);
?>

แค่นี้เราก็จะได้ form image button โดยใช้ drupal api แล้วครับ
Continue Reading...

วันพุธที่ 2 มิถุนายน พ.ศ. 2553

show จำนวน reads (view) ของ node ใน drupal

เผอิญต้องการแสดงว่า content ต่างๆ มีจำนวนการอ่านไปทั้งหมดกี่ครั้งแล้ว ก็เลยลองไปดูที่ setting ต่างๆ ของส่วน content แต่ดันไม่เจอเมื่อเป็นเช่นนั้นตาม step ของ drupal ก็ต้อง search หา module ซึ่งพอหาดูแล้วก็ยังไม่เจออีก ก็เลยลอง search ใน forum ของ drupal ได้วิธีมาดังนี้
  1. เปิด module Statistics ซึ่งเป็น core module ของ drupal
  2. ไปที่ Status report แล้วเปิดการทำงาน
โดย Status report นั้นจะอยู่ในส่วนของ report ครับสรุปว่าตั้งค่าง่ายๆ แต่หาไม่เจอเอง
    Continue Reading...

    Blogroll

    About