Создание собстенного элемента в QuickForm

Frutik

1024-й
Создание собстенного элемента в QuickForm

попробовал создать новый элемент для QuickForm - кнопку сабмит с дополнительным подтверждением сабмита

PHP:
require_once 'HTML/QuickForm/submit.php';

/**
* HTML class for a text field
*
* @author       Andrew Kornilov <[email protected]>
* @version      1.0
* @access       public
*/
class HTML_QuickForm_confirmed_submit extends HTML_QuickForm_submit
{
                
    // {{{ constructor

    /**
     * Class constructor
     *
     * @param     string    $elementName    (optional)Input field name attribute
     * @param     string    $elementLabel   (optional)Input field label
     * @param     mixed     $attributes     (optional)Either a typical HTML attribute string
     *                                      or an associative array
     * @param    string     $warning        (optional) Confirmation question
     * @access    public
     * @return    void
     */
    function HTML_QuickForm_confirmed_submit($elementName=null, $elementLabel=null, $attributes=null, $warning='are you sure?')
    {
        HTML_QuickForm_submit::HTML_QuickForm_submit($elementName, $elementLabel, $attributes);
    
    echo $warning . '<br>';

        $this->setWarning($warning);
    } //end constructor
        
    // }}}
    // {{{ setWarning()

    /**
     * Sets warning text for submit button
     *
     * @param     string    $warning  Warning string
     * @since     1.0
     * @access    public
     * @return    void
     */
    function setWarning($warning)
    {
    $warn = "if(!confirm('" . $warning . "')){ return false; }";
    $this->updateAttributes(array('onclick' => $warn));
    } //end func setWarning

    // }}}

} //end class HTML_QuickForm_confirmed_submit
для теста сделал такой скрипт:

PHP:
require_once 'HTML/QuickForm.php';

$form =& new HTML_QuickForm;
    
$form->registerElementType('confirmedsubmit', 'confirmedsubmit.php', 'HTML_QuickForm_confirmed_submit');

$submit0 =& $form->addElement('confirmedsubmit', 's0', 'Save');
$submit1 =& $form->addElement('confirmedsubmit', 's1', 'Save',null,'Sure 1 ?');
$submit2 =& $form->addElement('confirmedsubmit', 's2', 'Save');
$submit2->setWarning('Sure 2 ?');    

$form->display();
в результате 2 и 3 кнопки работают так как нада а в первой выскакивает окно конфирма без текста:

PHP:
are you sure?<br><br>are you sure?<br>Sure 1 ?<br>are you sure?<br><br>
<form action="/1/test.php" method="post" name="" id="">
<div>
<table border="0">

	<tr>
		<td align="right" valign="top"><b></b></td>
		<td valign="top" align="left"><input name="s0" value="Save" type="submit" onclick="if(!confirm('')){ return false; }" /></td>
	</tr>

	<tr>
		<td align="right" valign="top"><b></b></td>
		<td valign="top" align="left"><input name="s1" value="Save" type="submit" onclick="if(!confirm('Sure 1 ?')){ return false; }" /></td>
	</tr>
	<tr>
		<td align="right" valign="top"><b></b></td>
		<td valign="top" align="left"><input name="s2" value="Save" type="submit" onclick="if(!confirm('Sure 2 ?')){ return false; }" /></td>
	</tr>
</table>

</div>
</form>
такое впечатление что конструктор выполняется два раза и при втором выполнении "убивает" дефаултную строчку

что я не так делаю?

-~{}~ 01.06.05 16:30:

заработало после переписывания конструктора с наводки Frol таким образом

PHP:
function HTML_QuickForm_confirmed_submit($elementName=null, $elementLabel=null, $attributes=null, $warning=null)
    {
        HTML_QuickForm_submit::HTML_QuickForm_submit($elementName, $elementLabel, $attributes);

        $this->setWarning($warning == null ? 'are you sure?' : $warning);
    }
 
Сверху