mirror of
https://github.com/getgrav/grav.git
synced 2026-07-06 03:59:02 +02:00
Added params option for mergeConfig method
This commit is contained in:
@@ -136,44 +136,74 @@ class Plugin implements EventSubscriberInterface
|
||||
/**
|
||||
* Merge global and page configurations.
|
||||
*
|
||||
* @param Page $page The page to merge the configurations with the
|
||||
* plugin settings.
|
||||
* @param Page $page The page to merge the configurations with the
|
||||
* plugin settings.
|
||||
* @param array $params Array of additional configuration options to
|
||||
* merge with the plugin settings.
|
||||
*
|
||||
* @param bool $deep Should you use deep or shallow merging
|
||||
* @param bool $deep Should you use deep or shallow merging
|
||||
*
|
||||
* @return \Grav\Common\Data\Data
|
||||
*/
|
||||
protected function mergeConfig(Page $page, $deep = false)
|
||||
protected function mergeConfig(Page $page, $params = [], $deep = false)
|
||||
{
|
||||
$class_name = $this->name;
|
||||
$class_name_merged = $class_name . '.merged';
|
||||
$defaults = $this->config->get('plugins.' . $class_name, array());
|
||||
$header = array();
|
||||
$defaults = $this->config->get('plugins.'. $class_name, []);
|
||||
$page_header = $page->header();
|
||||
$header = [];
|
||||
|
||||
if (isset($page->header()->$class_name_merged)) {
|
||||
$merged = $page->header()->$class_name_merged;
|
||||
if (isset($page_header->$class_name_merged)) {
|
||||
$merged = $page_header->$class_name_merged;
|
||||
if (count($merged) > 0) {
|
||||
return $merged;
|
||||
$header = $merged->toArray();
|
||||
} else {
|
||||
return new Data($defaults);
|
||||
$header = $defaults;
|
||||
}
|
||||
|
||||
// Merge additional parameter with configuration options
|
||||
if ($deep) {
|
||||
$header = array_replace_recursive($header, $params);
|
||||
} else {
|
||||
$header = array_merge($header, $params);
|
||||
}
|
||||
|
||||
$config = new Data($header);
|
||||
return $config;
|
||||
}
|
||||
|
||||
// Get default plugin configurations and retrieve page header configuration
|
||||
if (isset($page->header()->$class_name)) {
|
||||
if ($deep) {
|
||||
$header = array_replace_recursive($defaults, $page->header()->$class_name);
|
||||
} else {
|
||||
$header = array_merge($defaults, $page->header()->$class_name);
|
||||
if (isset($page_header->$class_name)) {
|
||||
$config = $page_header->$class_name;
|
||||
if (is_bool($config)) {
|
||||
// Overwrite enabled option with boolean value in page header
|
||||
$config = ['enabled' => $config];
|
||||
}
|
||||
} else {
|
||||
$header = $defaults;
|
||||
$config = [];
|
||||
}
|
||||
|
||||
// Merge page header settings using deep or shallow merging technique
|
||||
if ($deep) {
|
||||
$header = array_replace_recursive($defaults, $config);
|
||||
} else {
|
||||
$header = array_merge($defaults, $config);
|
||||
}
|
||||
|
||||
// Create new config object and set it on the page object so it's cached for next time
|
||||
$config = new Data($header);
|
||||
$page->modifyHeader($class_name_merged, $config);
|
||||
|
||||
// Merge additional parameter with configuration options
|
||||
if ($deep) {
|
||||
$header = array_replace_recursive($header, $params);
|
||||
} else {
|
||||
$header = array_merge($header, $params);
|
||||
}
|
||||
|
||||
// Create config data object again (now with addtional parameters)
|
||||
$config = new Data($header);
|
||||
|
||||
// Return configurations as a new data config class
|
||||
return $config;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user