您在這裡

怎麼從call function中,將$form印出來?

renren's 的頭像
renren 在 2012-09-27 (四) 19:18 發表

各位前輩好

我所使用的版本是drupal-7.12,嘗試寫drupal程式後,有些問題想請教一下
以下是我的程式碼

<?php
function fbcf_poi_form_recommendation_page_two($form , &$form_state)
{
//中略

$form['give_description'] = array(
'#type' => 'item',
'#title' => t("page 2"),
);

for ($control_show=0 ; $control_show<3 ; $control_show++)
{
switch ($control_show)
{
case 0:
fbcb_poi_show_user_interest(6,2);
break;

case 1:
fbcb_poi_show_user_interest(3,0);
break;

case 2:
fbcb_poi_show_user_interest(1,1);
break;

} // end switch
} // end for

return $form;
}

function fbcb_poi_show_user_interest($show_member, $show_predict_char)
{
$form = array();

switch ($show_predict_char)
{
case 0:
for ($control=0 ; $control<$show_member ; $control++)
{
$form['show_movies'] = array(
'#type' => 'item',
'#title' => t('moives'),
);
}
break;

case 1:
for ($control=0 ; $control<$show_member ; $control++)
{
$form['show_music'] = array(
'#type' => 'item',
'#title' => t('music'),
);
}
break;

case 2:
for ($control=0 ; $control<$show_member ; $control++)
{
$form['show_books'] = array(
'#type' => 'item',
'#title' => t('books'),
);
}
break;

return $form;
}

?>

若能正常執行的話,$form['show_books']應該要印出6次,
$form['show_movies']要印出3次,而$form['show_music']要印出1次
但是,只印出$form['give_description']的page 2而已

請問一下,要怎麼從call function中將$form印出來呢?

麻煩各位前輩指教,謝謝

<?php

function fbcf_poi_form_recommendation_page_two($form , &$form_state)
{
//中略

$form['give_description'] = array( // < ~~~~~ 這是其中一個 $form array
'#type' => 'item',
'#title' => t("page 2"),
);

for ($control_show=0 ; $control_show<3 ; $control_show++)
{
switch ($control_show)
{
case 0:
fbcb_poi_show_user_interest(6,2); // < ~~~~~~ 這是執行 Function
break;

case 1:
fbcb_poi_show_user_interest(3,0);
break;

case 2:
fbcb_poi_show_user_interest(1,1);
break;

} // end switch
} // end for

return $form; // < ~~~~~~~~ 這是回傳東西
}

?>

所以最少限度你也要像這樣吧

<?php

switch ($control_show)
{
case 0:
$form_array= fbcb_poi_show_user_interest(6,2);
$form= array_merge($form, $form_array);
break;
?>

你會遇到這問題, 是因為你對PHP中的function和array的用法不熟悉
不是因為用Drupal開發才會遇到的問題
建議你至少把call by value, call by reference的概念搞清楚
還有像是array_merge這類常用的array相關function也搞清楚
不然老是卡在PHP的程式設計問題
會浪費你很多時間