您在這裡

改變Event模組日期表單的順序?

hanamizuki's 的頭像
hanamizuki 在 2008-10-29 (三) 16:43 發表

真的很不懂為何日期表單要這樣排列,應該是年月日呀!卻是日月年。

要改順序的話,除了把一個一個挖出來之外,有沒有比較快的方式呢?
是要改event.module嗎?我有找到這個,但我不希望改到模組內容,因為怕之後升級困難。
不知有沒有其他方式?

<?php

function event_form_date($timestamp, $prefix = 'start', $offset) {
// populate drop down values...
// ...months
$months = array(1 => t('January'), t('February'), t('March'), t('April'), t('May'), t('June'), t('July'), t('August'), t('September'), t('October'), t('November'), t('December'));
// ...hours
if (variable_get('event_ampm', '0')) {
$hour_format = t('g');
for ($i = 1; $i <= 12; $i++) $hours[$i] = $i < 10 ? "0$i" : $i;
$am_pms = array('am' => t('am'), 'pm' => t('pm'));
}
else {
$hour_format = t('H');
// ...hours (with leading 0s)
for ($i = 0; $i <= 23; $i++) $hours[$i] = $i < 10 ? "0$i" : $i;
}
// ...minutes (with leading 0s)
for ($i = 0; $i <= 59; $i++) $minutes[$i] = $i < 10 ? "0$i" : $i;

// This is a GMT timestamp, so the _event_date() wrapper to display local times.
$form[$prefix .'_day'] = array(
'#prefix' => '

',
'#type' => 'textfield',
'#default_value' => _event_date('d', $timestamp, $offset),
'#maxlength' => 2,
'#size' => 2,
'#required' => TRUE);
$form[$prefix .'_month'] = array(
'#type' => 'select',
'#default_value' => (int) _event_date('n', $timestamp, $offset),
'#options' => $months,
'#required' => TRUE);
$form[$prefix .'_year'] = array(
'#type' => 'textfield',
'#default_value' => (int) _event_date('Y', $timestamp, $offset),
'#maxlength' => 4,
'#size' => 4,
'#required' => TRUE);
$form[$prefix .'_hour'] = array(
'#prefix' => '
—',
'#type' => 'select',
'#default_value' => _event_date($hour_format, $timestamp, $offset),
'#options' => $hours,
'#required' => TRUE);
$form[$prefix .'_minute'] = array(
'#prefix' => ':',
'#type' => 'select',
'#default_value' => _event_date('i', $timestamp, $offset),
'#options' => $minutes,
'#required' => TRUE);
if (isset($am_pms)) {
$form[$prefix .'_ampm'] = array(
'#type' => 'radios',
'#default_value' => _event_date('a', $timestamp, $offset),
'#options' => $am_pms,
'#required' => TRUE);
}
$form[$prefix .'_close'] = array(
'#type' => 'markup',
'#value' => '

');

return $form;
}

?>

覆寫表單的 theme
或是 hook_form_alter
修改表單元素的 #weight

不過表單元素的 key 會加上 prefix 所以都不會一樣
應該很難統一修改

我現在想在文章內文的表單,加上預設文字。
CCK的欄位可以在後台設定預設文字,可是node的標題和內文不行。
我這樣寫

$form['title']['#default_value'] = 'test';

表單預設不會有東西耶!

這樣寫
$form['title']['#value'] = 'test';

這樣會有test,但如果發表之後又編輯,這個欄位的value又會變成test。
照理說應該是default_value,可是卻沒用?

to hom:
對,就是在template.php呼叫tpl檔的那種方式。
然後在print rendoer form之前

$form['title']['#default_value'] = 'test';

CCK的欄位可以這樣做,不過原本的標題和內文沒用。
後來我這樣寫

<?php
if(!$form['title']['#value']){
$form['title']['#value'] = '[範例]衝了!鹿肝每包180元(要100包)';
}
?>

就OK了,可是感覺也不是太drupal。

To Tokimeki,

謝謝!真是好東西,我來用用看。

看起來是 #default_value 會在套用 theme 之前進行處理
在 theme 內設定 #default_value 會沒有效果
試試看用 hook_form_alter 來做修改