Во-первых, если вы отправляете свой запрос вспомогательной функции в виде массива, нет причины превращать его в другой массив. то есть $array = array('$query')
должно быть просто $query
, чтобы вы могли получить доступ к таким свойствам, как это: $query->name
вместо $query[0]->name
. Во-вторых, если вы не редактируете запись формы, ваш $query
будет пустым, так что вы можете использовать его как триггер для того, что возвращать (либо пустую форму, либо заполненную форму):
function WorkOrderForm($query)
{
if($query!='')
{
//$formHTML=populated form
} else {
//$formHTML=empty form
}
return $formHTML;
}
Хорошо? Но есть проблема ... Код, который вы имеете в своем помощнике, не будет работать. Вы используете арифметический оператор +=
для (при условии) объединения данных формы. Для этого попробуйте добавить 1
в строку, которая всегда будет равна 0
. То, что вы ищете, это оператор .=
; это объединит форму, как и следовало ожидать. Однако это дает вам небольшой контроль над тем, как будет выглядеть форма (то есть все элементы формы будут расположены рядом друг с другом - не слишком красиво). Что вы можете сделать, это вместо того, чтобы объединить их все вместе, push
их в массив, а затем выводить элементы формы один за другим:
if($query!=''){
$form_array=array();
array_push($form_array,form_open('order/update',$attributes));
array_push($form_array,form_input('name',$query->name));
array_push($form_array,form_textarea('name',$query->description));
$dropOptions = array('nstarted'=>'Not Started','complete'=>'Done','started'=>'In Progress');
array_push($form_array,form_dropdown('status',$dropOptions,$query->status));
array_push($form_array,form_input('name',$query->startDate));
array_push($form_array,form_input('name',$query->endDate));
array_push($form_array,form_close());
}else{
$form_array=array();
array_push($form_array,form_open('order/add',$attributes));
array_push($form_array,form_open('order/update'));
array_push($form_array,form_input('name'));
array_push($form_array,form_textarea('name'));
$dropOptions = array('nstarted'=>'Not Started','complete'=>'Done','started'=>'In Progress');
array_push($form_array,form_dropdown('status',$dropOptions));
array_push($form_array,form_input('name'));
array_push($form_array,form_input('name'));
array_push($form_array,form_close());
}
return $form_array;
Затем, чтобы представить элементы формы, выполните итерацию по массиву $ form_array, который был возвращен:
$form_data='';//blank for new item, or data to populate form with to edit an item
$form_el = WorkOrderForm($form_data);
foreach($form_el as $key=>$val){
echo $val.'<br>';//I just added a <br> here so each form element will be on a new line; change to fit your needs
}
Надеюсь, это поможет ...