Как перенаправить на страницу после пятизвездочного голосования в Drupal с правилами? - PullRequest
0 голосов
/ 17 января 2012

Drupal 6,22 Fivestar 6.x-1.19 Правила 6.x-1.4 Эти модули были последними на момент публикации.

Моя цель - перенаправить пользователя на страницу, когда он голосует за узел. Должно быть достаточно просто.

Я создал правило, когда пользователь голосует за узел. Нет условий. Я добавил действие, чтобы добавить сообщение в журнал, чтобы убедиться, что правило запускается. Который это. Затем добавляем действие для перенаправления на домашнюю страницу (для тестирования). Перенаправление никогда не происходит. Если я установлю флажок «Немедленно выполнить перенаправление страницы», голосование по ajax никогда не будет сохранено и просто зависает при «сохранении голоса ...».

Не думаю, что я делаю что-то не так, и опубликую это в пятизвездочных модулях. У кого-нибудь еще была такая проблема?

1 Ответ

1 голос
/ 17 января 2012

http://drupal.org/node/252859

«Перенаправление на URL ...» определенно вызовет проблемы с механизмом голосования Fivestar AJAX.Вот что происходит:

Что обычно происходит: - Пользователь нажимает на виджет Fivestar, чтобы оценить.- AJAX-запрос сделан текущей страницей.- VotingAPI сохраняет голосование.- Fivestar генерирует XML и печатает страницу.- Текущая страница получает XML, затем обновляет виджет голосования с новыми значениями.

Что происходит с VotingActions: - Пользователь нажимает на виджет Fivestar, чтобы оценить - AJAX-запрос сделан - VotingAPI регистрирует голосование - Хуки VotingActionsи говорит: «О, я перенаправляю этот URL» <- Если что-то идет не так - Вместо того, чтобы возвращать XML на вызывающую страницу (которая будет обновлять голоса), исходная страница возвращает полную HTML-страницу, куда перенаправляет VotingActionsстр.- Fivestar не удается сгенерировать его XML, потому что VotingActions завершил выполнение с помощью drupal_goto (). </p>

Так что я не думаю, что это ошибка в VotingActions или Fivestar, это всего лишь случайиспользование двух функций несовместимыми способами.Для этого Fivestar должен был бы , а не быть управляемым AJAX, вместо того, чтобы перезагрузить страницу, чтобы сохранить голос.

Fivestar предоставляет хороший хук JavaScript, который вы можете использовать для перехода к следующемустр.Если вы добавите JavaScript на страницу, которая содержит что-то вроде этого:

function fivestarResult(voteResult) {
    window.location.href = 'http://google.com';
}
...