Làm sao fill data lên form khi edit node ?

Events happening in the community are now at Drupal community events on www.drupal.org.
phuong.phuong's picture

Viết module node tạo 1 node type ngoài title và body còn có 1 số field khác lưu vào table riêng. Khi edit node làm sao để get data trong table riêng đó lên form? Click link edit chỉ thấy nó get các field mặc định là title và body của node thôi. Phải implement hook nào?

Hix tưởng đơn giản nhưng hông biết làm !!!

Comments

Bạn đã xem

thehong's picture

Bạn đã xem node_example.module chưa? Khá chi tiết trong việc implement các hook lên quan đến node/node type:

  1. hook_node_info: Khai báo thông tin về node type
  2. hook_form: Form soạn thảo node
  3. hook_validate: Kiểm tra tính hợp lệ khi form soạn thảo node được đệ trình
  4. hook_insert: Kịch bản tạo một node
  5. hook_update: Kịch bản cập nhật một node
  6. hook_delete: Kịch bản xoá một node
  7. hook_load: Kịch bản tải các gía trị vào biến $node (gọi từ hàm node_load ())
  8. hook_access: Kịch bản xác định việc truy cập node
  9. hook_view: Kịch bản trình bày node ra giao diện người dùng.

Thế Hồng

Load "date" data khi edit

phuong.phuong's picture

<?php

    $form
['ngay'] = array(
       
'#type' => 'date',
       
'#title' => 'Ngay',
       
'#required' => TRUE,
       
'#default_value' => array(
           
'year' => format_date(time(), 'custom', 'Y'),
           
'month' => format_date(time(), 'custom', 'n'),
           
'day' => format_date(time(), 'custom', 'j'),
        )
    );
?>

<?php
/**
* Implemenation of hook_prepare
*/
function promotion_prepare(&$node) {
   
$ngay = $node->ngay;
   
$node->ngay ['month'] = date('m', $ngay );
   
$node->ngay ['day'] = date('d', $ngay);
   
$node->ngay ['year'] = date('Y', $ngay );
}
?>

Trong node module, field ngay được định nghĩa như trên, lúc create thì sẽ hiện ra đúng ngày tháng hiện tại, như khi edit cần fill giá trị trong db thì ko được, nó vẫn hiện ngày tháng hiện tại mặc dù đã gán lại giá trị cho $node->ngay trong hook_prepare. Xin cho ý kiến?

Thật tình là không

thehong's picture

Thật tình là không hiểu đoạn #1 bạn viết cái gì nữa!!! Lúc lưu vào CSDL thì lưu ở dạng nào (), Phải biết () mới biết cách bóc tách và trình bày ra.

Thế Hồng

Nói lại vấn đề

phuong.phuong's picture

Node module.
Trên form mình có dùng kiểu "date".
hook_insert() dùng mktime() để lưu vào DB thành 1 số int.
Vấn đề: khi edit node thì làm sao để load lại đúng ngày tháng lên form ?
(biết hook_load() để get data từ DB rồi nhé)

Lấy cách này dài quá,

thehong's picture

Lấy cách này dài quá, người ta thường dùng một textfield field để nhập vào ngày tháng (có module jstools -> calendar hỗ trợ nhập ngày tháng thông qua một popup calendar). Khi lưu thì lưu lại sử dụng hàm strtotime () để đổi chuỗi thành dạng timestamp. Khi trình bày ra thì sử dụng hàm format_date () để trình bày cho đúng style của cấu hình hệ thống/người dùng.

Thế Hồng

Hướng dẫn của jstools

phuong.phuong's picture

'#attributes' => array('class' => 'jscalendar'),