Создал пользовательский модуль формы, форма фиксируется в базе данных перед вводом значений
Я создал пользовательский модуль формы. Однако модуль уже фиксирует "значения", когда я захожу на страницу, а не после ввода значений и нажатия кнопки "отправить". Поэтому каждый раз, когда я обновляю страницу, моя форма отправляет пустое значение в мою базу данных.
Страница также выводит значение успеха после обновления страницы:
"Успешно заданный вопрос!"
Это мои файлы: Block/List.php
<?php
/**
* Class Topper_ProductQA_Block_List
*/
class Topper_ProductQA_Block_List extends Mage_Core_Block_Template
{
/**
* @return Topper_ProductQA_Model_Resource_Question_Collection
*/
public function getQuestions()
{
$collection = Mage::getModel('topperproductqa/question')->getCollection();
return $collection;
}
/**
* Class Topper_ProductQA_Block_List
*/
public function getFormQuestions()
{
$data = $this->getRequest()->getPost();
$session = Mage::getSingleton('core/session');
$form = Mage::getModel('topperproductqa/question');
$form->setQuestion($data['question']);
$form->setCustomerEmail($data['customer_email']);
try {
$form->save();
$session->addSuccess('Succesfully asked a question!');
} catch (Exception $e) {
$session->addError('Error');
}
}
}
Controllers/IndexController.php
<?php
class Topper_ProductQA_IndexController extends Mage_Core_Controller_Front_Action
{
public function indexAction()
{
$this->loadLayout();
$this->renderLayout();
return $this;
}
}
Model/Question.php
<?php
/**
* Class Topper_ProductQA_Model_Question
*
* @method string getQuestion()
* @method setQuestion(string $question)
*
* @method string getAnswer()
* @method setAnswer(string $answer)
*
* @method string getCreatedAt()
* @method setCreatedAt(string $createdAt)
*
* @method string getUpdatedAt()
* @method setUpdatedAt(string $updatedAt)
*
* @method string getCustomerEmail()
* @method setCustomerEmail(string $customerEmail)
*/
class Topper_ProductQA_Model_Question extends Mage_Core_Model_Abstract
{
/**
* Topper_ProductQA_Model_Question constructor.
*/
public function __construct()
{
$this->_init('topperproductqa/question');
}
public function _beforeSave()
{
if ($this->isObjectNew()) {
$this->setCreatedAt(Mage::getSingleton('core/date')->gmtDate());
}
$this->setUpdatedAt(Mage::getSingleton('core/date')->gmtDate());
}
}
Шаблон/список.phtml
<?php /** @var Topper_ProductQA_Block_List $this */ ?>
<!-- Tekst na submit -->
<span id="feedback-submit-button" style="display:none;">
Bedankt voor de vraag, wij koppelen zo snel mogelijk terug.
</span>
<!--Form-->
<form id="questionForm" method="post" action="<?php echo $this->getFormQuestions() ?>">
<table>
<col width="200">
<col width="500">
<!--Title-->
<h2 class="legend">
<?php echo $this->__('Ask a question!') ?>
</h2>
<!--Customer Email-->
<div class="field">
<tr>
<td>
<label for="customer_email" class="required"><em>*</em><?php echo $this->__('E-mail') ?></label>
</td>
<td>
<input name="customer_email" id="customer_email" title="<?php echo $this->__('E-mail') ?>"
class="input-text required-entry validate-email" maxlength="255" type="text"/>
</td>
</tr>
</div>
<!--Question-->
<div class="field">
<tr>
<td>
<label for="question" class="required"><em>*</em><?php echo $this->__('Question') ?></label>
</td>
<td>
<textarea name="question" id="question" title="<?php echo $this->__('Question') ?>"
class="required-entry input-text" cols="5" rows="3"></textarea>
</td>
</tr>
</div>
<!--Required Fields-->
<p class="required">*
<?php echo $this->__('Required Fields') ?>
</p>
<!--Submit button-->
<button type="button" onclick="questionSubmit()" title="<?php echo $this->__('Submit') ?>" class="button">
<span><span><?php echo('Submit') ?></span></span>
</button>
</table>
</form>
<!-- Validation -->
<script type="text/javascript">
//<![CDATA[
var offerteForm = new VarienForm('questionForm', true);
function questionSubmit() {
if (offerteForm.validator.validate()) {
new Ajax.Updater({success: 'questionForm1'}, '<?php echo $this->getUrl(); ?>productqa/index/index/',
{
onComplete: function (request, json) {
Element.hide('questionForm');
Element.show('feedback-submit-button');
}
});
return false;
}
}
//]]>
</script>
<br><br>
<!--Post Question & Answers-->
<ul>
<?php /** @ var Topper_ProductQA_Model_Question $question */
foreach ($this->getQuestions() as $questionanswer) : ?>
<li><?php echo $questionanswer->getQuestion(); ?></li>
<li><?php echo $questionanswer->getAnswer(); ?></li>
<br>
<?php endforeach; ?>
</ul>
2 answers
Ваш код сохранения должен быть в контроллере. Вы указали действие формы в виде кода блока, поэтому каждый раз, когда вы обновляете свою страницу, ваш блок будет вызываться, и это сохранит значение при обновлении. Переместите код сохранения в контроллер
У вас есть эта строка в вашем шаблоне <form id="questionForm" method="post" action="<?php echo $this->getFormQuestions() ?>">
.
Поэтому, когда форма отображается, вызывается метод getFormQuestions
. И это метод, который вставляет данные в вашу базу данных.