Sådan benyttes komponenten ViewSelect klassen
Først skal du inkludere den fil der beskriver komponenten, som en klasse fil
<? require_once(HTML_PACKAGE_PATH.'/ViewSelect.php'); ?>
Dernæst kan du enten benytte komponenten som et taglib (statiske metoder):
<? ViewSelect::display($param1, $param2, $param3, ...); ?>
eller du kan lave en instance af komponenten og benytte metoderne direkte:
<? $object = new ViewSelect($param1, $param2, $param3, ...); print $object->getHtml(); ?>
Sådan vises komponenten ViewSelect klassen
Den fulde PHP kildekode for ViewSelect klassen
<?php/** * @package db-select * @see HTML_DB_SELECT_VIEW_PATH.'/ViewSelect.php' * @copyright (c) http://Finn-Rasmussen.com * @license http://Finn-Rasmussen.com/license/ myPHP License conditions * @author http://Finn-Rasmussen.com * @version 1.11 * @since 27-nov-2009 *//** * The required files */require_once(HTML_BASE_COMMON_PATH.'/Html.php');require_once(HTML_FORM_COMPONENT_PATH.'/Select.php');require_once(HTML_FORM_COMPONENT_PATH.'/Options.php');require_once(HTML_FORM_COMPONENT_PATH.'/ElementFactory.php');/** * Generates the html for a View Links * <code> * Usage: * This is how you hardcode some test data. A valid datareader object is returned * ================================================================================ * $name1 = 'Finn'; * $optgroup1 = 'Finn'; * $value1 = 'http://FinnRasmussen.dk/'; * $text1 = 'Finn Rasmussen'; * $selected1 = 'selected'; * * $name2 = 'Hvepse'; * $optgroup2 = 'Hvepse.dk'; * $value2 = 'http://hvepse.dk/'; * $text2 = 'HvepseEksperten.dk'; * $selected2 = ''; // Empty * * $rows = array( * array(SELECT_OPTION_NAME=>$name1,SELECT_OPTGROUP_LABEL=>$optgroup1,SELECT_OPTION_VALUE=>$value1,SELECT_OPTION_TEXT=>$text1,SELECT_OPTION_SELECTED=>$selected1,), * array(SELECT_OPTION_NAME=>$name2,SELECT_OPTGROUP_LABEL=>$optgroup2,SELECT_OPTION_VALUE=>$value2,SELECT_OPTION_TEXT=>$text2,SELECT_OPTION_SELECTED=>$selected2,), * ); * $header = ''; // The header meta data * $default = ''; // The default meta data array * $limit = ''; // The limit to use for the array * $sort = true; * $datareader = DataReaderFactory::newDataReader($rows, $header, $default, $limit, $sort); * * This is how you query a mysql database for the datareader data * ============================================================== * $table = DATABASE_PREFIX.TABLE_NAME_SELECT; * $id = ""; * $sid = UNIT_TEST_SID; //Session::getId(UNIT_TEST_SID, __FILE__, __LINE__); * $translate = ""; //true; * $orderby = ""; //SELECT_OPTGROUP_LABEL; * $sort = ""; //SORT_BY_ASC; * $query = new QuerySelect($table, $id, $sid, $translate, $orderby, $sort); * $sql = $query->getSql(); * $datareader = Command::newDataReader($sql); * * And now you may use the datareader object * $name = ""; * $class = CSS_SELECT_CLASS; * $onchange = ""; * * $view = new ViewSelect($datareader, $name, $class, $onchange, $label); * print $view->getHtml(); * Or * ViewSelect::display($datareader, $name, $class, $onchange, $label); * * It will generate the follwing HTML * =================================== * <label for="$name">$label</label> * <select name="$name" id="$name" class="$class"> * <optgroup label="$optgroup1"> * <option value="$value1" selected="selected">$text1</option> * </optgroup> * <optgroup label="$optgroup2"> * <option value="$value2">$text2</option> * </optgroup> * </select> * * </code> * @package db-select */class ViewSelect extends Html { /* * @var $datareader The datareader object */ private $datareader = null; /** * @var String $name The name of the select element */ private $name = ""; /** * @var String $class The CSS class name for the select element */ private $class = ""; /** * @var String $onchange The onchange javascript code for the select element */ private $onchange = ""; /** * @var String $label The label assocated with the Select element */ private $label = ""; /** * Constructor * @param DataReader / array $datareader The Data Reader object OR an array * @param String $name The name of the select element * @param String $class The CSS class name for the select element * @param String $onchange The onchange javascript code for the select element * @param String $label The label assocated with the Select element */ function __construct($datareader, $name='', $class='', $onchange='', $label='') { $this->datareader = $datareader; $this->name = $name !== "" ? $name : ""; $this->class = $class !== "" ? $class : CSS_SELECT_CLASS; $this->onchange = $onchange !== "" ? $onchange : ""; $this->label = $label !== "" ? $label : ""; parent::__construct(); } /** * TODO move to RadioGroup ? * @param String $type The type of element to create * @return Object The object */ private function rows($type) { $object = new Raw(); $rows = $this->datareader->getRows(); foreach($rows as $no=>$row) { $key = ''; $name = ''; $value = ''; $len = ''; $required = ''; $debug = ''; $checked = ''; $class = ''; $onblur = ''; foreach($row as $aKey=>$aValue) { switch($aKey) { case SELECT_OPTION_NAME: case SELECT_OPTGROUP_LABEL: case SELECT_OPTION_VALUE: case SELECT_OPTION_TEXT: case SELECT_OPTION_SELECTED: $$aKey = $aValue; break; case DATABASE_PREFIX.TABLE_NAME_SESSION.SELECT_TABLE_ID: case DATABASE_PREFIX.TABLE_NAME_SELECT.SELECT_TABLE_ID: case SELECT_CREATED_DATE: case SELECT_MODIFIED_DATE: // Ignore break; default: //die('File: '.__FILE__."<br />\r\nLine: ".__LINE__."<br />\r\n".'Unknown option attribute found key='.$aKey." value=$aValue"); break; } } if ($type === 'radio' || $type === 'checkbox') { $checked = $selected !== '' ? 'checked' : ''; $key = $key !== '' ? $key : ($label != '' ? $label : $text); } if ($name === "") { $name = $this->name; } $object->add(ElementFactory::newElement($type, $key, $name, $value, $len, $required, $debug, $checked, $class, $onblur)); } return $object; } /** * Return a fully populated select/option element * @return Select The object */ private function newSelect() { $object = new Raw(); $rows = $this->datareader->getRows(); $options = new Options($rows); $name = $this->name; if ($name === "") { $name = $options->get('name'); } $text = $this->label !== '' ? $this->label : $name; if ($text !== '') { if (defined('HTML_LANGUAGE_UTIL_PATH')) { $text = Translate::sql($text); } } $label = new Label($text); $object->add($label); $select = new Select($name, $this->class, $this->onchange); $select->add($options); $object->add($select); return $object; } /** * Return the content as an object * @return Object The content as an object */ function newContent() { $object = new Raw(); $numrows = $this->datareader->getNumRows(); if ($numrows === 0) { $object = new Raw("No data, count = 0"); } else if ($numrows === SELECT_CHECKBOX_WHEN) { $type = 'checkbox'; $object->add($this->rows($type)); } else if ($numrows < SELECT_RADIO_WHEN) { $type = 'radio'; $object->add($this->rows($type)); } else { $object->add($this->newSelect()); } return $object; } /** * Returns the html for the control * including the html for the added elements * @return String the complete html */ function getHtml() { $html = $this->html; $this->add($this->newContent()); $html .= $this->getElements(); return $html; } /** * Display html * <code> * Usage: * ViewSelect::display($datareader, $name, $class, $onchange, $label); * </code> * @static * @param DataReader / array $datareader The Data Reader object OR an array * @param String $name The name of the select element * @param String $class The CSS class name for the select element * @param String $onchange The onchange javascript code for the select element * @param String $label The label assocated with the Select element */ public static function display($datareader=null, $name='', $class='', $onchange='', $label='') { $html = new ViewSelect($datareader, $name, $class, $onchange, $label); $html->addHtml(); }}?>
Den fulde HTML kildekode for ViewSelect klassen
<? <!-- DEBUG: ViewSelect --> <!-- DEBUG: Label --> <label for="Label1" accesskey="L" title="Accelerator key, use (Alt + L)"> <b>Væ<span class="baseColorDark">l</span>g ...</b> (Alt + L) </label><br /> <!-- DEBUG: Select --> <select name="test" id="Label1" class="formXLARGE formSelect" tabindex="1"> <!-- DEBUG: Options --> <!-- DEBUG: Optgroup --> <optgroup label="privat"> <!-- DEBUG: Option --> <option value="http://FinnRasmussen.dk/">Finn Rasmussen</option> </optgroup> <!-- DEBUG: Optgroup --> <optgroup label="erhverv"> <!-- DEBUG: Option --> <option value="http://hvepsebo.dk/" selected="selected">HvepseBo.dk</option> <!-- DEBUG: Option --> <option value="http://HvepseEksperten.dk/" selected="selected">HvepseEksperten.dk</option> </optgroup> </select><br /> ?>
Her er 'klasse metoderne' for ViewSelect klassen:
Her er 'objekt variable' for ViewSelect klassen: