2011-07-28 7 views
0

私はモジュール開発フィールドの初心者であり、問​​題に直面しています。 私はhook_menu機能は、コードのpeice次持つ.moduleファイルを作成している: -私のカスタムモジュールから編集フォームを開くことができません(初めのモジュール開発)

$items['game/add_tournament/view_tournament']=array(   
'title'=>'View Tournament', 
'description'=>'Tournament View', 
'page callback'=>'game_view_tournament_page', 
'access callback' => 'user_access', 
); 

マイページのコールバックは以下の通りです: -

function game_view_tournament_page() {   
    $header_table_edit = array( 
// first cell has the following text 'Title' 
array('data' => t('Tournament Name')), 
// second cell has the following text 'Link to edit' 
array('data' => t('No of Weeks')), 

array('data' => t('Start Date')), 

array('data' => t('End Date')), 

array('data' => t('Edit')) 
); 

$query = db_query 


("select tournament_id ,tournament_name ,tournament_no_of_weeks ,tournament_start_date ,tournament_end_date from {tournaments} "); 


    while ($data = db_fetch_object($query)) 
{ 
    $rows_table_edit[] = array(
    array('data' => l($data->tournament_name, 'game/add_tournament/view_tournament/' . $data -> tournament_id)), 
    array('data' => t($data->tournament_no_of_weeks)), 
    array('data' => t($data->tournament_start_date)), 
    array('data' => t($data->tournament_end_date)), 
    array('data' => l(t('Edit'),'game_tournament_edit/'.$data -> tournament_id.'/edit'))); 
} 


    $caption_table_edit = t('Table for edit nodes'); 

    return theme('table', $header_table_edit, $rows_table_edit); 
} 

この時点ティルサイトが正常に動作します。今問題が起こります。 このpoinitでは、私はeditボタンを押すと別のコールバックが呼び出され、そのコールバックも私のhook_menu関数に登録されるべきだと仮定します。 ここでは、このメソッドが呼び出されているかどうかわかりません。編集ボタンを押すたびにページが見つかりません。以下はコールバックです

$items['game_week_edit/%game_abc/edit']=array(   
'type' => MENU_LOCAL_TASK, 
'access arguments' => array('access content'), 
    'page callback' => 'game_week_edit_page', 
    'page arguments' => array(1), 
    ); 

    // The above code is in hook_menu function and the following code is outside hook_menu . Let me know if i am doing anything wrong. 

function game_week_edit_page($abc_id){ 
return drupal_get_form('game_week_edit_form',$abc_id); 
    } 


    function game_week_edit_form(&$form_state, $abc_id) {   
$form = array(); 

$options = array(); 
$sql = "SELECT game_week_id,tournament_id,start_time,open_time,close_time FROM {game_week} where game_week_id='$abc_id'"; 
$r = db_query($sql); 

$sql_tournament = "SELECT tournament_name FROM {tournaments} "; 
$r_tournament = db_query($sql_tournament); 


     while ($row = db_fetch_array($r_tournament)) { 
$options[$row['tournament_name']] = $row['tournament_name']; 
} 

while ($row = db_fetch_object($r)) 
{ 
$form['tournament_name'] = array(
     '#type' => 'select', 
     '#required'=>true, 
     '#title' => t('Select Tournament'), 
     '#options' => $options, 
     '#weight'=>1, 
     '#description' => t('<br>'), 
     ); 
$form['start_time'] = array(
     '#type' => 'textfield', 
     '#required'=>true, 
     '#value'=>t($row->start_time), 
     '#title' => t('Enter Start Time'), 
     '#size'=>40, 
     '#maxlength'=>128, 
     '#weight'=>2, 
     '#description' => t('Please enter start time.'), 
    ); 

$form['open_time'] = array(
     '#type' => 'textfield', 
     '#required'=>true, 
     '#value'=>t($row->open_time), 
     '#title' => t('Enter Tournament Start Time'), 
     '#size'=>40, 
     '#maxlength'=>128, 
     '#weight'=>3, 
     '#description' => t('Booking open time.'), 
    ); 
$form['close_time'] = array(
     '#type' => 'textfield', 
     '#required'=>true, 
     '#value'=> t($row->close_time), 
     '#title' => t('Booking close time'), 
     '#size'=>40, 
     '#maxlength'=>128, 
     '#weight'=>4, 
     '#description' => t('Booking close time.'), 
    ); 

$form['submit'] = array(
     '#type' => 'submit', 
     '#value' => t('Update Tournament'), 
     '#weight'=>5 
    ); 
} 
return $form; 
} 

答えて

0

編集メニューでワイルドカードの名前を付けないでください。 "%game_abc"は、Drupalに関数 "game_abc_load"(つまり、 "_load"が付加された)を呼び出し、ページコールバック "game_week_edit_page"の最初の引数として返された値を使用するように指示しています。このような機能がなければ、問題が発生します。

この場合、単に整数IDを渡すように見えます。この場合、単に「%」を使用できます。

+0

私はすべてが正しかったが、キャッシュをフラッシュする必要があった:) thanks man for reply – abhishek

関連する問題