Zend Framework - Initial View Helpers (formCheckbox)

PHP programming forum. Ask questions or help people concerning PHP code. Don't understand a function? Need help implementing a class? Don't understand a class? Here is where to ask. Remember to do your homework!

Moderator: General Moderators

Post Reply
User avatar
Luke
The Ninja Space Mod
Posts: 6424
Joined: Fri Aug 05, 2005 1:53 pm
Location: Paradise, CA

Zend Framework - Initial View Helpers (formCheckbox)

Post by Luke »

I just downloaded the Zend Framework 0.9.1 and I'm using the view helpers to create a form. Now... they work great except I'm having the same problem I believe I had with the cakePHP framework's form helpers... how do you set a checkbox's id attribute?? Nothing I do seems to work. All I need to do is have the label for the checkbox work... here's a few of the things I've tried:

Code: Select all

<td><?php echo $this->formCheckbox('event_all_day', $this->formValue('event_all_day'), array('id' => 'event_all_day_yes')); ?> <label for="event_all_day_yes">All day?</label> <span class="note">If selected, you do not need to enter start/end times</td>

Code: Select all

<td><label><?php echo $this->formCheckbox('event_all_day', $this->formValue('event_all_day')); ?> All day?</label> <span class="note">If selected, you do not need to enter start/end times</td>

Code: Select all

<td><label for="event_all_day_yes"><?php echo $this->formCheckbox(array('event_all_day', 'event_all_day_yes'), $this->formValue('event_all_day')); ?> All day?</label> <span class="note">If selected, you do not need to enter start/end times</td>
I tried poking around inside the view helpers code, but I can't make sense of how it arrives at an id's value. It's very strange. Does anybody know how this is supposed to work? :?
User avatar
John Cartwright
Site Admin
Posts: 11470
Joined: Tue Dec 23, 2003 2:10 am
Location: Toronto
Contact:

Post by John Cartwright »

I havn't particularly worked with the checkbox view helper, although taking a look at the source code, perhaps if you add a couple debugging var_dumps to see whats going on with the checkbox generation. I know in version 0.7 there was an issue with checkboxes and id's..

Wish I could be more help.

Code: Select all

<?php
/**
 * Zend Framework
 *
 * LICENSE
 *
 * This source file is subject to the new BSD license that is bundled
 * with this package in the file LICENSE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://framework.zend.com/license/new-bsd
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@zend.com so we can send you a copy immediately.
 *
 * @category   Zend
 * @package    Zend_View
 * @subpackage Helper
 * @copyright  Copyright (c) 2005-2007 Zend Technologies USA Inc. (http://www.zend.com)
 * @license    http://framework.zend.com/license/new-bsd     New BSD License
 */


/**
 * Abstract class for extension
 */
require_once 'Zend/View/Helper/FormElement.php';


/**
 * Helper to generate a "checkbox" element
 * 
 * @category   Zend
 * @package    Zend_View
 * @subpackage Helper
 * @copyright  Copyright (c) 2005-2007 Zend Technologies USA Inc. (http://www.zend.com)
 * @license    http://framework.zend.com/license/new-bsd     New BSD License
 */
class Zend_View_Helper_FormCheckbox extends Zend_View_Helper_FormElement {
    
    /**
     * Generates a 'checkbox' element.
     * 
     * @access public
     * 
     * @param string|array $name If a string, the element name.  If an
     * array, all other parameters are ignored, and the array elements
     * are extracted in place of added parameters.
     * 
     * @param mixed $value The element value.
     * 
     * @param array $attribs Attributes for the element tag.
     * 
     * @param mixed $options If a scalar (single value), the value of the
     * checkbox when checked; if an array, element 0 is the value when
     * checked, and element 1 is the value when not-checked.
     * 
     * @return string The element XHTML.
     */
    public function formCheckbox($name, $value = null, $attribs = null,
        $options = array(1,0))
    {
        $info = $this->_getInfo($name, $value, $attribs, $options);
        extract($info); // name, id, value, attribs, options, listsep, disable
        
        // make sure attribs don't overwrite name and value
        unset($attribs['name']);
        unset($attribs['value']);
        
        // set up checked/unchecked options
        if (empty($options)) {
            $options = array(1, 0);
        } else {
            settype($options, 'array');
            if (! isset($options[1])) {
                $options[1] = null;
            }
        }
        
        // build the element
        if ($disable) {
        
            // disabled.
            if ($value == $options[0]) {
                // checked
                $xhtml = $this->_hidden($name, $options[0]) . '[x]';
            } else {
                // not checked
                $xhtml = $this->_hidden($name, $options[1]) . '[&nbsp;]';
            }
            
        } else {
        
            // enabled. add the hidden "unchecked" option first, then
            // the the checkbox itself) next. this way, if not-checked,
            // the "unchecked" option is returned to the server instead.
            $xhtml = $this->_hidden($name, $options[1]) 
                   . '<input type="checkbox"'
                   . ' name="' . htmlspecialchars($name, ENT_COMPAT, 'UTF-8') . '"'
                   . ' value="' . htmlspecialchars($options[0], ENT_COMPAT, 'UTF-8') . '"';
            
            // is it checked already?
            if ($value == $options[0]) {
                $xhtml .= ' checked="checked"';
            }
            
            // add attributes and close.
            $xhtml .= $this->_htmlAttribs($attribs) . ' />';
        }
        return $xhtml;
    }
}
Post Reply