Revision of 修改 form 元素的表單 hook_element() #process from Mon, 2012-01-30 20:07

需求:
因為上載的圖片太多, 又會分開數次上載/更新圖片, 編輯們想要知道上載某圖片的日期, 以決定刪除/更新某圖片

使用 devel 參考 filefield 的參數, 發覺 filefield 是有將 timestamp 儲存的, 只要在合適的 form 處顯示就可以了

顯示 timestamp 的代碼參考了 imsgefield extended module 的代碼, 使用 hook_element 的方式將 timestamp 加到 form API 之中:

function ge_filefield_timestamp_elements() {
  return array(
    'imagefield_widget' => array(
      '#process' => 'ge_filefield_timestamp_widget_process',
    );
}

以上的代碼在 form API 處理/顯示表單 imagefield widget 的時候會呼叫一次, 而將 timestamp 加到表單的代碼:

if(isset($element['#value']['timestamp']))
  {
    $element['data']['timestamp']['body'] = array(
      '#type' => 'markup',
      '#title' => 'timestamp',
      '#default_value' => '123',
      '#value' => 'Timestamp: ' .date('Y-m-d H:i', $element['#value']['timestamp']),
      '#prefix' => '<div>',
      '#suffix' => '</div>',
    );
  }
  return $element;

就更簡單, 其中, $element['#value']['timestamp'] 可以取得 timestamp, 轉換為編輯們可讀的日期格式就可以了

完整模組的代碼可以見 https://github.com/joetsuihk/filefield_timestamp

AttachmentSize
Image icon hook_element_timestamp.PNG25.26 KB
Google