code: public function endblock()
  	{
  		// Check for open blocks
  		if (empty($this->arrBlockNames))
  		{
  			throw new \Exception('You must start a block before you can end it');
  		}
  
  		// Get the block name
  		$name = array_pop($this->arrBlockNames);
  
  		// Root template
  		if ($this->strParent === null)
  		{
  			// Handle nested blocks
  			if ($this->arrBlocks[$name] != '[[TL_PARENT]]')
  			{
  				// Output everything after the first TL_PARENT tag
  				if (strpos($this->arrBlocks[$name], '[[TL_PARENT]]') !== false)
  				{
  					list(, $content) = explode('[[TL_PARENT]]', $this->arrBlocks[$name], 2);
  					echo $content;
  				}
  
  				// Remove the overwritten content
  				else
  				{
  					ob_end_clean();
  					--$this->intBufferLevel;
  				}
  			}
  		}
  
  		// Child template
  		else
  		{
  			// Capture the block content
  			$this->arrBlocks[$name][] = ob_get_clean();
  
  			// Start a new output buffer
  			ob_start();
  		}
  	}
docs: End a block
  
  @throws \Exception If there is no open block