diff --git a/libraries/cms/component/helper.php b/libraries/cms/component/helper.php index 8a0ef07bc7ed4..80432fdd9ad29 100644 --- a/libraries/cms/component/helper.php +++ b/libraries/cms/component/helper.php @@ -508,4 +508,21 @@ protected static function load($option) return true; } + + /** + * Get installed components + * + * @return array The components property + * + * @since __DEPLOY_VERSION__ + */ + public static function getComponents() + { + if (empty(static::$components)) + { + static::load('*'); + } + + return static::$components; + } } diff --git a/libraries/cms/router/site.php b/libraries/cms/router/site.php index 37fe2a0849da9..151284970a083 100644 --- a/libraries/cms/router/site.php +++ b/libraries/cms/router/site.php @@ -115,6 +115,19 @@ public function parse(&$uri) // Set the route $uri->setPath(trim($path, '/')); + // Set the parsepreprocess components methods + $components = JComponentHelper::getComponents(); + + foreach ($components as $component) + { + $componentRouter = $this->getComponentRouter($component->option); + + if (method_exists($componentRouter, 'parsepreprocess')) + { + $this->attachParseRule(array($componentRouter, 'parsepreprocess'), static::PROCESS_BEFORE); + } + } + $vars += parent::parse($uri); return $vars;