Единственно что, так это я не понял нафига делать
Единственно что, так это я не понял нафига делать такую замудренность в виде base(Path/Url)Relative. Ведь можно же было всё это автоматически определять по наличию/отсутствию слэша/MODX_BASE_PATH в начале строки basePath/baseUrl медиасоурса и, исходя из этого, формировать конечный адрес. Т.е., к примеру, вот кусок кода моего компонента:
function getFileUrl ($input) {
$fileUrl = $this->fileHandler->getDirectoryFromFile($input);
// если в $input из сниппета пришла строка вида - "filename.ext", т.е. без слэшей и папок
if ($fileUrl == './') {
$fileUrl = '';
}
$inputUrlType = '';
// если адрес относительный
if (!$this->isAbsoluteUrl($fileUrl)) {
// значит пришёл адрес вида "images/picture.jpg"
$inputUrlType = 'relative';
}
// если абсолютный, но не существующий и не содержащий MODX_BASE_PATH в начале строки
else if (!file_exists($fileUrl) && strpos($fileUrl, $this->basePath) !== 0) {
// значит пришёл адрес вида "/images/picture.jpg"
$inputUrlType = 'absolute';
} else {
// иначе пришёл полный физический путь.
// так сделаем же из него абсолютный!
$fileUrl = '/'. substr($fileUrl, strlen($this->basePath));
$inputUrlType = 'absolute';
}
$fileUrl = $this->fileHandler->sanitizePath($fileUrl);
$fileUrl = $this->fileHandler->postfixSlash($fileUrl);
$this->inputUrlType = $inputUrlType;
$this->fileUrl = $fileUrl;
return $this->fileUrl;
}
function getFilePath () {
switch ($this->inputUrlType) {
// если файл пришёл в виде относительного урл
case 'relative':
$filePath = $this->basePath .'/'. $this->baseUrl .'/'. $this->fileUrl;
break;
// если файл пришёл в виде абсолютного урла
case 'absolute':
$filePath = $this->basePath .'/'. $this->fileUrl;
break;
}
$this->filePath = $this->fileHandler->sanitizePath($filePath);
return $this->filePath;
}
function isAbsoluteUrl ($path) {
$path = $this->fileHandler->sanitizePath($path);
return (substr($path, 0, 1) == '/');
}
И вот здесь абсолютно пофигу — пришёл ли относительный путь, абсолютный или вообще полный физический — всё корректно обработается и вернутся правильные fileUrl и filePath. Поэтому эти 2 настройки (base(Path/Url)Relative) поначалу меня и ввели в замешательство — я думал, что такое, как и у меня, должно на автомате обрабатываться :-)