Zend framework 弹出窗口中的Zend表单(fancybox、lightbox…)
我正在使用Zend开发一个web应用程序,对于我遇到的一个问题,我已经没有想法了。简单地说,我正在尝试在弹出窗口中创建一个联系人表单(Fancybox、lightbox、colorbox或其他什么…)。从弹出窗口中显示联系人表单并允许发送电子邮件的意义上讲,整个程序运行良好。但是,每当出现错误(未填写的输入或填写错误)时,我都无法在弹出窗口中显示这些错误(它实际上会将我重定向回正常显示(视图+布局)中的表单以显示错误) 这也许是可能的,但我现在想,也许我可以更容易地将我的错误消息带到一个新的弹出窗口(联系人页面,填写不当,会导致错误弹出页面…)。我认为这个替代方案可能看起来很酷,但做起来确实有困难。现在我真正的问题是:我们真的可以使用Facybox在弹出窗口上制作表单吗(Lighbox或任何其他实际上…只是想要我的弹出窗口)和Zend?这里有大师吗?? 谢谢 代码如下: 链接,例如:Zend framework 弹出窗口中的Zend表单(fancybox、lightbox…),zend-framework,popup,zend-form,fancybox,lightbox,Zend Framework,Popup,Zend Form,Fancybox,Lightbox,我正在使用Zend开发一个web应用程序,对于我遇到的一个问题,我已经没有想法了。简单地说,我正在尝试在弹出窗口中创建一个联系人表单(Fancybox、lightbox、colorbox或其他什么…)。从弹出窗口中显示联系人表单并允许发送电子邮件的意义上讲,整个程序运行良好。但是,每当出现错误(未填写的输入或填写错误)时,我都无法在弹出窗口中显示这些错误(它实际上会将我重定向回正常显示(视图+布局)中的表单以显示错误) 这也许是可能的,但我现在想,也许我可以更容易地将我的错误消息带到一个新的弹出
<a class="popLink" href=" <?php echo $this->url(array('module'=>'default', 'controller'=>'contact', 'action'=>'sendmail')).'?ProID='.$this->proProfil->getProID(); ?>">Contact</a>
表格:
class Form_ContactForm extends Zend_Form
{
public function init ()
{
$this->setName("email");
$this->setMethod('post');
$this->addElement('text', 'mailsubject',
array('filters' => array('StringTrim'),
'validators' => array(), 'required' => true, 'label' => 'Subject:'));
$mailattcht = new Zend_Form_Element_File('mailattcht');
$mailattcht->setLabel('Attach File:')->setDestination(APPLICATION_PATH.'/../public/mails');
$mailattcht->addValidator('Count', false, 1);
$mailattcht->addValidator('Size', false, 8000000);
$mailattcht->addValidator('Extension', false,
'jpg,png,gif,ppt,pptx,doc,docx,xls,xslx,pdf');
$this->addElement($mailattcht, 'mailattcht');
$this->addElement('textarea', 'mailbody',
array('filters' => array('StringTrim'),
'validators' => array(), 'required' => true, 'label' => 'Body:'));
$this->addElement('submit', 'send',
array('required' => false, 'ignore' => true, 'label' => 'Send'));
$this->addElement('hidden', 'return', array(
'value' => Zend_Controller_Front::getInstance()->getRequest()->getRequestUri(),
));
$this->setAttrib('enctype', 'multipart/form-data');
}
}
我建议实施AJAX验证。这将允许在提交表单之前对表单进行验证。ZendCasts提供了一个很好的教程,介绍了如何实现这一点:AJAX请求通过contextSwitch操作助手进行处理。您可以指定操作需要处理的各种上下文(xml或json)在控制器的init方法中,如下所示:
public function init()
{
$this->_helper->contextSwitch()
->addActionContext('send-mail', 'json')
->initContext()
;
}
请求url应包含一个附加到查询字符串的“format=json”。这将执行操作并以json格式发送响应。json上下文的默认行为是提取视图的所有公共属性并将其编码为json。更多详细信息可在此处找到。我发现了一个“可能不是最漂亮的”有效的解决方案是,如前一个zendcast中提到的那样,使用ajax进行验证,以停止真正的验证(preventdefault),处理数据并返回结果,如果一切正常,则重新启动它
public function init()
{
$this->_helper->contextSwitch()
->addActionContext('send-mail', 'json')
->initContext()
;
}