Структура файлов с данными
Файл с данными - это комбинация YAML-блока с мета-данными и области содержимого, если у объекта задан метод getContent()
.
Верх файла занимают мета-данные в YAML формате. Этот блок включает почти все поля объекта.
Разделитель состоит из пустой строки, за ним 5 тире (-----
) и еще одной пустой строки. Все, что до разделителя - данные в YAML, все что после - содержимое (content).
Важные замечания по форматированию в YAML
Важно помнить о некоторых важных вещах во время ручного редактирования файлов и последующей загрузке их в MODX.
- Строки могут указываться как с кавычками, так и без, однако, как только в строке появляются не буквенно-цифровые символы (точки, слеши, скобки и т.д.), значения строк должны быть заключены в одинарные или двойные кавычки. Иначе вы получите ошибки разбора YAML во время сборки сайта.
- Точка с запятой в конце строки не нужна; перехода на новую строку будет достаточно.
- Используйте YAML Linter, если у вас есть ошибки разбора YAML и вы не можете определить, что случилось. Не включайте разделитель или содержимое ниже в код для линтера.
Примеры файлов с данными
Этот пример содержит только мета-данные (объект Redirect из дополнения Redirector):
id: 2
pattern: ^redactor$
target: extras/redactor/
context_key: web
triggered: 257
triggered_first: '2014-08-02 06:32:29'
triggered_last: '2014-08-03 13:18:51'
Этот пример содержит мета-данные в yaml и содержимое плагина (плагин ClientConfig):
id: 9
name: ClientConfig
description: 'Sets system settings from the Client Config CMP.'
properties: null
-----
<?php
/**
* ClientConfig
*
* Copyright 2011 by Mark Hamstra <hello@markhamstra.com>
*
* ClientConfig is free software; you can redistribute it and/or modify it under the
* terms of the GNU General Public License as published by the Free Software
* Foundation; either version 2 of the License, or (at your option) any later
* version.
*
* ClientConfig is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
* A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with
* ClientConfig; if not, write to the Free Software Foundation, Inc., 59 Temple
* Place, Suite 330, Boston, MA 02111-1307 USA
*
* @package clientconfig
*
* @var modX $modx
* @var int $id
* @var string $mode
* @var modResource $resource
* @var modTemplate $template
* @var modTemplateVar $tv
* @var modChunk $chunk
* @var modSnippet $snippet
* @var modPlugin $plugin
**/
$eventName = $modx->event->name;
switch($eventName) {
case 'OnHandleRequest':
/* Grab the class */
$path = $modx->getOption(
'clientconfig.core_path',
null,
$modx->getOption('core_path') . 'components/clientconfig/'
);
$path .= 'model/clientconfig/';
$clientConfig = $modx->getService(
'clientconfig',
'ClientConfig',
$path
);
/* If we got the class (gotta be careful of failed migrations),
grab settings and go! */
if ($clientConfig instanceof ClientConfig) {
$settings = $clientConfig->getSettings();
/* Make settings available as [[++tags]] */
$modx->setPlaceholders($settings, '+');
/* Make settings available for $modx->getOption() */
foreach ($settings as $key => $value) {
$modx->setOption($key, $value);
}
}
break;
}
return;