aL13n 3 Опубликовано: 5 марта 2013 Рассказать Опубликовано: 5 марта 2013 (изменено) Берем и смотрим код здесь (документ в utf8) либо качаем. Вставляем его содержимое в самый низ файла engine/modules/functions.php вместо: ?> (если есть) Открываем корневой index.php и находим: echo $tpl->result['main']; Выше вставляем: $tpl->result['main'] = preg_replace("#\[declination=(\d+)\](.+?)\[/declination\]#ies", "word_declination('\\1', '\\2')", $tpl->result['main']); Установка заверешена. Пример использования в шаблоне полной новости fullstory.tpl: [declination={comments-num}]комментари|й|я|ев[/declination] [declination={views}]просмотр|а|ов[/declination] Таким способом любое число (либо свое, либо выводимое модулем) мы можем скормить declination и получить человеческое слово. Еще примеры склоненяемых слов в других его вариациях задокументированы в самом коде по ссылке выше. Have a nice day! PS. Источник картинки Изменено 5 марта 2013 пользователем aL13n 1 Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 082 Опубликовано: 6 марта 2013 Рассказать Опубликовано: 6 марта 2013 Если кому интересно, то код функии слишком громоздкий, это все можно было сделать одной строчкой, например: $plural = $n%10==1&&$n%100!=11?'комментарий'$n%10>=2&&$n%10<=4&&($n%100<10||$n%100>=20)?'комментария':'комментариев'); [/CODE] где $n это количество. Плюс одна строчка на explode, т.е. всю функцию можно при желании можно сделать в две строчки. 2 Цитата Ссылка на сообщение Поделиться на других сайтах
aL13n 3 Опубликовано: 6 марта 2013 Рассказать Опубликовано: 6 марта 2013 Автор В функции идет проверка на строку, но в нее можно передать и массив слов в целом, и тогда будет работать "как ваш вариант". Перелести моего варианта оценили оценят все, кто работает с мультиязычностью. Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 082 Опубликовано: 6 марта 2013 Рассказать Опубликовано: 6 марта 2013 aL13n, У меня не было мысли критиковать ваш код, каждый пишет как хочет, просто дал совет что его можно серьезно сократить. Например if (is_string($words)) но при этом из строки preg_replace("#[declination=(d+)](.+?)[/declination]#ies", "word_declination('1', '2')", ничего кроме строки передаться не может, эта бесполезная проверка. Далее $r = array_shift($parts); тоже бесполезна потому как переменная нужная вам доступна как $parts[0] а сокращать массив нет никакой необходимости. Но даже если и делать универсальную функцию, чтобы в качестве аргумента передавать и строку и массив, то ее все равно можно сделать ровно в три строки. один if и return. То что я написал это не критика, я подумал что возможно вам это будет интересно. 4 Цитата Ссылка на сообщение Поделиться на других сайтах
aL13n 3 Опубликовано: 6 марта 2013 Рассказать Опубликовано: 6 марта 2013 (изменено) Автор Понял, спасибо. Код использовался в проекте, который работает на symfony, где шаблонизатор - это сам php со всеми вытекающими. Но суть сей затеи в том, чтобы вы реализовали подобный функционал в последующих версиях DLE. И все же важно в каком виде: чтобы можно было использовать как в шаблонах, так и в пользовательских модулях. То есть, чтобы один метод выполнял данную задачу. Изменено 6 марта 2013 пользователем aL13n 1 Цитата Ссылка на сообщение Поделиться на других сайтах
Sander1 62 Опубликовано: 7 марта 2013 Рассказать Опубликовано: 7 марта 2013 (изменено) А если через include ? <?PHP if(!defined('DATALIFEENGINE'))die("Hacking attempt!"); $word = explode("|",$word);$n=intval($n); echo $n%10==1&&$n%100!=11?$word[0].$word[1]$n%10>=2&&$n%10<=4&&($n%100<10||$n%100>=20)?$word[0].$word[2]:$word[0].$word[3]); ?> {include file="engine/modules/word.php?n=7&word=комментари|й|я|ев"} {include file="engine/modules/word.php?n=1&word=|год|года|лет"}[/code] Изменено 7 марта 2013 пользователем Sander1 4 Цитата Ссылка на сообщение Поделиться на других сайтах
aL13n 3 Опубликовано: 7 марта 2013 Рассказать Опубликовано: 7 марта 2013 Автор Да, супер! Но мне хотелось бы еще (как и многим), чтобы доступ к методу был доступен из сторонних дополнений, а не только из шаблона. При этом НЕ дублировать функциональность. Надеюсь на скорую реализацию в следующех версиях скрипта DLE. Цитата Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.