Организация службы Вопрос-Ответ

Главные вкладки

Аватар пользователя Geldora Geldora 23 мая 2008 в 12:55

В последнее время много было вопросов о том, как организовать систему вопросов-ответов на сайте, и я решила сделать подборку способов и кратко описать минусы и плюсы каждого.

Задача - сделать форму для добавления вопросов и ответов на сайте, как Answers на Яху, или колонка экспертов.

Решений как всегда на Друпале, куча.

1. Очень-очень простое. Форма контактов

ФОрма контактов - модуль стандартный, есть везде, остается только включить и настроить таксономию. Человек оставляет вопрос, вы его получаете и пишете ответ. Все просто и удобно.

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

2. Очень простое. Новый тип ноды.
Так сделано на двух моих сайтах http://medialawca.org/node/add/qa (форма) и http://medialawca.org/help/faq (список вопросов). А также на http://www.uchi.kz/vopros (список), вопрос можно задать тут: http://www.uchi.kz/node/add/vopros.

Как видите, обычная нода - титл и текстовое поле. Можно варьировать настройки - на медиало, например, вопрос по умолчанию не опубликован, после добавления ответа, администратор снимает галку опубликовать, и вопрос выводится в списке. Это может быть неудобно, поэтому на Учи.кз я публикую вопрос сразу. Кстати, там я добавила лишнее поле через ССК, специально для ответа.

Список вопросов, кстати, выводится либо через таксономию либо через вью. Тоже все стандартно и просто.

Плюсы. Все очень просто. И лишних модулей не надо (можно обойтись и без сск).

Минусы. Всегда была за это вариант, но недавно столкнулась со следующими минусами.
На обоих сайтах позволена публикация вопросов без регистрации. Однако нужно предупреждать автора об ответе, но специальных модулей предупреждения анонимов нет, никакие субскрипшены, нотифай не помогают. Есть вариант использовать поле Email, на рабочем сайте я это не использовала, но на локали не понравилось - эмейл становится видным всем пользователям. Можно конечно, отправить ответ, а потом убрать эмейл, или можно предупреждать пользователя о том, что адрес становится видным всем.
Кроме того, ответ является частью ноды вопроса. Это очень удобно, когда есть база консультаций и редактор сам набивает тексты. Но неудобно, когда вопросы задают посетители, опять таки из-за сложности с оповещением об ответе.

Модули FAQ/FAQ ASk. Решение, как мне показалось, более сложное.
Я тут сразу скажу, что не сильно их тестировала, просто устанавливала на денвере. И сразу скажу, что не очень-то в них разобралась, и пусть лучше кто-нибудь, у кого они используются вживую, раскажет о них больше. Фак Аск позволяет выделить экспертов, которые и будут отвечать на вопросы, там можно использовать таксономию (в первых двух способах тоже можно), и для него нужен еще один модуль. Итого нужно 3 модуля. Мне же показалось:

Минусы - сложнее настраивать.
Плюсы - больше настроек Wink больше возможностей.

Модуль Aswers. Только недавно нашла этот модуль, по моему является хорошей альтернативой 2 способу! Я поменьшей мере, начал его тестировать на одном из сайтов и потихоньку перейду к нему.

Какие плюсы? Вопрос и ответ - это разные типы нод. Т.е. можно спровоцировать пользователей самим отправлять ответы, возможно (идея только сейчас в голову пришла, не тестировала еще) использовать в связке с кармой или юзерпойнтс, прикрутить рейтинги... Кроме того, сразу в модуле есть возможность отправлять сообщение об ответе автору (только зарегистрированным).

Минусы - ну, статус модуля дев. С 2007 года. И ощущение, что он заброшен, так что неизвестно портируют ли его на 6ку... Потом, темизация возможна, но нужно залезть в код модуля и посмотреть стили, кот. использует автор, и также придется лезть в код, чтобы по другому сделать форму или, например, кнопки местами поменять... Но впринципе, как решение из коробки, очень даже ничего.

Форум. Как на друпал.ру или друпал.орг. И мне очень нравится как тут все Smile
Наверное, это удобно, если есть большое сообщество. И если форум используется только для вопросов.

Гостевая книга. Тоже вариант. В принципе, выводится список вопросов и ответов, отвечать могут все или зарегистрированные...

Итого, а то печатать устала Wink
Способов много. Но ни в одном из них не реализована возможность отправлять сообщение незарегистрированному пользователю об ответе. Это основной минус. А плюсы те, что Друпал позволяет сделать одно и то же многими путями и подобрать самые удобные.

Комментарии

Аватар пользователя gorr gorr 23 мая 2008 в 13:07

Можно к обычному типу нодов добавить поле ССК е-мэйл, подключить модуль филд аксесс и сделать это поле видимым только тому, кому надо, можно кроме того настроить автоматическую отправку сообщения автору ноды после его модификации консультантом.

Аватар пользователя gorr gorr 23 мая 2008 в 13:58

Тут немножко сложнее, так как автор ноды незареган, но зато имеется поле с его е-мэйлом, вот из него-то и надо взять адресок и сделать экшн при обновлении ноды именно пользователем, у которого роль- консультант.

Аватар пользователя kyky kyky 24 мая 2008 в 7:07

согласен с первым постом. создайте новый материал с полями вопрос и ответ, а с пом. модуля field_permissions запретите писать ответ тому, кто его задает. Выводите через views

Аватар пользователя Geldora Geldora 26 мая 2008 в 11:51

А как можно переназвать комментарии "ответами" только для одного типа нод - собственное вопросов?
Потому что я думала и поняла, что чем проще тем лучше. Нода - вопрос, комментарий - ответ, как тут на сайте.
Но для удобства было б хорошо переназвать комментарии ответами. Подскажите плиз, как это можно сделать, или ссылку киньте!

Аватар пользователя beerman beerman 26 мая 2008 в 16:16

последнее время не люблю views и стараюсь делать вывод ноды правкой вида через contemplate.
возможно, я мыслю еще dbf базами, но решение вижу такое:
Добавить decimal_field поле field_YorN
Добавить поле email_field - field_usermail
Выводим ноду и проверяем наличие ответа.
Если поле $node->body с ответом пустое, то либо выводим вопрос, либо не выводим (как угодно)
Если поле с $node->body содержит запись, то проверяем наше поле field_YorN на предмет записи в нем условного кода.
Если кода нет, а ответ есть, то mail() и пишем в это поле условный код, выводим вопрос-ответ
Если есть ответ и есть код, то просто выводим вопрос-ответ

<?php
$sql="SELECT a.title, a.body, c.field_usermail, c.YorN FROM node_revisions AS a, node AS b, cccc AS с WHERE a.nid=b.nid AND b.type='myfaq' ORDER BY a.timestamp"; // поправьте, не силен в запросах. не помню куда сск создает поля (сссс и хххх)
$massiv = db_query($sql);
print '

';
while ( $row = mysql_fetch_array($massiv) ) {
if ( $row[1] ) {
if ( $row[3] !== '1' ) { // 1 - условный код
mail ( $row[2], [ваши данные] );
INSERT ..... // вписываем условный код в нужное поле
}
print '
'.$row[0].'

';
print '

'.$row[1].'

'
}
}
print '

';
?>

Сильно не пинайте за код, лучше покажите как его реализовать более грамотно.

Аватар пользователя raziel raziel 26 мая 2008 в 16:31

Использую FAQ/FAQ_ask,
но он не совсем корректно работает. К модулям добавлен Helpers для подключения экспертов + Таксономия для групп FAQ.
И почему-то даже при наличии вопроса-ответа в одной из групп, на главной FAQ они не выводятся.
Кто-нибудь сталкивался с этим?

Аватар пользователя EllECTRONC EllECTRONC 19 июня 2008 в 12:48

raziel wrote:
И почему-то даже при наличии вопроса-ответа в одной из групп, на главной FAQ они не выводятся.
Кто-нибудь сталкивался с этим?

Мммм... может у тебя стоит pathauto и в нем что-то напутано с путями?!? У меня похожее с форумом было! Темы (ноды) создавались, но в форуме не отображались пока не поправила все aliases для форума (основная проблемма с aliases для категорий и подкатегорий).

Аватар пользователя Geldora Geldora 26 мая 2008 в 18:59

Нашла еще один модуль, Questions.
Механизм простой: Из интересных примочек там есть возможно перенаправить пользователя на страницу - спасибо, ваш вопрос принят. Зато, нет возможности добавления нескольких ответов. В общем, неплохой компромис между отдельным типом ноды и модулем Ансверс.

Аватар пользователя mean0dspt@drupal.org mean0dspt@drupal.org 17 июня 2008 в 10:47

много текста а "итого" нет.
"способов много" за итого не принимаю. в чем смысл поста? написать что есть вот это и то, но я не разобралась толком ни в том ни в этом?

а по сабжу есть еще webform. умеет емэйл посылать и файлы прикладывать.

Аватар пользователя Geldora Geldora 20 июня 2008 в 22:29

<a href="mailto:mean0dspt@drupal.org">mean0dspt@drupal.org</a> wrote:
много текста а "итого" нет.
"способов много" за итого не принимаю. в чем смысл поста? написать что есть вот это и то, но я не разобралась толком ни в том ни в этом?

а по сабжу есть еще webform. умеет емэйл посылать и файлы прикладывать.

Кстати, в вашем комменте тоже смысла немного Wink Итого я не могу написать, потому что есть и то-то и то-то, я использовала и это, и это, и это, и так и не нашла себе нужного. Я вообще-то надеялась, что кто-нибудь подскажет, как прикрутить посылку эмейла. Может расскажете, как использовать вебформ, чем критиковать Wink

Насчет эмейла о новом ответе - Сейчас я активно обдумываю идею использвать рсс2эмейл. если что-нибудь получится, отпишу.

Аватар пользователя argon argon 2 марта 2009 в 21:34

Про экспертов тема заинтересовала - как раз нужна экспертная оценка определенной категории пользователей. Чем посоветуете? Фак/аск или гостевой?

Аватар пользователя beerman beerman 3 марта 2009 в 4:49

Делал так:

1. Свой тип материала
2. Поля для ответов изначально скрыты для посетителей. Доступны только паля ФИО, Адрес, Мыло, Вопрос. И кнопка отправить.
3. Флаг "Опубликовано" изначально стоит в 0.
4. По сабмиту улетает письмо одной из ролей
5. Страница "Вопрос-ответ" по умолчанию отображает только материалы с ответами.
6. Выбранной роли доступна вкладка "Ожидающие ответа", в которой очередь вопросов на ответ.
7. Этой же роли доступны поля с ответом в редактировании материала.
8. При добавлении ответа флаг опубликовано ставится в 1
9. Если задано поле мыло для задающего вопрос, то ему улетает ответ на мыло.

Донаворотить можно без проблем.
Занавес.

Аватар пользователя Dark_kz Dark_kz 2 мая 2009 в 18:05

>4. По сабмиту улетает письмо одной из ролей
>6. Выбранной роли доступна вкладка "Ожидающие ответа", в которой очередь вопросов на ответ.
>9. Если задано поле мыло для задающего вопрос, то ему улетает ответ на мыло.
как это реализовать?

Спасибо

Аватар пользователя kpv_dnepr@drupal.org kpv_dnepr@drupal.org 20 января 2011 в 23:44

Hello world))

Вопрос к сообществу, начал делать вопрос/ответ, пересмотрел этот топик и решил сделать Views+Cck+Vote Up/Down Comments, в процессе создания натолкнулся на модуль Question/Answer он как раз добавляет необходимый функционал, можно настроить что б коммент с большим рейтингом автоматом становился ответом через заданное время, например месяц.

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

Внимание вопрос: Как вывести сквозной номер коммента, что б пользователь мог выбрать нужный?

P.S. Номер коммента у меня выводит переменная <?php print $comment_link?>

В теме она предопределена следующим образом

<?phpfunction arthemia_preprocess_comment(&$variables) {
  //Add a comment number and link to comments, borrowed from Advanced Forum module.
  if (!isset($comment_number)) {
    static $comment_number = 0;
  }

  $comments_per_page = _comment_get_display_setting('comments_per_page', $variables['node']);
  $page_number = $_GET['page'];

  if (!$page_number) {
    $page_number = 0;
  }
  $comment_number++;
  $post_number++;
  $fragment = 'comment-' . $variables['comment']->cid;
  $query = ($page_number) ? 'page=' . $page_number : NULL;
  $linktext = '#' . (($page_number * $comments_per_page) + $comment_number);
  $linkpath = 'node/' . $variables['node']->nid;
  $variables['comment_link'] = l($linktext, $linkpath, array('query' => $query, 'fragment' => $fragment, 'class' => 'comment-link'));
}?>

Аватар пользователя MaximumofmaX MaximumofmaX 7 декабря 2011 в 22:43

выше писали что можно Webform связать с FAQ.Можно поподробнее о реализации?

как я понимаю это делается при помощи модулей rules и webform_rules

по событию сабмита вэбформы запускам правило...создаём материал типа FAQ а вот как дальше передать данным не пойму блин...