С момента выхода MODx Revolution появилось огромное множество очень полезных сниппетов, которые позволяют все меньше прибегать к программированию, при создании каждой мелочи, короче говоря сильно упрощают нам (разработчикам) сайтов жизнь.
На данный момент, при разработке очередного сайта возникла необходимость использовать кроме самих заголовков [[*pagetitle]], еще и сам заголовок в различных падежах. Надеясь на наличие скрипта, который бы помог в решении этого вопроса, перерыл немало страниц и пришел к выводу, что «удовлетворяющих мои запросы» нет. В то же время, наткнулся на занятный сервис от Яндекса, под названием "Склонятор". Данный сервис позволяет склонять как слова, так и целые выражения — очень удобно. Вспомните, что такое «падежи».

Для работы с MODx Revolution был написан следующий сниппет:
[[snp_get_padezh? &id=`[[*id]]` &field=`description` &padezh=`5`]]

Вы можете, при желании, несколько модифицировать код под ваши нужды, сделав его более гибким и настраиваемым. При всем прочем текущая версия является стабильной и вполне корректно работает, потому для тех что просто заинтересовался и хотел бы использовать в работе — пользуйтесь без опаски.
Надеюсь, моя статья и разработка станет полезной.
На данный момент, при разработке очередного сайта возникла необходимость использовать кроме самих заголовков [[*pagetitle]], еще и сам заголовок в различных падежах. Надеясь на наличие скрипта, который бы помог в решении этого вопроса, перерыл немало страниц и пришел к выводу, что «удовлетворяющих мои запросы» нет. В то же время, наткнулся на занятный сервис от Яндекса, под названием "Склонятор". Данный сервис позволяет склонять как слова, так и целые выражения — очень удобно. Вспомните, что такое «падежи».

Для работы с MODx Revolution был написан следующий сниппет:
Вызов сниппета
[[snp_get_padezh? &id=`[[*id]]` &field=`description` &padezh=`5`]]
Параметры вызова сниппета
- id — ID документа, заголовок которого мы хотим просклонять
- field — название поля, в котором будут храниться все падежи заголовка (чтобы к сервису «Склонятор» обращаться лишь единожды)
- padezh — номер падежа начиная с нуля (Именительный, Родительный, Дательный, Винительный, Творительный, Предложный).
Сам код сниппета
// $id - id of resource
// $field - field name to write or print "padezh"
// $padezh - number of padezh
//http://nano.yandex.ru/project/inflect/
$res = $modx->getObject('modResource', array('id' => $id));
$res_fieldval = $res->get($field);
$res_pagetitle = $res->get('pagetitle');
if (strlen($res_fieldval)>1)
{
$arr = explode(',', $res_fieldval);
return $arr[intval($padezh)];
}
else{
$url = "http://export.yandex.ru/inflect.xml?name=".$res_pagetitle;
$xml = simplexml_load_file($url);
$original = $xml->original;
$padezh_value = trim($xml->inflection[intval($padezh)]);
for ($i=0;$i<=5;$i++) {
$field_text[$i]=trim($xml->inflection[$i]);
}
$field_text_implode = implode(',', $field_text);
$resource = $modx->getObject('modResource', $id);
$resource->set($field, $field_text_implode);
$resource->save();
if (strlen($padezh_value)>1)
{
return $padezh_value;
}else{
return 'Не определен падеж. Определите вручную';
}
}

Сниппет работает следующим образом:
- Обращается к сервису «Склонятор»
- Полученный результат записывает в указанное в параметре поле
- Выводит запрошенный падеж
- При повторном обращении, если уже заполнено поле «Падежи», не обращается к сервису, а берет слово/фразу непосредственно из поля
Для разработчиков
Вы можете, при желании, несколько модифицировать код под ваши нужды, сделав его более гибким и настраиваемым. При всем прочем текущая версия является стабильной и вполне корректно работает, потому для тех что просто заинтересовался и хотел бы использовать в работе — пользуйтесь без опаски.
Надеюсь, моя статья и разработка станет полезной.