воскресенье, 18 декабря 2011 г.

Сниппет падежей для MODx

Сегодня, как и много дней подряд делаю на основе MODx основу для сайта по туризму. И хотелось, чтобы в статье о городе, достопримечательности выводилось бы, как "по настоящему" заголовки
 типа
  • Отдых в Ялте
  • Фотоальбом Ялты
  • Отзывы о Ялте
Для этого нужно в бузе хранить слово Ялта и все его падежи. Но, слава программированию, которое облегчает жизнь. Я написал скрипт, который определяет падеж слова или выражения и зыписывает его в поле ресурса.

Пример вызова
[[snp_get_padezh? &id=`[[*id]]` &field=`description` &padezh=`5`]]


Исходник
// $id - id of resource
// $field - field name to write or print "padezh"
// $padezh - number of padezh
//http://nano.yandex.ru/project/inflect/
//http://pastie.org/1101890


$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 'Не определен падеж. Определите вручную';
                }
      }



Если кому не нравится реализация, не особо ругайте )))

Комментариев нет:

Отправить комментарий