mirror of
https://github.com/getgrav/grav.git
synced 2026-09-02 06:06:08 +02:00
Obey media ordering
This commit is contained in:
@@ -145,18 +145,10 @@ trait MediaTrait
|
||||
/** @var MediaFactory $factory */
|
||||
$factory = Grav::instance()['media_factory'];
|
||||
|
||||
$order = $this->getNestedProperty($field);
|
||||
if (is_array($order)) {
|
||||
$order = array_is_list($order) ? $order : array_keys($order);
|
||||
} else {
|
||||
$order = [];
|
||||
}
|
||||
|
||||
$params = $settings['media'] ?? [];
|
||||
$params += [
|
||||
'object' => $this,
|
||||
'path' => $settings[$var],
|
||||
'order' => $order,
|
||||
'load' => true
|
||||
];
|
||||
|
||||
|
||||
@@ -2911,7 +2911,22 @@ class Page implements PageInterface
|
||||
$schema = $this->getBlueprint()->schema();
|
||||
$settings = $schema ? $schema->getProperty($field) : null;
|
||||
|
||||
return $this->parseMediaFieldSettings($field, $settings);
|
||||
$settings = $this->parseMediaFieldSettings($field, $settings);
|
||||
if ($settings && !isset($settings['media']['order'])) {
|
||||
if (str_starts_with($field, 'header.')) {
|
||||
$field = substr($field, 7);
|
||||
}
|
||||
$header = $this->header();
|
||||
$order = Utils::getField($header, $field);
|
||||
|
||||
if (is_array($order)) {
|
||||
$settings['media']['order'] = array_is_list($order) ? $order : array_keys($order);
|
||||
} else {
|
||||
$settings['media']['order'] = [];
|
||||
}
|
||||
}
|
||||
|
||||
return $settings;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -36,6 +36,7 @@ use function function_exists;
|
||||
use function in_array;
|
||||
use function is_array;
|
||||
use function is_callable;
|
||||
use function is_object;
|
||||
use function is_string;
|
||||
use function strlen;
|
||||
|
||||
@@ -1295,6 +1296,33 @@ abstract class Utils
|
||||
return $newArray;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array|object $current
|
||||
* @param string $name
|
||||
* @param mixed|null $default
|
||||
* @param string $separator
|
||||
* @return mixed|null
|
||||
*/
|
||||
public static function getField($current, string $name, $default = null, string $separator = '.')
|
||||
{
|
||||
if ($name === '') {
|
||||
return $current;
|
||||
}
|
||||
|
||||
$path = explode($separator, $name);
|
||||
foreach ($path as $field) {
|
||||
if (is_object($current) && isset($current->{$field})) {
|
||||
$current = $current->{$field};
|
||||
} elseif (is_array($current) && isset($current[$field])) {
|
||||
$current = $current[$field];
|
||||
} else {
|
||||
return $default;
|
||||
}
|
||||
}
|
||||
|
||||
return $current;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the passed path contains the language code prefix
|
||||
*
|
||||
|
||||
@@ -99,7 +99,17 @@ trait FlexMediaTrait
|
||||
$schema = $this->getBlueprint()->schema();
|
||||
$settings = $schema ? $schema->getProperty($field) : null;
|
||||
|
||||
return $this->parseMediaFieldSettings($field, $settings);
|
||||
$settings = $this->parseMediaFieldSettings($field, $settings);
|
||||
if ($settings && !isset($settings['media']['order'])) {
|
||||
$order = Utils::getField($this->getArrayElements(), $field);
|
||||
if (is_array($order)) {
|
||||
$settings['media']['order'] = array_is_list($order) ? $order : array_keys($order);
|
||||
} else {
|
||||
$settings['media']['order'] = [];
|
||||
}
|
||||
}
|
||||
|
||||
return $settings;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user