В Magento пропадает опрос после получения голоса

Apr 11, 2012 15:48

В Мадженто исчезает голосование после принятия голоса - решение проблемы

Столкнулся с тем, что у посетителей переставал отображаться опрос, если посетитель в нём проголосовал. То есть хотелось бы, чтобы посетителю всегда что-то выводилось - или результаты опроса, или другой опрос, в котором посетитель еще не принимал участия.

Поиск по форуму мадженты результаты, конечно, дал, но предлагаемое решение имело существенный минус: результаты опросов и новые опросы выводились случайным образом, а посетителю было бы хорошо показывать исключительно те опросы, в которых он еще не принимал участия.

Итого удалось добиться нужной работы достаточно простым трюком, до которого на англоязычном форуме почему-то никто не дошёл:
  1. Скопируйте /app/code/core/Mage/Poll/Block/ActivePoll.php в /app/code/local/Mage/Poll/Block/ActivePoll.php
  2. Найдите и закомментируйте строку $votedIds = $this->getVotedPollsIds();
  3. Добавьте ниже новую строку $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
  1. Copy /app/code/core/Mage/Poll/Block/ActivePoll.php to /app/code/local/Mage/Poll/Block/ActivePoll.php
  2. Find and comment out the line $votedIds = $this->getVotedPollsIds();
  3. 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; }

magento

Next post
Up