From 3dcb3c4188c8d5836a2db0847d2fc43bc7e7e4d8 Mon Sep 17 00:00:00 2001 From: xue <> Date: Mon, 20 Feb 2006 06:23:38 +0000 Subject: Cleaned up TForm and THead. --- framework/Web/UI/WebControls/THead.php | 99 ++++++++++++++++++++------- framework/Web/UI/WebControls/TListControl.php | 2 +- 2 files changed, 75 insertions(+), 26 deletions(-) (limited to 'framework/Web/UI/WebControls') diff --git a/framework/Web/UI/WebControls/THead.php b/framework/Web/UI/WebControls/THead.php index 3a949e34..30f6cbbd 100644 --- a/framework/Web/UI/WebControls/THead.php +++ b/framework/Web/UI/WebControls/THead.php @@ -13,14 +13,22 @@ /** * THead class * - * THead displays a <head> element on a page. It displays the content - * enclosed in its body. In addition, it displays the page title set by the - * {@link setTitle Title} property, and the meta tags registered via - * {@link registerMetaTag}. Stylesheet and JavaScripts registered via + * THead displays a head element on a page. It displays the content + * enclosed in its body and the page title set by the + * {@link setTitle Title} property. In addition, stylesheets and JavaScripts registered via * {@link TClientScriptManager::registerStyleSheet}, {@link TClientScriptManager::registerStyleSheetFile} * {@link TClientScriptManager::registerHeadJavaScript}, and * {@link TClientScriptManager::registerHeadJavaScriptFile} will also be displayed * in the head. + * THead also manages and displays meta tags through its {@link getMetaTags MetaTags} + * property. You can add a meta object to the collection in code dynamically, + * or add it in template using the following syntax, + * + * + * + * + * + * * * Note, {@link TPage} has a property {@link TPage::getHead Head} that refers to * the THead control currently on the page. A page can have at most once THead @@ -36,9 +44,9 @@ class THead extends TControl { /** - * @var array list of meta name tags to be loaded by {@link THead} + * @var TList list of meta name tags to be loaded by {@link THead} */ - private $_metaTags=array(); + private $_metaTags=null; /** * Registers the head control with the current page. @@ -54,6 +62,21 @@ class THead extends TControl $this->getPage()->setHead($this); } + /** + * Processes an object that is created during parsing template. + * This method adds TMetaTag components into the {@link getMetaTags MetaTags} + * collection of the head control. + * @param string|TComponent text string or component parsed and instantiated in template + * @see createdOnTemplate + */ + public function addParsedObject($object) + { + if($object instanceof TMetaTag) + $this->getMetaTags()->add($object); + else + parent::addParsedObject($object); + } + /** * @return string the page title. */ @@ -74,24 +97,16 @@ class THead extends TControl } /** - * Registers a meta tag to be imported with the page body - * @param string a key that identifies the meta tag to avoid repetitive registration - * @param TMetaTag the meta tag to be registered - * @see isTagRegistered() - */ - public function registerMetaTag($key,$metaTag) - { - $this->_metaTags[$key]=$metaTag; - } - - /** - * @param string a key identifying the meta tag. - * @return boolean whether the named meta tag has been registered before - * @see registerMetaTag() + * @return TMetaTagCollection meta tag collection */ - public function isMetaTagRegistered($key) + public function getMetaTags() { - return isset($this->_metaTags[$key]); + if(($metaTags=$this->getViewState('MetaTags',null))===null) + { + $metaTags=new TMetaTagCollection; + $this->setViewState('MetaTags',$metaTags,null); + } + return $metaTags; } /** @@ -104,10 +119,13 @@ class THead extends TControl if(($title=$page->getTitle())==='') $title=$this->getTitle(); $writer->write("\n".THttpUtility::htmlEncode($title)."\n"); - foreach($this->_metaTags as $metaTag) + if(($metaTags=$this->getMetaTags())!==null) { - $metaTag->render($writer); - $writer->writeLine(); + foreach($metaTags as $metaTag) + { + $metaTag->render($writer); + $writer->writeLine(); + } } $cs=$page->getClientScript(); $cs->renderStyleSheetFiles($writer); @@ -256,4 +274,35 @@ class TMetaTag extends TComponent } } + +/** + * TMetaTagCollection class + * + * TMetaTagCollection represents a collection of meta tags + * contained in a {@link THead} control. + * + * @author Qiang Xue + * @version $Revision: $ $Date: $ + * @package System.Web.UI.WebControls + * @since 3.0 + */ +class TMetaTagCollection extends TList +{ + /** + * Inserts an item at the specified position. + * This overrides the parent implementation by performing type + * check on the item being added. + * @param integer the speicified position. + * @param mixed new item + * @throws TInvalidDataTypeException if the item to be inserted is not a {@link TMetaTag} + */ + public function insertAt($index,$item) + { + if($item instanceof TMetaTag) + parent::insertAt($index,$item); + else + throw new TInvalidDataTypeException('metatagcollection_metatag_invalid'); + } +} + ?> \ No newline at end of file diff --git a/framework/Web/UI/WebControls/TListControl.php b/framework/Web/UI/WebControls/TListControl.php index 3c1cd547..be0abd38 100644 --- a/framework/Web/UI/WebControls/TListControl.php +++ b/framework/Web/UI/WebControls/TListControl.php @@ -195,7 +195,7 @@ abstract class TListControl extends TDataBoundControl // so we make them be effective now if($this->_cachedSelectedValue!==null) { - $index=$items->findIndexByValue($value); + $index=$items->findIndexByValue($this->_cachedSelectedValue); if($index===-1 || ($this->_cachedSelectedIndex!==-1 && $this->_cachedSelectedIndex!==$index)) throw new TInvalidDataValueException('listcontrol_selection_invalid'); $this->setSelectedIndex($index); -- cgit v1.2.3