В Мадженто исчезает голосование после принятия голоса - решение проблемы
Столкнулся с тем, что у посетителей переставал отображаться опрос, если посетитель в нём проголосовал. То есть хотелось бы, чтобы посетителю всегда что-то выводилось - или результаты опроса, или другой опрос, в котором посетитель еще не принимал участия.
Поиск по форуму мадженты результаты, конечно, дал, но предлагаемое
решение имело существенный минус: результаты опросов и новые опросы выводились случайным образом, а посетителю было бы хорошо показывать исключительно те опросы, в которых он еще не принимал участия.
Итого удалось добиться нужной работы достаточно простым трюком, до которого на англоязычном форуме почему-то никто не дошёл:
- Скопируйте /app/code/core/Mage/Poll/Block/ActivePoll.php в /app/code/local/Mage/Poll/Block/ActivePoll.php
- Найдите и закомментируйте строку $votedIds = $this->getVotedPollsIds();
- Добавьте ниже новую строку $votedIds = ($this->getActivePollsIds()) ? $this->getVotedPollsIds() : array();
public function getPollToShow ()
{
if ($this->getPollId()) {
return $this->getPollId();
}
// get last voted poll (from session only)
$pollId = Mage::getSingleton('core/session')->getJustVotedPoll();
if (empty($pollId)) {
// get random not voted yet poll
// $votedIds = $this->getVotedPollsIds();
$votedIds = ($this->getActivePollsIds()) ? $this->getVotedPollsIds() : array();
$pollId = $this->_pollModel
->setExcludeFilter($votedIds)
->setStoreFilter(Mage::app()->getStore()->getId())
->getRandomId();
}
$this->setPollId($pollId);
return $pollId;
}
Ниже перевод на английский.
Magento Poll disappers after voting and page refresh - solution
- Copy /app/code/core/Mage/Poll/Block/ActivePoll.php to /app/code/local/Mage/Poll/Block/ActivePoll.php
- Find and comment out the line $votedIds = $this->getVotedPollsIds();
- Add new line $votedIds = ($this->getActivePollsIds()) ? $this->getVotedPollsIds() : array();
public function getPollToShow ()
{
if ($this->getPollId()) {
return $this->getPollId();
}
// get last voted poll (from session only)
$pollId = Mage::getSingleton('core/session')->getJustVotedPoll();
if (empty($pollId)) {
// get random not voted yet poll
// $votedIds = $this->getVotedPollsIds();
$votedIds = ($this->getActivePollsIds()) ? $this->getVotedPollsIds() : array();
$pollId = $this->_pollModel
->setExcludeFilter($votedIds)
->setStoreFilter(Mage::app()->getStore()->getId())
->getRandomId();
}
$this->setPollId($pollId);
return $pollId;
}