Добрый день)
Мне необходимо создать на сайте своего рода приемную. Войдя в неё, посетитель видит страницу с условиями и правами кот он имеет. и если он согласен то пересылается на форму отправления заявки, где он должен выбрать раздел куда надо отправить заявку и вводит свои данные и вопрос и отправляет его, ещё он может указать публиковать или нет его вопрос когда на него дадут ответ. Далее модераторы просматривают поступившие вопросы и дают на них ответы.
это если вкратце...
Какие модули должны понадобиться при создании такой приемной...да и вообще с какого бока можно к этому подойти?
Комментарии
Подойти с правого верхнего, там где поиск.
Модуль называется webform
Да этот модуль я уже использую) для создания формы отправки заявки.. но это только часть... А формирование списка вопросов-ответов, а модерирование...
запуталась...
и еще как сделать пересылку на другую страницу при нажатии на кнопку, типо "согласен с условиями"?
А ещё списки получателей заявок олжны быть редактируемыми модератором..
Нужные модули легче найти на drupalmodules.com, чем на drupal.org
Так вам обращение по электронке отправлять нужно или в системе регистрировать?
В системе регистировать) И потом отображать список этих обращений с ответами
И самое главное, модераторы должны иметь возможность на них отвечать..
тогда создавайте новый тип материала и играйте с ним
Вот я и не могу понять...я создала новый тип материалов, но как можно соединить webform с новым типом материалов, не будет же пользователь(даже анонимный) создавать новый материал... это надо впихнуть в необходимую мне форму на любом месте сайта, а как это сделать непонятно...
а в чём проблема?
А как сделать пользовательсую форму длля создания нового материла? т.е. не такую как обычно при создании нового материала (предположим по ссылке node/add/guest), а такую как можно сделать с помощью webform... и то же самое формы для редактирования модератором?
всё что вводится в webform отправляется на указанный емаил и хранится в системе в табличном виде для статистики. Либо вручную перенабивать то что пришло по почте от вебформы, либо разрешить создавать материал пользователям
Freedom, спасибо за советы) попробую сделать прилично так чтобы пользователь мог добавлять материал сам...но не видел лишнего.
но.. вы не подскажете как со страницы добавления нового материала (конкретного) можно убрать стандартные поля типо Формат ввода, Информация о редакции, Вложенные файлы и т.п.
Они не будут видны пользователю )))) Если только сами не разрешите их видеть.
будут...Вернее не все...но вот Название, Описание мне никак не убрать...
и формат ввода иммено для этой страницы как убрать?
И поле Таксономия будет не в том формате, хотя это полезно типо галки опубликовать на сайте или нет, но в таком виде как отображается там типо "выберете контейнер" тоже не подходит...
Где-то это уже было, посмотрите в поиске.
Несовсем понял.
Ещё есть CCK и его подмодуль Content Permissions - позволяет назначать права по полям.
Да, я его использую но он позволяет назначать только права CCK-полям, а права к стандартным полям там не изменить...
Стандартных поля два всего - заголовок и тело. Тело можно убрать в настройках, заголовок скрыть модулем auto_nodetitle.
Я знаю только как убрать выбор формата ввода для определенных ролей, если оставить только один формат ввода форма для выбора пропадает, но тогда все равно выскакивает подсказка о настройках текущего формата ввода "подробнее о форматировании" и это не совсем решает проблемы, хотелось бы убрать эту опцию выбора формата только для определенного типа материала..
Ну..не важно... я использовала таксомонию для пробы.. но там можно выводить в списке только типы материалов со всеми полями, все равно сейчас переделаю все под Views
ой..почему-то прошлое сообщение 2 раза выскочило...
Спасибо) так и сделаю)
Вместо тело можно добавить сск поле для многострочного текста. У него вроде не выводит формат ввода.
Посмотрите [module=better_formats]
Freedom, Dan спасибо..
А вот ещё одна практическая проблема:
пользователи добавляют вопросы, а модераторы потом по каждому отправителю отвечают на эти вопросы
1) Можно ли сделать так чтобы модераторам не надо было заходить в редактирование содрежимого каждого материала (admin/content/node) и там добавлять ответ?
2) Можно ли сделать так чтобы модераторы могли фильтровать списки вопросов по адресату и по тому добавлен ответ или нет?
[module=views]
Да, с помощью него будет удобней сделать...
решила сделать так:
у модератора будет дополнительная ссылка в меню типо "добавить ответ" через которую он попадает на список вопросов, и при нажатии на ссылку каждого вопроса он пересылается на страницу материала, где и может отредактировать/добавить ответ.
но вот ещё вопросы
1) у всех, в том числе и простых пользователей будет возможносить посмотреть вопросы, на которые уже даны ответы (по ссылке "Ответы на вопросы" будет выводиться список вопросов с ответами). Так вот, можно ли с помощью views или какого-то дополнительного модуля сделать поиск по полю...т.е. чтобы пользователь мог ввести свою фамилию или номер сообщения и просмотреть ответ на свой вопрос?
да и для модератора в списке для добавления ответа, чтобы была не только сортировка (кот легко сделать в табличном виде Views), а фильтр по автору, дате сообщения и по тому был дан ответ или нет..
2) И вопрос по CCK наверно: После отпрвления сообщения (добавления нового материала) пользователю надо вывести окошко с номером его сообщения... не могу найти как это можно сделать...
1. всё тот же views. Агргументы, фильтры, внешние фильтры (exposed folters) - это поможет Вам
2. Попробуйте Trigger (модуль из коробки) - добавьте новое действие "Показать сообщение" и повесьте на создание ноды действие "Display a message to the user", в тексте напишите что-то вроде: "Ссылка на Ваш вопрос: %node_url"
Dan, спасибо вам большое!
А можно ли повесить это действие не на все, а только на создание опредленного типа материалов?
А ещё кроме этого нового там все равно всплывает стандартноее сообщение: "[мой_тип_материала] был создан." (
Не знаю, думаю что нет. Вам или писать самим или попробовать модуль Rules, надеюсь он справиться
Ага, он подошел) хоть он конечно и великоват, но я думаю мне он на этом сайте ещё не раз пригодиться)
хотя как убрать вывод стандартного сообщение типо такой материал добавлен, кот появляется дополнительно с моим, я пока не догнала..
А ещё вопрос... а можно ли в Views вывести вместо поля чекбокс или слово, в зависимости пустое поле или нет... смысл такой:Если на вопрос дан откт у меня сейчас сделано что в списке выводится поле ответ полностью, но в списке сам ответ не нужен, надо вывести только надпись есть ответ или нет.. Это аргументами как то делается? не могу разобраться...
и еще, для получения адреса только что созданной ноды можно воспользоваться переменной %node_url, а можно ли как то узнать id этой новой ноды? ) ведь существует переменная $id? только как можно ей воспользоваться внешне не из php-кода )
Иногда еще полезно попробовать для начала подробное тз написать на сервис. Часто в процессе написания многие вопросы отпадают, и многие новые появляются.
да сам сервис не сложный, и у меня уже давнно реализован, но то был не на друпале..и сейчас встала задача сделать такое же на друпале...
так что что должно получиться на выходе я четко представляю, но из-за того что с друпалом работать начала только что я пока плохо разбираюсь какие существуют и какие необходимы модули для его реализации...
Есть ингеграция! но чтот у меня не получается... я поняла что при установке модуля там есть уже набор стандартных лексем, и если написать там где мне надо [nid] - должен вывестить на этом месте id текущей ноды... но ни в rules при формировании сообщения, ни в тригерс это не работает...
Да, точно, можно так. Ступил.
Не подскажу - негде посмотреть. Пришло время почитать документацию
Я нашла что это сообщение добавляется в node.pages.inc но ведь проверку на тип созданного неправильно будет добавить прямо туда?
Неправильно. К тому же после очередного апгрейда, Вам надо будет не забыть это обновлять.
Если уж лезть в код, тогда можно отключить rules и написать пару строк в своём модуле
Как-то так:
if($op == 'insert' && $node->type == 'ТИП-МАТЕРИАЛА'){
// стираем текущие сообщения уровня 'status'
drupal_get_messages('status',TRUE);
// ставим своё, в котором есть nid
drupal_set_message('Материал создан. Его номер: '.$node->nid,'status');
}
}
Спасибо!
Но так получается новое сообщения добавляется, все правильно, но старое не стирается.. вероятно функция, вызывающая сообщение "[ваш материал][заголовок] был создан" вызывается после nodeapi...
Я так поняла это делает функция submit? при отправке формы? но переопределение этой функции для материала моего типа тоже ничего не меняет...
$node = node_form_submit_build_node($form, $form_state);
$insert = empty($node->nid);
if ($insert && $node->type == '[ТИП-МАТЕРИАЛА]') {
drupal_get_messages('status',TRUE);
}
}
Нет, Вы её не переопределили. Но Вы правы, сообщение формируется после nodeapi. Красивого решение не вижу, вариант навскидку: в nodeapi в SESSION добавлять переменную-сообщение, а сами сообщения чистить и добавлять в препроцессинге страницы.
Например так:
if($op == 'insert' && $node->type == 'ТИП-МАТЕРИАЛА'){
$_SESSION['messages']['rewrite-status'] = t('Материал создан. Его номер: !nid', array('!nid' => $node->nid));
}
}
function ИМЯ-ВАШЕГО-МОДУЛЯ_preprocess_page(&$vars) {
if(isset($_SESSION['messages']['rewrite-status'])){
// стираем текущие сообщения уровня 'status'
drupal_get_messages('status',TRUE);
// ставим своё, в котором есть nid
drupal_set_message($_SESSION['messages']['rewrite-status']);
unset($_SESSION['messages']['rewrite-status']);
$vars['messages'] = $vars['show_messages'] ? theme('status_messages') : '';
}
}
Интересно)... и вроде должно работать... но не работает! ) сообщение все равно добаляется! не может быть чтобы функция вызывалась позже preprocess_page?
Оба сообщения?
Вместо сообщения из сессии добавляется кодированный вопросик (одна буковка)... но это не важно, у меня с кодировкой вероятно проблемы какие-то.. А потом выводится стандартное сообщение о созд нового материала
хм.. кодированное сообщение появляется почему-то просто когда пишу в сессию $_SESSION['messages']['rewrite-status'] = t(...); даже если потом его не добавляю в сообщение //drupal_set_message($_SESSION['messages']['rewrite-status']);
Хм, попробуйте не использовать массив ['messages'], просто: $_SESSION['rewrite-status']
Работает! Dan, спасибо вам большое) Редко встретишь таких отзывчивых людей)
Вообще я в конце отошла от первоначальной темы, углубившись в детали, но может кому-то это тоже пригодиться, таким же начинающим как я)
Главное, что работает!
Добавил к названию [РЕШЕНО]
Я бы не прочь посмотреть на результат, если это возможно.