2012-03-12 2 views
0

У меня есть приложение Symfony 1.4, позволяющее пользователям вводить данные в базу данных тестирования электроприборов. Страница в вопросах состоит из нескольких встроенных «новых» форм, поэтому пользователь может подать множество тестов за один раз. Форма проверяет и сохраняет правильно, но обратная связь заключается в том, что будет утомительно использовать.Попытка копирования значений во множество встроенных форм

Поскольку в каждом тесте могут быть одинаковые данные (например, такая же дата, тот же результат, тот же самый человек, выполняющий тестирование), я хотел бы, чтобы пользователь мог заполнить значения в верхней строке, а затем щелкнуть кнопку для заполнения той же информации в строках ниже. Я уверен, что для этого потребуется javascript, но у меня мало опыта.

Буду признателен за любые предложения.

Большое спасибо.

ответ

0

Ну, мне удалось разобраться без использования javascript.

Я поставил кнопку на странице

<input type="submit" name="copy_values" value="duplicate"> 

В действии на странице я включил код ...

elseif (isset($_POST['copy_values'])) { 
    // get values from first embedded test 
    $newTests = $testList['new_tests']; 
    $testDate = $newTests[0]['et_date_tested']; 
    $testedBy = $newTests[0]['et_tester_id']; 
    $formOptions = array('test_date'=>$testDate, 'tester'=>$testedBy); 
    $this->form = new MultiTestForm(null, $formOptions); 
} 
$this->setTemplate('multiAdd'); 

... который принимает значения от виджетов в верхнюю строку формы и создает массив. Это передается как массив параметров для создания новой формы.

В верхнем классе формы уровня ..

public function configure() 
{ 
    ... 
    $subform = new sfForm(); 
    for($i = 0;$i < sfConfig::get('app_new_test_rows'); $i ++) 
    { 
    $formToAdd = new TestsForMultiAddForm(null,$this->getOptions()); 
    $subform->embedForm($i, $formToAdd); 
    } 

    $this->embedForm('new_tests', $subform); 
} 

... и во встроенном классе формы ...

public function configure() 
{ 
    ... 
    if ($this->getOption('test_date')) { 
    $this->setDefault('et_date_tested', $this->getOption('test_date')); 
    } 
    if ($this->getOption('tester')) { 
    $this->setDefault('et_tester_id', $this->getOption('tester')); 
    } 
    ... 
} 

Не уверен, что если это обычный способ подойти к проблеме , но он работает!

Смежные вопросы