我正在使用Zend开发一个Web应用程序,并且我对我遇到的问题用尽了想法。简而言之,我试图在弹出窗口中设置联系表单(Fancybox,lightbox,colorbox或其他......)。整个事情很好,从弹出窗口中显示联系表单并允许发送电子邮件。但是,每当出现错误(未填充输入或填充错误)时,我都无法将这些错误显示在弹出窗口中(它实际上将我重定向回正常显示中的表单(视图+布局))以显示错误
这可能是可能的,但我现在认为,或许我可以更容易地将我的错误消息带到一个新的弹出窗口(联系人页面,填写不正确,将导致错误弹出页面......)。我认为这种替代方案可能看起来很酷,但实际上却遇到了麻烦。现在我真正的问题是:我们真的可以在弹出窗口上制作一个表单,使用Facybox(Lighbox或任何其他实际的......只是想要我的弹出窗口)和Zend?任何大师都在哪里? 非常感谢 这是代码:
链接例如:
<a class="popLink" href=" <?php echo $this->url(array('module'=>'default', 'controller'=>'contact', 'action'=>'sendmail')).'?ProID='.$this->proProfil->getProID(); ?>">Contact</a>
行动:
public function sendmailAction()
{
$this->_helper->layout()->setLayout('blank');
$request = $this->getRequest();
$proID = $this->_getParam("ProID");
$professionalsList = new Model_DirPro();
$proName = $professionalsList->getProInfo($proID);
$translate = Zend_Registry::get('translate');
Zend_Validate_Abstract::setDefaultTranslator($translate);
Zend_Form::setDefaultTranslator($translate);
$contactform = new Form_ContactForm();
$contactform->setTranslator($translate);
$contactform->setAttrib('id', 'contact');
$this->view->contactform = $contactform;
$this->view->proName = $proName;
if ($request->isPost()){
if ($contactform->isValid($this->_getAllParams())){
$mailSubject = $contactform->getValue('mailsubject');
if ($contactform->mailattcht->isUploaded()) {
$contactform->mailattcht->receive();
//etc....
形式:
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');
}
}
答案 0 :(得分:2)
我建议实施AJAX验证。这样就可以在提交表单之前对表单进行验证。 ZendCasts有一个关于如何实现这个目标的好教程:http://www.zendcasts.com/ajaxify-your-zend_form-validation-with-jquery/2010/04/
答案 1 :(得分:0)
通过contextSwitch动作帮助程序处理Ajax请求。您可以在控制器的init方法中指定操作需要处理的各种上下文(xml或json),如下所示:
public function init()
{
$this->_helper->contextSwitch()
->addActionContext('send-mail', 'json')
->initContext()
;
}
请求网址应包含追加到查询字符串的“format = json”。这将执行操作并以json格式发送响应。 JSON上下文的默认行为是提取视图的所有公共属性并将其编码为JSON。有关详细信息,请参阅http://framework.zend.com/manual/en/zend.controller.actionhelpers.html
答案 2 :(得分:0)
我发现了一个“可能不是最漂亮的”工作解决方案,它确实使用了前面的zendcast中提到的ajax来验证停止真正的验证(preventdefault),处理数据返回结果,如果一切正常,请重新启动它