diff options
Diffstat (limited to 'framework')
| -rw-r--r-- | framework/Web/UI/TTemplateManager.php | 33 | ||||
| -rw-r--r-- | framework/Web/UI/WebControls/TWizard.php | 10 | 
2 files changed, 37 insertions, 6 deletions
| diff --git a/framework/Web/UI/TTemplateManager.php b/framework/Web/UI/TTemplateManager.php index 86567243..ee38405b 100644 --- a/framework/Web/UI/TTemplateManager.php +++ b/framework/Web/UI/TTemplateManager.php @@ -259,6 +259,7 @@ class TTemplate extends TApplicationComponent implements ITemplate  		if(($page=$tplControl->getPage())===null)
  			$page=$this->getService()->getRequestedPage();
  		$controls=array();
 +		$directChildren=array();
  		foreach($this->_tpl as $key=>$object)
  		{
  			$parent=isset($controls[$object[0]])?$controls[$object[0]]:$tplControl;
 @@ -290,7 +291,10 @@ class TTemplate extends TApplicationComponent implements ITemplate  					// apply attributes
  					foreach($properties as $name=>$value)
  						$this->configureControl($component,$name,$value);
 -					$component->createdOnTemplate($parent);
 +					if($parent===$tplControl)
 +						$directChildren[]=$component;
 +					else
 +						$component->createdOnTemplate($parent);
  				}
  				else if($component instanceof TComponent)
  				{
 @@ -304,7 +308,10 @@ class TTemplate extends TApplicationComponent implements ITemplate  					}
  					foreach($properties as $name=>$value)
  						$this->configureComponent($component,$name,$value);
 -					$parent->addParsedObject($component);
 +					if($parent===$tplControl)
 +						$directChildren[]=$component;
 +					else
 +						$parent->addParsedObject($component);
  				}
  			}
  			else	// string
 @@ -314,12 +321,30 @@ class TTemplate extends TApplicationComponent implements ITemplate  					// need to clone a new object because the one in template is reused
  					$o=clone $object[1];
  					$o->setContainer($tplControl);
 -					$parent->addParsedObject($o);
 +					if($parent===$tplControl)
 +						$directChildren[]=$o;
 +					else
 +						$parent->addParsedObject($o);
  				}
  				else
 -					$parent->addParsedObject($object[1]);
 +				{
 +					if($parent===$tplControl)
 +						$directChildren[]=$object[1];
 +					else
 +						$parent->addParsedObject($object[1]);
 +				}
  			}
  		}
 +		// delay setting parent till now because the parent may cause
 +		// the child to do lifecycle catchup which may cause problem
 +		// if the child needs its own child controls.
 +		foreach($directChildren as $control)
 +		{
 +			if($control instanceof TControl)
 +				$control->createdOnTemplate($tplControl);
 +			else
 +				$tplControl->addParsedObject($control);
 +		}
  	}
  	/**
 diff --git a/framework/Web/UI/WebControls/TWizard.php b/framework/Web/UI/WebControls/TWizard.php index 3af09a95..fb0c941d 100644 --- a/framework/Web/UI/WebControls/TWizard.php +++ b/framework/Web/UI/WebControls/TWizard.php @@ -894,8 +894,13 @@ class TWizard extends TWebControl implements INamingContainer  		$activeStep=$this->getActiveStep();
  		$activeStepIndex=$this->getActiveStepIndex();
 -		if(!$this->_navigation || $activeStepIndex<0 || $activeStepIndex>=$wizardSteps->getCount())
 +		if(!$this->_navigation)
  			return;
 +		else if($activeStepIndex<0 || $activeStepIndex>=$wizardSteps->getCount())
 +		{
 +			$this->_navigation->setVisible(false);
 +			return;
 +		}
  		// set visibility of different types of navigation panel
  		$showStandard=true;
 @@ -1184,7 +1189,8 @@ class TWizard extends TWebControl implements INamingContainer  		$this->_stepContent=new TPanel;
  		$this->_stepContent->getControls()->add($multiView);
  		$this->getControls()->add($this->_stepContent);
 -		$multiView->setActiveViewIndex(0);
 +		if($multiView->getViews()->getCount())
 +			$multiView->setActiveViewIndex(0);
  	}
  	/**
 | 
