From 5a55bca3e31f4cefa2b3fa6e854431db91528837 Mon Sep 17 00:00:00 2001 From: xue <> Date: Mon, 28 Aug 2006 02:21:48 +0000 Subject: Moved createdOnTemplate() and addParsedObject() from TControl to TComponent so that template instantiation is more consistent among non-control components and controls. --- framework/TComponent.php | 26 ++++++++++++++++++++++++++ framework/Web/UI/TControl.php | 22 ++-------------------- framework/Web/UI/TTemplateManager.php | 7 ++++--- 3 files changed, 32 insertions(+), 23 deletions(-) (limited to 'framework') diff --git a/framework/TComponent.php b/framework/TComponent.php index 7564edff..21a62abd 100644 --- a/framework/TComponent.php +++ b/framework/TComponent.php @@ -415,6 +415,32 @@ class TComponent throw new TInvalidOperationException('component_statements_invalid',get_class($this),$statements,$e->getMessage()); } } + + /** + * This method is invoked after the component is instantiated by a template. + * When this method is invoked, the component's properties have been initialized. + * The default implementation of this method will invoke + * the potential parent component's {@link addParsedObject}. + * This method can be overriden. + * @param TComponent potential parent of this control + * @see addParsedObject + */ + public function createdOnTemplate($parent) + { + $parent->addParsedObject($this); + } + + /** + * Processes an object that is created during parsing template. + * The object can be either a component or a static text string. + * This method can be overriden to customize the handling of newly created objects in template. + * Only framework developers and control developers should use this method. + * @param string|TComponent text string or component parsed and instantiated in template + * @see createdOnTemplate + */ + public function addParsedObject($object) + { + } } /** diff --git a/framework/Web/UI/TControl.php b/framework/Web/UI/TControl.php index d13b94cf..ecaf300c 100644 --- a/framework/Web/UI/TControl.php +++ b/framework/Web/UI/TControl.php @@ -1041,26 +1041,8 @@ class TControl extends TApplicationComponent implements IRenderable, IBindable } /** - * This method is invoked after the control is instantiated by a template. - * When this method is invoked, the control should have a valid TemplateControl - * and has its properties initialized according to template configurations. - * The control, however, has not been added to the page hierarchy yet. - * The default implementation of this method will invoke - * the potential parent control's {@link addParsedObject} to add the control as a child. - * This method can be overriden. - * @param TControl potential parent of this control - * @see addParsedObject - */ - public function createdOnTemplate($parent) - { - $parent->addParsedObject($this); - } - - /** - * Processes an object that is created during parsing template. - * The object can be either a component or a static text string. - * By default, the object will be added into the child control collection. - * This method can be overriden to customize the handling of newly created objects in template. + * Adds the object instantiated on a template to the child control collection. + * This method overrides the parent implementation. * Only framework developers and control developers should use this method. * @param string|TComponent text string or component parsed and instantiated in template * @see createdOnTemplate diff --git a/framework/Web/UI/TTemplateManager.php b/framework/Web/UI/TTemplateManager.php index 1fde4acc..79c163fb 100644 --- a/framework/Web/UI/TTemplateManager.php +++ b/framework/Web/UI/TTemplateManager.php @@ -266,7 +266,7 @@ class TTemplate extends TApplicationComponent implements ITemplate foreach($this->_tpl as $key=>$object) { $parent=isset($controls[$object[0]])?$controls[$object[0]]:$tplControl; - if(!$parent->getAllowChildControls()) + if(($parent instanceof TControl) && !$parent->getAllowChildControls()) continue; if(isset($object[2])) // component { @@ -301,6 +301,7 @@ class TTemplate extends TApplicationComponent implements ITemplate } else if($component instanceof TComponent) { + $controls[$key]=$component; if(isset($properties['id'])) { if(is_array($properties['id'])) @@ -314,7 +315,7 @@ class TTemplate extends TApplicationComponent implements ITemplate if($parent===$tplControl) $directChildren[]=$component; else - $parent->addParsedObject($component); + $component->createdOnTemplate($parent); } } else // string @@ -343,7 +344,7 @@ class TTemplate extends TApplicationComponent implements ITemplate // if the child needs its own child controls. foreach($directChildren as $control) { - if($control instanceof TControl) + if($control instanceof TComponent) $control->createdOnTemplate($tplControl); else $tplControl->addParsedObject($control); -- cgit v1.2.3