Smarty Forum Index Smarty
WARNING: All discussion is moving to https://reddit.com/r/smarty, please go there! This forum will be closing soon.

html_checkboxes labels extra quick fix

 
This forum is locked: you cannot post, reply to, or edit topics.   This topic is locked: you cannot edit posts or make replies.    Smarty Forum Index -> Feature Requests
View previous topic :: View next topic  
Author Message
ludicruz
Smarty n00b


Joined: 11 Sep 2006
Posts: 1

PostPosted: Mon Sep 11, 2006 3:38 pm    Post subject: html_checkboxes labels extra quick fix Reply with quote

I made a quick change to html_checkboxes so that the labels on the checkboxes can also have extra information added to them.
the labels option is usually true. Now, if you have the labels option as a string, the string will be included in the label-tag.

so {html_checkboxes labels='class="this that theother"' ....}
will output checkboxes with the label tag:
<label class="this that theother">

Hope this helps others,
ludicruz

note: the original code was from the 2.6.14 code base

Code:

<?php
/**
 * Smarty plugin
 * @package   Smarty
 * @subpackage plugins
 */


/**
 * Smarty {html_checkboxes}   function plugin
 *
 * File:      function.html_checkboxes.php<br>
 * Type:      function<br>
 * Name:      html_checkboxes<br>
 * Date:      24.Feb.2003<br>
 * Purpose:      Prints out a   list of   checkbox input types<br>
 * Input:<br>
 *          - name        (optional) - string default "checkbox"
 *          - values     (required) - array
 *          - options     (optional) - associative array
 *          - checked     (optional) - array default not set
 *          - separator  (optional) - ie <br> or &
 *          - output     (optional) - the output next to each checkbox
 *          - assign     (optional) - assign the output as   an array to   this variable
 *          - labels     (optional) - mixed - if a string this is put on the labels tag - if boolean - false shows no label tags and true just puts the label tags
 * Examples:
 * <pre>
 * {html_checkboxes   values=$ids   output=$names}
 * {html_checkboxes   values=$ids   name='box' separator='<br>'   output=$names}
 * {html_checkboxes   values=$ids   checked=$checked separator='<br>' output=$names}
 * </pre>
 * @link http://smarty.php.net/manual/en/language.function.html.checkboxes.php {html_checkboxes}
 *      (Smarty   online manual)
 * @author      Christopher Kvarme <christopher.kvarme@flashjab.com>
 * @author credits to Monte   Ohrt <monte   at ohrt   dot   com>
 * @version      1.0
 * @param array
 * @param Smarty
 * @return string
 * @uses smarty_function_escape_special_chars()
 */
function smarty_function_html_checkboxes($params, &$smarty)
{
   require_once $smarty->_get_plugin_filepath('shared','escape_special_chars');

   $name =   'checkbox';
   $values   = null;
   $options = null;
   $selected =   null;
   $separator = '';
   $labels   = true;
   $output   = null;

   $extra = '';

   foreach($params   as $_key =>   $_val) {
      switch($_key) {
         case 'name':
         case 'separator':
            $$_key = $_val;
            break;

         case 'labels':
            if(is_string($_val))
               $$_key = $_val;
            else
               $$_key = (bool)$_val;
            break;

         case 'options':
            $$_key = (array)$_val;
            break;

         case 'values':
         case 'output':
            $$_key = array_values((array)$_val);
            break;

         case 'checked':
         case 'selected':
            $selected =   array_map('strval',   array_values((array)$_val));
            break;

         case 'checkboxes':
            $smarty->trigger_error('html_checkboxes: the use of   the   "checkboxes" attribute is deprecated, use "options"   instead', E_USER_WARNING);
            $options = (array)$_val;
            break;

         case 'assign':
            break;

         default:
            if(!is_array($_val)) {
               $extra .= '   '.$_key.'="'.smarty_function_escape_special_chars($_val).'"';
            } else {
               $smarty->trigger_error("html_checkboxes: extra attribute '$_key' cannot   be an array", E_USER_NOTICE);
            }
            break;
      }
   }

   if (!isset($options) &&   !isset($values))
      return ''; /* raise   error here?   */

   settype($selected, 'array');
   $_html_result =   array();

   if (isset($options)) {

      foreach   ($options as $_key=>$_val)
         $_html_result[]   = smarty_function_html_checkboxes_output($name,   $_key, $_val, $selected, $extra, $separator, $labels);


   } else {
      foreach   ($values as   $_i=>$_key)   {
         $_val =   isset($output[$_i])   ? $output[$_i] : '';
         $_html_result[]   = smarty_function_html_checkboxes_output($name,   $_key, $_val, $selected, $extra, $separator, $labels);
      }

   }

   if(!empty($params['assign'])) {
      $smarty->assign($params['assign'], $_html_result);
   } else {
      return implode("\n",$_html_result);
   }

}

function smarty_function_html_checkboxes_output($name, $value, $output,   $selected, $extra, $separator, $labels)
{
   $_output = '';
   if($labels === true)
      $_output .= '<label>';
   elseif(is_string($labels))
      $_output .= "<label {$labels}>";
   $_output .=   '<input   type="checkbox"   name="'
      . smarty_function_escape_special_chars($name) . '[]" value="'
      . smarty_function_escape_special_chars($value) . '"';

   if (in_array((string)$value, $selected)) {
      $_output .=   ' checked="checked"';
   }
   $_output .=   $extra . ' />' . $output;
   if ($labels) $_output .= '</label>';
   $_output .=    $separator;

   return $_output;
}

?>
[/code]
Back to top
View user's profile Send private message
Display posts from previous:   
This forum is locked: you cannot post, reply to, or edit topics.   This topic is locked: you cannot edit posts or make replies.    Smarty Forum Index -> Feature Requests All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group
Protected by Anti-Spam ACP