0 Пользователей и 1 Гость просматривают эту тему.
  • 10 Ответов
  • 2813 Просмотров
*

4ort

  • Осваиваюсь на форуме
  • 82
  • 0
« Последнее редактирование: 23.11.2011, 09:14:51 от 4ort »
*

SDKiller

  • Moderator
  • 2734
  • 320
  • ...ergo sum
Самое простое - добавить условие в шаблон.

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

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

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

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

Код
	
<?php if($this->item->params->get('itemRating')  && !$this->user->guest): ?>
*

4ort

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

SDKiller

  • Moderator
  • 2734
  • 320
  • ...ergo sum
Тогда есть варианты:

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

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

Было:
Код: 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();
}

После изменения стало:
Код: php
     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
  • 2734
  • 320
  • ...ergo sum
Да нормально.
Только было бы правильнее дополнить языковой файл, а не писать кириллицей в модели.
*

xxxLuffy

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

_

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

_ib_

  • Support Team
  • 728
  • 92
вывод сообщения о регистрации:
echo JText::_('JGLOBAL_YOU_MUST_LOGIN_FIRST');
Легальные шаблоны и дёшево!  + скидки до 50% для шаблонов клуба Joomlart, RocketTheme, Yootheme и Gavick.

при интересе пишите в личку или на мыло: "p" точка "d" собака gmx.de
*

name

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

googlonator

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

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

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

Может кто знает как исправить?
« Последнее редактирование: 17.05.2015, 13:31:59 от googlonator »
*

googlonator

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

Отдельные допполя видны только админу

Автор глюм

Ответов: 0
Просмотров: 494
Последний ответ 22.08.2013, 14:15:14
от глюм