In my current project I have to use link tags instead input elements for my form buttons. To do this I needed to create new form element, new helper and add helper path to my bootstrap file.
First I created element class file Irm_Form_Element_HrefButton, this class extends Zend_Form_Element_Submit, because I would all I need is just change helper class name to hrefButton. So my element class file:
<?php
class Irm_Form_Element_HrefButton extends Zend_Form_Element_Submit
{
public $helper = 'hrefButton';
}
To create helper I copied submit button helper class and changed some code:
<?php
class Irm_View_Helper_HrefButton extends Zend_View_Helper_FormElement
{
public function hrefButton($name, $value = null, $attribs = null)
{
$info = $this->_getInfo($name, $value, $attribs);
extract($info); // name, value, attribs, options, listsep, disable
// XHTML or HTML end tag?
$endTag = ' />';
if (($this->view instanceof Zend_View_Abstract) && !$this->view->doctype()->isXhtml()) {
$endTag= '>';
}
// Render the button.
$xhtml = '<input type="hidden"'
. ' name="' . $this->view->escape($name) . '"'
. ' value="' . $this->view->escape($value) . '"'
. $endTag;
$xhtml = $xhtml . '<a href="#"'
. ' id="' . $this->view->escape($id) . '"'
. $this->_htmlAttribs($attribs)
.' ><span>'.$this->view->escape($value).'</span></a>';
return $xhtml;
}
}
Somewhere in bootstrap file in view initialization function add helper path like this:
// ... bootstrap class
protected function _initView ()
{
// .... init view
$view->addHelperPath(APPLICATION_PATH . '/../library/Irm/View/Helper','Irm_View_Helper');
return $view;
}
Now you can use your new form element in your form class file, to make link submit your form you can set onclick event with setAttrib() method like this:
//... form class file
$element = new Irm_Form_Element_HrefButton('submit');
$element->setLabel('Submit')
->setAttrib('onclick', "document.getElementById('my-form').submit();return false;");
$this->addElement($element);
//... form class file
the black background in the code snippet is an extremely bad idea!!
it is agonizing to read!