Задать вопрос
El_Ruha
@El_Ruha

Генератор мета-тегов во вкладке Seo для элементов по шаблону- как сделать склонения?

Добрый день, у битрикса штатно как то можно склонять мета теги во вкладке Seo. Если подставить просто форма свойство, {= this.property .FORMA} то будет Овал, а надо Овальной как пример.
  • Вопрос задан
  • 204 просмотра
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 2
@anton99zel Куратор тега 1С-Битрикс
29а класс средней школы №7
у битрикса штатно как то можно склонять мета теги

Нет. Склоняйте как вам надо и передавайте в коде.
Ответ написан
Комментировать
@KukuRuku
Посмотрите в сторону OnTemplateGetFunctionClass, пример:

use Bitrix\Main\Event;
use Bitrix\Main\EventResult;
use Bitrix\Iblock\Template\Functions\FunctionBase;

(\Bitrix\Main\EventManager::getInstance())
    ->addEventHandler('iblock', 'OnTemplateGetFunctionClass', 'getFunctionClass');

function getFunctionClass(Event $event): EventResult
{
    $parameters    = $event->getParameters();
    $functionClass = __NAMESPACE__ . '\\' . $parameters[0];

    if (!class_exists($functionClass)) {
        return new EventResult(EventResult::UNDEFINED);
    }

    return new EventResult(EventResult::SUCCESS, $functionClass);
}

class spell extends FunctionBase
{

    // Вывод чисел с морфологией («рубль», «рубля», «рублей»)
    // 321 {=spell 321 "товар" "" "а" "ов"} {=spell 321 "остал" "ся" "ось" "ось"} на складе
    // 321 товар остался на складе
    // number - свойство, содержащее число
    // {=this.property.number} {=spell {=this.property.number} "товар" "" "а" "ов"} {=spell {=this.property.number} "остал" "ся" "ось" "ось"}  на складе
    public function calculate(array $parameters)
    {
        $n       = intval($parameters[0]);
        $word    = strval($parameters[1]);
        $forms[] = strval($parameters[2]);
        $forms[] = strval($parameters[3]);
        $forms[] = strval($parameters[4]);

        $p = $n % 10 == 1 && $n % 100 != 11
            ? $forms[0]
            : ($n % 10 >= 2 && $n % 10 <= 4
            && ($n % 100 < 10
                || $n % 100 >= 20) ? $forms[1] : $forms[2]);

        return $n . ' ' . $word . ($forms[$p] ? $forms[$p] : end($forms));
    }

}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы