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

ABTOP

  • Захожу иногда
  • 493
  • 33 / 4
В нормальном функционале при нажатии на одну из кнопок голосования обе кнопки пропадают. Это логично: голосование сделано и надобности в кнопках больше нет. Однако я делаю шаблон в котором кнопки должны обесточиваться, но на виду оставаться. JavaScript конечно срабатывает и прячет мои кнопки. Это происходит довольно быстро и я не успеваю засечь, что именно скрипт делает для изменения верстки. Прочитать скрип я не смог, т.к. я в этом не разбираюсь.

Вопрос: что именно делается с вёрсткой для прятания голосовательных кнопок после голосования?
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
После того, как за комментарий оценили, дергается шаблон tpl_comment, в нем вызывается функция getCommentVoteValue и то, что он возвращает заменяет текущее содержимое элемента. Поэтому если нужно, чтобы кнопки всегда были видны, надо в этой функции поменять проверку:
Код: php
<?php
if ($this->getVar('button-vote', 0) == 1) {
?>
<a href="#" class="vote-good" title="<?php echo JText::_('BUTTON_VOTE_GOOD'); ?>" onclick="jcomments.voteComment(<?php echo $comment->id;?>, 1);return false;"></a><a href="#" class="vote-poor" title="<?php echo JText::_('BUTTON_VOTE_BAD'); ?>" onclick="jcomments.voteComment(<?php echo $comment->id;?>, -1);return false;"></a>
<?php
}
*

ABTOP

  • Захожу иногда
  • 493
  • 33 / 4
Цитировать
...вызывается функция getCommentVoteValue...
Да, но я её не использую.
Числа голосов я вывожу напрямик, как они есть, без подсчёта разницы через
echo intval($comment->isgood); или $comment->ispoor
А изменения CSS-класса на vote-none сделано прямо в шаблоне.

То есть весь этот блок выглядит так:
Код
<span class="comments-vote">
<span id="comment-vote-holder-<?php echo $comment->id; ?>">
<span class="vote-good">
<?php if(intval($comment->isgood)!= 0) {
echo intval($comment->isgood);
}
else {
echo "&nbsp;";
} ?>
</span>

<?php
if ($this->getVar('button-vote', 0) == 1) {
?>
<a href="#" class="vote-good" title="<?php echo JText::_('BUTTON_VOTE_GOOD'); ?>" onclick="jcomments.voteComment(<?php echo $comment->id;?>, 1);return false;"></a>
<a href="#" class="vote-poor" title="<?php echo JText::_('BUTTON_VOTE_BAD'); ?>" onclick="jcomments.voteComment(<?php echo $comment->id;?>, -1);return false;"></a>
<?php
}
else
{
?>
<a href="#"  class="vote-none" title="<?php echo JText::_('ERROR_ALREADY_VOTED'); ?>" onclick="return false"></a>
<a href="#"  class="vote-none" title="<?php echo JText::_('ERROR_ALREADY_VOTED'); ?>" onclick="return false"></a>
<?php
}
?>
<span class="vote-poor">
<?php if(intval($comment->ispoor)!= 0) {
echo intval($comment->ispoor);
}
else {
echo "&nbsp;";
} ?></span>
</span>
</span>

Проблема в том, что кнопки (и цифры тоже) исчезают сразу после нажатия на них.
Иными словами, исчезает всё вутри
<span id="comment-vote-holder-x"></span>
При перезагрузке страницы они, конечно, появляются снова и в правильном виде, но хотелось бы чтобы JavaScript цифры продвигал, но ничего не прятал.
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Еще раз, когда нажимают на кнопку голосования уходит запрос, который обрабатывается в jcomments.ajax.php, он после оценки вызывает указанный шаблон с параметром get_comment_vote, а тот в свою очередь дергает указанную функцию:
Код
			if ($this->getVar('get_comment_vote', 0) == 1) {
// return comment vote
$this->getCommentVoteValue( $comment );
Если у тебя обработки этого нет, то в ответ получишь пустоту - все скроется.
*

ABTOP

  • Захожу иногда
  • 493
  • 33 / 4
О! Так понятнее!  ;D
Щас подумаем, как переписать getCommentVoteValue в нужную сторону.
Спасибо.
*

ABTOP

  • Захожу иногда
  • 493
  • 33 / 4
Сергеи, такой вопрос попутно:
в файле /components/com_jcomments/jcomments.php строка 314
Код
	updateVote: function(i,t){this.busy.stop();var c=this.$('comment-vote-holder-'+i);if(c){c.innerHTML=t;}},
Что есть этa "t" и где она задаётся?

Я почему спрашиваю.
Строкой выше
Код
	voteComment: function(i){var v=this.$('comment-vote-holder-'+i);if(v){v.innerHTML='';this.busy.start(v,null);}return this.ajax('JCommentsVoteComment',arguments);},
вы стираете всё внутри comment-vote-holder-х . Затем через updateVote:туда же что-то вставляете из этой "t".
Так вот я думаю, что вы вставляете только выход функции getCommentVoteValue
то есть
<span class="vote-<?php echo $class; ?>"><?php echo $value; ?></span>
и ничего больше.

К условию if ($this->getVar('button-vote', 0) == 1) вы не возвращаетесь и поэтому оно никакой роли для AJAX-а не играет.
Я так думаю ещё и потому, что у меня выводятся числа intval($comment->isgood) за пределами этого условия и они должны были бы по идее отображаться всегда.

Опять же правильное отображение кнопок и цифр восстанавливается только после полной перезагрузки страницы, что вызывает прохождение через это самое условие.
« Последнее редактирование: 22.03.2012, 03:51:46 от ABTOP »
*

МихаилМ

  • Захожу иногда
  • 55
  • 2 / 0
если решили проблему - выложите решение
*

ABTOP

  • Захожу иногда
  • 493
  • 33 / 4
Решение стало частью шаблона.
http://www.joomlatune.com/forum/index.php?topic=5258.0
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться