Модификаторы Smarty в шаблонах - ранг пользователей

Помимо стандартных модификаторов (truncate,default etc.) в шаблонах Smarty можно использовать свои. Синтаксис для них в точности такой же.
Для примера — определим ранг пользователя в зависимости от его рейтинга с помощью модификатора rating.
smarty.php5.com.ua/plugins.naming.conventions/ — соглашение об именах плангинов можно посмотреть тут.
создаем файл modifier.rating.php в дериктории плагинов смарти (у меня это classes\lib\external\Smarty-2.6.19\libs\plugins )
модификаторы могут принимать несколько параметров, первый параметр — это модифицируемая переменная.
<?php
/**
 * Smarty default modifier plugin
 *
 * Type:     modifier
 */
function smarty_modifier_rating($ratingnum)
{
$rank='';
	if($ratingnum>100) $rank='грандмастер';
		elseif($ratingnum>50) $rank='мастер';
		elseif($ratingnum>30) $rank='подмастерье';
	else $rank='начинающий';
    return $rank;
}


?>


теперь в любом шаблоне где это нужно, например в whois.tpl (профиль пользователя) можно использовать модификатор rating

{$oUserProfile->getRating()|rating}

31 комментарий

avatar
пользователи с рейтингом больше (например 30) тоже имеют звание начинающий. В чем трабл?
avatar
Спасибо за эту полезную мелочь.

Подскажите, возможно ли вывести ранк пользователя в comment_list.tpl, topic.tpl, topic_list.tpl.

С помощью
{$oUserProfile->getRating()|rating}
работает только на странице «О пользователе»
avatar
Так и не вышло, чтобы в комметариях показывался ранг отличный от «начинающий», может быть кто то справился? На странице whois.tpl — ранги работают ок.
avatar
логично, т.к. на этой странице прогружена переменная $oUserProfile
avatar
В комментах приходится вписывать в таком виде: {$aComment.obj->getRating()|rating}
Чтобы ошибки хотя бы небыло. Но это, очевидно, в корне не верно.
avatar
В комментариях нормально все, можно посмотреть в том же файле, что остальные функции так же через $aComment.obj выводятся.

Ну а в топик добавить: {$oTopic->getRating()|rating}
avatar
Это решение не работает. Всегда выводится первый ранг.
Создал топик: livestreet.ru/blog/paidorders/3603.html
Пока решения и предложений нет.
avatar
То что выводится первый, это уже с самим modifier.rating.php проблемы. У меня даже в профиле все время «Начинающий» выводит.
avatar
Вообщем не знаю что с этим делать, апну свою тему про поиски программиста для решения этого вопроса на следующей неделе.
avatar
Сколько может стоить доработка этого модуля, чтобы была возможность вывода в комментах, в инфо топика. Если кто может доработать за денежку не гигантскую ;) велкам в личку, переговорим.

ps: не дают покоя чёртовы ранги :)
avatar
да легко всё это делается, можно даже и модуль для смарти не писать :)
avatar
Йоксель моксель, скорее поведайте как ;)
avatar
Очень просто. Открываем файл \classes\modules\user\entity\User.entity.class.php

где-то после:
public function getRating() {         
        return number_format(round($this->_aData['user_rating'],2), 2, '.', '');
    }


Вставляем:

public function getStatus() {         
       $ratingnum = number_format(round($this->_aData['user_rating'],2), 2, '.', '');
	  
       if($ratingnum>100) $rank=$this->Lang_Get('status_3');
                elseif($ratingnum>50) $rank=$this->Lang_Get('status_2');
                elseif($ratingnum>30) $rank=$this->Lang_Get('status_1');
        else $rank=$this->Lang_Get('status_0');
   		return $rank;
    }


Затем в файл \templates\language\russian.php

Добавляем названия рангов:


        'status_0' => 'Новичок',
	'status_1' => 'Ученик',
	'status_2' => 'Знаток',	
	'status_3' => 'Профи',


Теперь в шаблоне можно вызвать кодом:
{$oUserProfile->getStatus()}

или
{$oUserProfile->getStatus()}
avatar
Спасибище! Попробовал на странице профиля — все ок.
Попробовал вставить в комменты с помощью
{$oUserProfile->getStatus()}
и так
{$oComment->getStatus()}
Страница перестает показываться.
Всю ищю решение, чтобы в комментах можно было вывести у каждого человека его ранг.
avatar
в comment.tpl вставляю

{$oUser->getStatus()}

и все выводится
avatar
сюда?
../actions/ActionBlog/comment.tpl
avatar
skin/new/comment.tpl
avatar
Видимо я совсем затупан :)
Вставил в этот шаблон (но ведь он вроде используется для того момента когда запощен комент)
1. статус не показался
2. ну и при постинге коммента вылазит Error Please try again later

ps: Сорри за столько большое кол-во приставаний к вам, сейчас попробую все сделать заново.
avatar
Пробовал много раз.
../skin/new/comment.tpl — не показывается
../skin/actionts/ActionBlog/comment.tpl — ошибка
avatar
Версия какая? Я на 0.4 тестил, наверное, у вас 0.31, там классы объектов, кажись по-другому вызывались
avatar
да, у меня 0.3.1 :)
avatar
а как привязать к этому еще и цвета?:)
avatar
а как задать ранг тем кто в минусе? сейчас им задается такой же как у положительных и нуля
avatar
{if $oUser->getStatus()==3}
{$oUser->getStatus()}
{else}
{$oUser->getStatus()}
{/if}

Где что не так?:) Хочу чтобы у тех у кого статус 3 было красным цветом.
avatar
{if $oUser->getStatus()==3}
<span style="color:red">{$oUser->getStatus()}</span>
{else}
{$oUser->getStatus()}
{/if}

Где что не так?:) Хочу чтобы у тех у кого статус 3 было красным цветом.
avatar
Во-первых, куда ты это добавляешь? Во-вторых, если в профиль пользователя то нужно писать не просто:
{$oUser->тратата()}
а
{$oUserProfile->тратата()}
Так же и с {if}'ом.
avatar
Я добавляю это в профиль пользователя.
{if $oUserProfile->getLevel()==status_0}
<span style="color:red">{$oUserProfile->getLevel()}</span>
{else}
<span style="color:green">{$oUserProfile->getLevel()}</span>
{/if}

Надо было вставлять не цифры, а сами статусы.Все всем спасибо
avatar
а нет, не робит.блин.
avatar
выдает всем, даже тем у кого статус 0 зеленый цвет.
avatar
В плагин никто не заганял данный функционал?
avatar
B1gBoss,
В russian.php пропиши со стилями, например
'rank_0' => '<span style="color:green">Новичек</span>',
'rank_1' => '<span style="color:orange">Продвинутый</span>',
'rank_2' => '<span style="color:red">Експерт</span>',
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.