Bootstrap Process - xoopscube/legacy GitHub Wiki
XCL Bootstrap Process
The XCL (XOOPS Cube Legacy) bootstrap process is a sophisticated sequence that loads the core framework,
initializes the rendering system, and outputs the final theme.
1. Bootstrap Initialization (mainfile.php)
The process begins with mainfile.php, which serves as the entry point for all requests:
- Define constants and paths
- Root path (public)
- Trust path (private)
- URL
- etc.
And requires:
- Load protector (security module) pre-check
- Initialize cubecore
- Load common functionality if not prevented
- Load protector post-check
2. Core Initialization (cubecore_init.php)
cubecore_init.php loads the core classes and initializes the configuration system:
- XCL version constants
- XCube_Root class
- XCube_Controller class
- IniHandler class
Defined configuration file paths
- Default settings : site_default.ini
- XCUBE_SITE_CUSTOM_FILE settings : site_custom.ini
3. Loading Definitions (definition.inc.php)
The system loads definition.inc.php which contains essential constants:
- Block positions
- Path definitions
- CACHE PATH
- MODULE PATH
- Render system definition
- Legacy_RenderSystem
4. Configuration Loading (site_default.ini)
The system reads site_default.ini to configure components:
[Cube]
Root=XOOPS_ROOT_PATH
Controller=Legacy_Controller
SystemModules=legacy,legacyRender,user,profile,stdCache,altsys,message,protector
// ...
[RenderSystems]
Legacy_RenderSystem=Legacy_RenderSystem
Legacy_AdminRenderSystem=Legacy_AdminRenderSystem
// ...
[Legacy_RenderSystem]
path=/modules/legacyRender/kernel
class=Legacy_RenderSystem
// ...
5. Controller Initialization (Legacy_Controller)
The Legacy_Controller is initialized based on the configuration:
// In Legacy_Controller.class.php
class Legacy_Controller extends XCube_Controller
{
// Initialize modules, services, and context
public function __construct()
{
parent::__construct();
$this->_mStrategy = new Legacy_PublicControllerStrategy($this);
// ...
}
// Execute the request
public function execute()
{
// Process blocks, modules, and render the page
// ...
}
}
6. Render System Initialization (Legacy_RenderSystem)
The Legacy_RenderSystem is loaded to handle the rendering process:
// In Legacy_RenderSystem.class.php
class Legacy_RenderSystem extends XCube_RenderSystem
{
// Initialize Smarty and template system
public function __construct()
{
parent::__construct();
// ...
}
// Create render targets for different parts of the page
public function createRenderTarget($type = null)
{
// Create theme, block, or main content render targets
// ...
}
// Render the page
public function render(&$target)
{
// Process templates and output HTML
// ...
}
}
7. Template Processing (Smarty)
The system uses Smarty for template processing:
// In Legacy_RenderSystem.class.php
function render(&$target)
{
// Initialize Smarty template engine
$smarty = new XoopsTpl();
// Set template variables
foreach ($target->getAttributes() as $key => $value) {
$smarty->assign($key, $value);
}
// Process the template
$result = $smarty->fetch($target->getTemplateName());
// Set the result
$target->setResult($result);
}
8. Final Output
The final output process combines all rendered components:
- The main content is rendered by the module's action
- Blocks are rendered and positioned according to their settings
- The theme template (theme.html) is loaded and populated with content
- The complete HTML is sent to the browser
Flow Summary
mainfile.php→ Sets up environment and loads corecubecore_init.php→ Initializes XCube core classesdefinition.inc.php→ Defines constants and pathssite_default.ini→ Configures components and modulesLegacy_Controller→ Processes the requestLegacy_RenderSystem→ Handles template rendering- Smarty → Processes templates
- Theme output → Final HTML sent to browser
This architecture allows XCL to maintain a clean separation between content,
presentation, and logic while providing a flexible framework for module development.