Форум русской поддержки Joomla!® CMS
10.12.2016, 14:47:20 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

Изменение рейтинга только для зарегистрированных пользователей

 (Прочитано 2459 раз)
0 Пользователей и 1 Гость смотрят эту тему.
4ort
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Пол: Мужской
Сообщений: 82


« : 18.11.2011, 20:19:18 »

...
« Последнее редактирование: 23.11.2011, 09:14:51 от 4ort » Записан
SDKiller
Moderator
*****

Репутация: +325/-5
Offline Offline

Пол: Мужской
Сообщений: 2749


...ergo sum


« Ответ #1 : 22.11.2011, 05:13:46 »

Самое простое - добавить условие в шаблон.

Например для шаблона item.php :

найдите строчку

Код:
<?php if($this->item->params->get('itemRating')): ?>

приведите к следующему виду

Код:

<?php if($this->item->params->get('itemRating')  && !$this->user->guest): ?>
Записан
4ort
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Пол: Мужской
Сообщений: 82


« Ответ #2 : 22.11.2011, 10:14:41 »

SDKiller, спасибо, что откликнулся, но если сделать так - звезды просто скрываются от незарегистрированных пользователей, а нужно что-бы они не могли менять рейтинг, но видели его.
Записан
SDKiller
Moderator
*****

Репутация: +325/-5
Offline Offline

Пол: Мужской
Сообщений: 2749


...ergo sum


« Ответ #3 : 22.11.2011, 16:31:10 »

Тогда есть варианты:

1. В том же шаблоне в блоке рейтинга для каждой звезды заменить

Код:
rel="<?php echo $this->item->id; ?>"

на

Код:
rel="<?php echo (!$this->user->guest)? $this->item->id : ''; ?>"

Тогда на клики незарегистрированных пользователей по звёздочке не будет никакой реакции

(Поэтому имеет смысл в шаблоне по аналогичному условию для гостей воткнуть постоянное сообщения типа
"Голосовать могут только зарегистрированные пользователи"  -например ниже или сбоку).



2. Вносить изменения в модель item - функция vote()
Тогда можно будет не трогать шаблон а проверку пользователя и формирования соответствующего сообщения для аякса сделать в модели.
« Последнее редактирование: 22.11.2011, 17:16:18 от SDKiller » Записан
4ort
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Пол: Мужской
Сообщений: 82


« Ответ #4 : 22.11.2011, 19:59:49 »

SDKiller, огромное спасибо! Azn
Первый вариант - действительно не хватало комментария.
Но зато получилось модифицировать функцию vote() как мне нужно (в php ничего не понимаю, поэтому сделал, возможно, кривовато)

Было:
Код
function vote(){
 
$mainframe = &JFactory::getApplication();
JTable::addIncludePath(JPATH_COMPONENT_ADMINISTRATOR.DS.'tables' );
 
//Get item
$item = & JTable::getInstance('K2Item', 'Table');
$item->load(JRequest::getInt('itemID'));
 
//Get category
$category = & JTable::getInstance('K2Category', 'Table');
$category->load($item->catid);
 
//Access check
$user = JFactory::getUser();
if ($item->access > $user->get('aid', 0) || $category->access > $user->get('aid', 0)) {
JError::raiseError( 403, JText::_("ALERTNOTAUTH") );
}
 
//Published check
if (!$item->published || $item->trash ) {
JError::raiseError( 404, JText::_("Item not found") );
}
if (!$category->published || $category->trash) {
JError::raiseError( 404, JText::_("Item not found") );
}
 
 
$rate = JRequest::getVar('user_rating', 0, '', 'int');
 
if ( $rate >= 1 && $rate <= 5) {
$db = & JFactory::getDBO();
$userIP =  $_SERVER['REMOTE_ADDR'];
$query = "SELECT * FROM #__k2_rating WHERE itemID =".(int)$item->id;
$db->setQuery($query);
$rating = $db->loadObject();
 
if (!$rating) {
$query = "INSERT INTO #__k2_rating ( itemID, lastip, rating_sum, rating_count ) VALUES ( ".(int)$item->id.", ".$db->Quote($userIP).", {$rate}, 1 )";
$db->setQuery($query);
$db->query();
echo JText::_('Thanks for rating!');
 
}
 
else {
if ($userIP != ($rating->lastip)) {
$query = "UPDATE #__k2_rating".
" SET rating_count = rating_count + 1, rating_sum = rating_sum + {$rate}, lastip = ".$db->Quote($userIP).
" WHERE itemID = {$item->id}";
$db->setQuery($query);
$db->query();
echo JText::_('Thanks for rating!');
 
}
else {
echo JText::_('You have already rated this item.');
}
}
 
}
$mainframe->close();
}

После изменения стало:
Код
     function vote(){
 
$mainframe = &JFactory::getApplication();
$user = JFactory::getUser();
if (!$user->guest){
JTable::addIncludePath(JPATH_COMPONENT_ADMINISTRATOR.DS.'tables' );
 
//Get item
$item = & JTable::getInstance('K2Item', 'Table');
$item->load(JRequest::getInt('itemID'));
 
//Get category
$category = & JTable::getInstance('K2Category', 'Table');
$category->load($item->catid);
 
//Access check
//$user = JFactory::getUser();
if ($item->access > $user->get('aid', 0) || $category->access > $user->get('aid', 0)) {
JError::raiseError( 403, JText::_("ALERTNOTAUTH") );
}
 
//Published check
if (!$item->published || $item->trash ) {
JError::raiseError( 404, JText::_("Item not found") );
}
if (!$category->published || $category->trash) {
JError::raiseError( 404, JText::_("Item not found") );
}
 
 
$rate = JRequest::getVar('user_rating', 0, '', 'int');
 
if ( $rate >= 1 && $rate <= 5) {
$db = & JFactory::getDBO();
$userIP =  $_SERVER['REMOTE_ADDR'];
$query = "SELECT * FROM #__k2_rating WHERE itemID =".(int)$item->id;
$db->setQuery($query);
$rating = $db->loadObject();
 
if (!$rating) {
$query = "INSERT INTO #__k2_rating ( itemID, lastip, rating_sum, rating_count ) VALUES ( ".(int)$item->id.", ".$db->Quote($userIP).", {$rate}, 1 )";
$db->setQuery($query);
$db->query();
echo JText::_('Thanks for rating!');
 
}
 
else {
if ($userIP != ($rating->lastip)) {
$query = "UPDATE #__k2_rating".
" SET rating_count = rating_count + 1, rating_sum = rating_sum + {$rate}, lastip = ".$db->Quote($userIP).
" WHERE itemID = {$item->id}";
$db->setQuery($query);
$db->query();
echo JText::_('Thanks for rating!');
 
}
else {
echo JText::_('You have already rated this item.');
}
}
 
}
}
else {
echo JText::_('Войдите, или зарегистрируйтесь, что-бы оценить.');
}
$mainframe->close();
   }
Записан
SDKiller
Moderator
*****

Репутация: +325/-5
Offline Offline

Пол: Мужской
Сообщений: 2749


...ergo sum


« Ответ #5 : 22.11.2011, 22:49:58 »

Да нормально.
Только было бы правильнее дополнить языковой файл, а не писать кириллицей в модели.
Записан
xxxLuffy
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 16


« Ответ #6 : 08.01.2012, 19:29:48 »

Заменил функцию vote как написано выше и не чего не изменилось, гостем клацая на звёздочки просто не реагирует и не каких сообщений типа "Войдите, или зарегистрируйтесь, что-бы оценить." не выводит ...

_

Все дошло, что при варианте что оно не будет реагировать оно таки не реагирует и надо вернуть изначальный вариант чтобы оно реагировало на не зареганых)
теперь проблема с кракозябрами вместо нужного сообщения - "Войдите, или зарегистрируйтесь, что-бы оценить." но это я думаю уже исправить сам смогу)
« Последнее редактирование: 08.01.2012, 19:36:21 от xxxLuffy » Записан
_ib_
Support Team
*****

Репутация: +100/-8
Offline Offline

Сообщений: 729



« Ответ #7 : 21.01.2014, 22:35:39 »

вывод сообщения о регистрации:
echo JText::_('JGLOBAL_YOU_MUST_LOGIN_FIRST');
Записан
name
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Сообщений: 124


« Ответ #8 : 07.08.2014, 17:35:46 »

По методу из 4 поста у меня просто выдается сообщение для не авторизованных пользователей, но для авторизованных стрелка просто по кругу вертится бесконечно
Записан
googlonator
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Сообщений: 25


« Ответ #9 : 17.05.2015, 14:14:50 »

Не могу найти вообще таких строк у себя. Первую нашел, а вот где эту функцию vote взять не знаю. В item.php нету

Нашел. Я искал в папке шаблона /com_k2/template/default , а надо было в папке models/item.php =)

Нашел ошибку.( Теперь зарегистрированные пользователи не могут голосовать( Бесконечно крутиться загрузка.

Может кто знает как исправить?
« Последнее редактирование: 17.05.2015, 14:31:59 от googlonator » Записан
googlonator
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Сообщений: 25


« Ответ #10 : 17.05.2015, 14:58:36 »

Всё. Разобрался. В сообщении от 4ort где приведен готовый пример, что то приводит к ошибке. Не копируйте! Просто допишите самостоятельно строки в файл modules/item.php строки
Код:
$user = JFactory::getUser();
if (!$user->guest){
как показано в примере выше от 4ort
И в конце добавьте одну закрывающуюся скобку и
Код:
else {
echo JText::_('Войдите, или зарегистрируйтесь, чтобы оценить.');
}
И вуаля, всё работает на ура как с зарегестрированными пользователями так и с гостями =)
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet