Как стать автором
Обновить

Сниппет «Падежи» для MODx Revolution 2.0.0 +

С момента выхода MODx Revolution появилось огромное множество очень полезных сниппетов, которые позволяют все меньше прибегать к программированию, при создании каждой мелочи, короче говоря сильно упрощают нам (разработчикам) сайтов жизнь.

На данный момент, при разработке очередного сайта возникла необходимость использовать кроме самих заголовков [[*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 'Не определен падеж. Определите вручную';
                     }
        }




Сниппет работает следующим образом:


  • Обращается к сервису «Склонятор»
  • Полученный результат записывает в указанное в параметре поле
  • Выводит запрошенный падеж
  • При повторном обращении, если уже заполнено поле «Падежи», не обращается к сервису, а берет слово/фразу непосредственно из поля


Для разработчиков


Вы можете, при желании, несколько модифицировать код под ваши нужды, сделав его более гибким и настраиваемым. При всем прочем текущая версия является стабильной и вполне корректно работает, потому для тех что просто заинтересовался и хотел бы использовать в работе — пользуйтесь без опаски.

Надеюсь, моя статья и разработка станет полезной.
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.