Add method for looking up other page component properties (getOtherPageComponent)

This commit is contained in:
Sam Georges 2014-05-25 00:55:53 +10:00
parent a89eda62cf
commit 8ec4cd6ea3
1 changed files with 43 additions and 1 deletions

View File

@ -1,6 +1,7 @@
<?php namespace Cms\Classes;
use URL;
use Str;
use App;
use File;
use View;
@ -277,6 +278,48 @@ class Controller extends BaseController
return $componentObj;
}
/**
* Creates a basic component object for another page, useful for extracting properties.
* @param string $page Page name or page file name
* @param string $class Component class name
* @return ComponentBase
*/
public function getOtherPageComponent($page, $class)
{
$class = Str::normalizeClassName($class);
$theme = $this->getTheme();
$manager = ComponentManager::instance();
$componentObj = new $class;
if (($page = Page::loadCached($theme, $page)) && isset($page->settings['components'])) {
foreach ($page->settings['components'] as $component => $properties) {
list($name, $alias) = strpos($component, ' ') ? explode(' ', $component) : array($component, $component);
if ($manager->resolve($name) == $class) {
$componentObj->setProperties($properties);
$componentObj->alias = $alias;
return $componentObj;
}
}
if (!isset($page->settings['layout']))
return null;
$layout = $page->settings['layout'];
if (($layout = Layout::loadCached($theme, $layout)) && isset($layout->settings['components'])) {
foreach ($layout->settings['components'] as $component => $properties) {
list($name, $alias) = strpos($component, ' ') ? explode(' ', $component) : array($component, $component);
if ($manager->resolve($name) == $class) {
$componentObj->setProperties($properties);
$componentObj->alias = $alias;
return $componentObj;
}
}
}
}
return null;
}
/**
* Executes the page, layout, component and plugin AJAX handlers.
* @return mixed Returns the AJAX Response object or null.
@ -710,7 +753,6 @@ class Controller extends BaseController
return null;
}
/**
* Searches the layout and page components by a partial file
* @return ComponentBase The component object, if found