[РЕШЕНО] Создание приемной в Drupal

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

Аватар пользователя Helen Helen 18 января 2010 в 16:39

Добрый день)

Мне необходимо создать на сайте своего рода приемную. Войдя в неё, посетитель видит страницу с условиями и правами кот он имеет. и если он согласен то пересылается на форму отправления заявки, где он должен выбрать раздел куда надо отправить заявку и вводит свои данные и вопрос и отправляет его, ещё он может указать публиковать или нет его вопрос когда на него дадут ответ. Далее модераторы просматривают поступившие вопросы и дают на них ответы.
это если вкратце...

Какие модули должны понадобиться при создании такой приемной...да и вообще с какого бока можно к этому подойти?

Комментарии

Аватар пользователя Helen Helen 18 января 2010 в 17:05

Да этот модуль я уже использую) для создания формы отправки заявки.. но это только часть... А формирование списка вопросов-ответов, а модерирование...
запуталась...
и еще как сделать пересылку на другую страницу при нажатии на кнопку, типо "согласен с условиями"?
А ещё списки получателей заявок олжны быть редактируемыми модератором..

Аватар пользователя Helen Helen 19 января 2010 в 11:41

В системе регистировать) И потом отображать список этих обращений с ответами
И самое главное, модераторы должны иметь возможность на них отвечать..

Аватар пользователя Helen Helen 19 января 2010 в 11:55

Вот я и не могу понять...я создала новый тип материалов, но как можно соединить webform с новым типом материалов, не будет же пользователь(даже анонимный) создавать новый материал... это надо впихнуть в необходимую мне форму на любом месте сайта, а как это сделать непонятно...

Аватар пользователя Helen Helen 19 января 2010 в 13:04

"Freedom" wrote:
а в чём проблема?

А как сделать пользовательсую форму длля создания нового материла? т.е. не такую как обычно при создании нового материала (предположим по ссылке node/add/guest), а такую как можно сделать с помощью webform... и то же самое формы для редактирования модератором?

Аватар пользователя Freedom Freedom 19 января 2010 в 13:48

всё что вводится в webform отправляется на указанный емаил и хранится в системе в табличном виде для статистики. Либо вручную перенабивать то что пришло по почте от вебформы, либо разрешить создавать материал пользователям

Аватар пользователя Helen Helen 19 января 2010 в 14:48

Freedom, спасибо за советы) попробую сделать прилично так чтобы пользователь мог добавлять материал сам...но не видел лишнего.
но.. вы не подскажете как со страницы добавления нового материала (конкретного) можно убрать стандартные поля типо Формат ввода, Информация о редакции, Вложенные файлы и т.п.

Аватар пользователя Helen Helen 19 января 2010 в 17:22

будут...Вернее не все...но вот Название, Описание мне никак не убрать...
и формат ввода иммено для этой страницы как убрать?

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

Аватар пользователя Freedom Freedom 20 января 2010 в 0:27

"Helen" wrote:
формат ввода иммено для этой страницы как убрать?

Где-то это уже было, посмотрите в поиске.
"Helen" wrote:
И поле Таксономия будет не в том формате, хотя это полезно типо галки опубликовать на сайте или нет, но в таком виде как отображается там типо "выберете контейнер" тоже не подходит...

Несовсем понял.

Аватар пользователя Dan Dan 20 января 2010 в 7:30

"Helen" wrote:
Freedom, спасибо за советы) попробую сделать прилично так чтобы пользователь мог добавлять материал сам...но не видел лишнего.

Ещё есть CCK и его подмодуль Content Permissions - позволяет назначать права по полям.

Аватар пользователя Helen Helen 20 января 2010 в 9:13

"Dan" wrote:
Ещё есть CCK и его подмодуль Content Permissions - позволяет назначать права по полям.

Да, я его использую но он позволяет назначать только права CCK-полям, а права к стандартным полям там не изменить...

Аватар пользователя Dan Dan 20 января 2010 в 9:35

"Helen" wrote:
Да, я его использую но он позволяет назначать только права CCK-полям, а права к стандартным полям там не изменить...

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

Аватар пользователя Helen Helen 20 января 2010 в 9:36

"Freedom" wrote:
формат ввода иммено для этой страницы как убрать?

Где-то это уже было, посмотрите в поиске.


Я знаю только как убрать выбор формата ввода для определенных ролей, если оставить только один формат ввода форма для выбора пропадает, но тогда все равно выскакивает подсказка о настройках текущего формата ввода "подробнее о форматировании" и это не совсем решает проблемы, хотелось бы убрать эту опцию выбора формата только для определенного типа материала..

"Freedom" wrote:
Несовсем понял.

Ну..не важно... я использовала таксомонию для пробы.. но там можно выводить в списке только типы материалов со всеми полями, все равно сейчас переделаю все под Views Smile

Аватар пользователя Helen Helen 20 января 2010 в 9:41

ой..почему-то прошлое сообщение 2 раза выскочило...

"Dan" wrote:
Стандартных поля два всего - заголовок и тело. Тело можно убрать в настройках, заголовок скрыть модулем auto_nodetitle.

Спасибо) так и сделаю)

Аватар пользователя Freedom Freedom 20 января 2010 в 10:04

Вместо тело можно добавить сск поле для многострочного текста. У него вроде не выводит формат ввода.

Аватар пользователя Dan Dan 20 января 2010 в 12:06

"Helen" wrote:
но тогда все равно выскакивает подсказка о настройках текущего формата ввода "подробнее о форматировании" и это не совсем решает проблемы, хотелось бы убрать эту опцию выбора формата только для определенного типа материала..

Посмотрите [module=better_formats]

Аватар пользователя Helen Helen 20 января 2010 в 17:30

Freedom, Dan спасибо..

А вот ещё одна практическая проблема:
пользователи добавляют вопросы, а модераторы потом по каждому отправителю отвечают на эти вопросы
1) Можно ли сделать так чтобы модераторам не надо было заходить в редактирование содрежимого каждого материала (admin/content/node) и там добавлять ответ?
2) Можно ли сделать так чтобы модераторы могли фильтровать списки вопросов по адресату и по тому добавлен ответ или нет?

Аватар пользователя Helen Helen 21 января 2010 в 12:21

Да, с помощью него будет удобней сделать...

решила сделать так:
у модератора будет дополнительная ссылка в меню типо "добавить ответ" через которую он попадает на список вопросов, и при нажатии на ссылку каждого вопроса он пересылается на страницу материала, где и может отредактировать/добавить ответ.

но вот ещё вопросы
1) у всех, в том числе и простых пользователей будет возможносить посмотреть вопросы, на которые уже даны ответы (по ссылке "Ответы на вопросы" будет выводиться список вопросов с ответами). Так вот, можно ли с помощью views или какого-то дополнительного модуля сделать поиск по полю...т.е. чтобы пользователь мог ввести свою фамилию или номер сообщения и просмотреть ответ на свой вопрос?

да и для модератора в списке для добавления ответа, чтобы была не только сортировка (кот легко сделать в табличном виде Views), а фильтр по автору, дате сообщения и по тому был дан ответ или нет..

2) И вопрос по CCK наверно: После отпрвления сообщения (добавления нового материала) пользователю надо вывести окошко с номером его сообщения... не могу найти как это можно сделать...

Аватар пользователя Dan Dan 21 января 2010 в 13:25

1. всё тот же views. Агргументы, фильтры, внешние фильтры (exposed folters) - это поможет Вам Smile
2. Попробуйте Trigger (модуль из коробки) - добавьте новое действие "Показать сообщение" и повесьте на создание ноды действие "Display a message to the user", в тексте напишите что-то вроде: "Ссылка на Ваш вопрос: %node_url"

Аватар пользователя Helen Helen 21 января 2010 в 15:53

Dan, спасибо вам большое!

"Dan" wrote:
Попробуйте Trigger (модуль из коробки) - добавьте новое действие "Показать сообщение" и повесьте на создание ноды действие "Display a message to the user", в тексте напишите что-то вроде: "Ссылка на Ваш вопрос: %node_url"

А можно ли повесить это действие не на все, а только на создание опредленного типа материалов?
А ещё кроме этого нового там все равно всплывает стандартноее сообщение: "[мой_тип_материала] был создан." (

Аватар пользователя Dan Dan 21 января 2010 в 17:57

"Helen" wrote:
А можно ли повесить это действие не на все, а только на создание опредленного типа материалов?
А ещё кроме этого нового там все равно всплывает стандартноее сообщение: "[мой_тип_материала] был создан."

Не знаю, думаю что нет. Вам или писать самим или попробовать модуль Rules, надеюсь он справиться Smile

Аватар пользователя Helen Helen 22 января 2010 в 11:22

"Dan" wrote:
Вам или писать самим или попробовать модуль Rules, надеюсь он справиться :)

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

А ещё вопрос... а можно ли в Views вывести вместо поля чекбокс или слово, в зависимости пустое поле или нет... смысл такой:Если на вопрос дан откт у меня сейчас сделано что в списке выводится поле ответ полностью, но в списке сам ответ не нужен, надо вывести только надпись есть ответ или нет.. Это аргументами как то делается? не могу разобраться...

и еще, для получения адреса только что созданной ноды можно воспользоваться переменной %node_url, а можно ли как то узнать id этой новой ноды? ) ведь существует переменная $id? только как можно ей воспользоваться внешне не из php-кода )

Аватар пользователя Dan Dan 22 января 2010 в 11:52

"Helen" wrote:

  1. хотя как убрать вывод стандартного сообщение типо такой материал добавлен, кот появляется дополнительно с моим, я пока не догнала..
  2. а можно ли в Views вывести вместо поля чекбокс или слово, в зависимости пустое поле или нет
  3. и еще, для получения адреса только что созданной ноды можно воспользоваться переменной %node_url, а можно ли как то узнать id этой новой ноды? ) ведь существует переменная $id? только как можно ей воспользоваться внешне не из php-кода )

  1. Как убрать программно - знаю, а есть ли модули - не в курсе.
  2. Вам надо, по сути, проанализировать содержимое поля и на основании результата вывести какую-то информацию. Аргументы тут не помогут - Вам же не отфильтровать нужно. Посмотрите [module=views_customfield]
  3. Если nid нету в строке замены, то никак. Посмотрите, может у rules есть интеграция с token - тогда там куча шаблонов будет.
Аватар пользователя argon argon 22 января 2010 в 13:29

Иногда еще полезно попробовать для начала подробное тз написать на сервис. Часто в процессе написания многие вопросы отпадают, и многие новые появляются.

Аватар пользователя Helen Helen 22 января 2010 в 14:38

"argon" wrote:
Иногда еще полезно попробовать для начала подробное тз написать на сервис. Часто в процессе написания многие вопросы отпадают, и многие новые появляются

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

Аватар пользователя Helen Helen 22 января 2010 в 15:22

"Dan" wrote:
Вам надо, по сути, проанализировать содержимое поля и на основании результата вывести какую-то информацию. Аргументы тут не помогут - Вам же не отфильтровать нужно. Посмотрите views_customfield
Ой, там оказалось просто сделать без доп модулей, в views при настройке поля добавила Rewrite the output of this field: в случае когда есть ответ, и написала пустой текст в случае когда его нет)
"Dan" wrote:
Если nid нету в строке замены, то никак. Посмотрите, может у rules есть интеграция с token - тогда там куча шаблонов будет.

Есть ингеграция! но чтот у меня не получается... я поняла что при установке модуля там есть уже набор стандартных лексем, и если написать там где мне надо [nid] - должен вывестить на этом месте id текущей ноды... но ни в rules при формировании сообщения, ни в тригерс это не работает...

Аватар пользователя Dan Dan 22 января 2010 в 15:16

"Helen" wrote:
Ой, там оказалось просто сделать без доп модулей, в views при настройке поля добавила Rewrite the output of this field: в случае когда есть ответ, и написала пустой текст в случае когда его нет)

Да, точно, можно так. Ступил.

"Helen" wrote:
Есть ингеграция! но чтот у меня не получается...

Не подскажу - негде посмотреть. Пришло время почитать документацию Smile

Аватар пользователя Helen Helen 22 января 2010 в 16:39

"Dan" wrote:
Пришло время почитать документацию :)
Да, давно пора Smile А вообще я уже прочитала и это мне не помогло)) таких проблем не возникало ни у кого, что-то не так делаю... Не может быть проблема в том что я токен установила уже после rules? в общем разберусь)

"Dan" wrote:
Как убрать программно - знаю, а есть ли модули - не в курсе.

Я нашла что это сообщение добавляется в node.pages.inc но ведь проверку на тип созданного неправильно будет добавить прямо туда?

Аватар пользователя Dan Dan 23 января 2010 в 6:53

"Helen" wrote:
Я нашла что это сообщение добавляется в node.pages.inc но ведь проверку на тип созданного неправильно будет добавить прямо туда?

Неправильно. К тому же после очередного апгрейда, Вам надо будет не забыть это обновлять.
Если уж лезть в код, тогда можно отключить rules и написать пару строк в своём модуле Smile
Как-то так:

function ИМЯ-ВАШЕГО-МОДУЛЯ_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL){
  if($op == 'insert' && $node->type == 'ТИП-МАТЕРИАЛА'){
    // стираем текущие сообщения уровня 'status'
    drupal_get_messages('status',TRUE);
    // ставим своё, в котором есть nid Smile
    drupal_set_message('Материал создан. Его номер: '.$node->nid,'status');
  }
}
Аватар пользователя Helen Helen 25 января 2010 в 11:28

Спасибо!
Но так получается новое сообщения добавляется, все правильно, но старое не стирается.. вероятно функция, вызывающая сообщение "[ваш материал][заголовок] был создан" вызывается после nodeapi...
Я так поняла это делает функция submit? при отправке формы? но переопределение этой функции для материала моего типа тоже ничего не меняет...

function [ИМЯ-МОДУЛЯ]_form_submit($form, &$form_state) {
  $node = node_form_submit_build_node($form, $form_state);
  $insert = empty($node->nid);
  if ($insert && $node->type == '[ТИП-МАТЕРИАЛА]') {
    drupal_get_messages('status',TRUE);
  }
}
Аватар пользователя Dan Dan 25 января 2010 в 10:53

"Helen" wrote:
о переопределение этой функции для материала моего типа тоже ничего не меняет...

Нет, Вы её не переопределили. Но Вы правы, сообщение формируется после nodeapi. Красивого решение не вижу, вариант навскидку: в nodeapi в SESSION добавлять переменную-сообщение, а сами сообщения чистить и добавлять в препроцессинге страницы.
Например так:

function ИМЯ-ВАШЕГО-МОДУЛЯ_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL){
  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 Smile
    drupal_set_message($_SESSION['messages']['rewrite-status']);
    unset($_SESSION['messages']['rewrite-status']);
    $vars['messages'] = $vars['show_messages'] ? theme('status_messages') : '';
  }
}
Аватар пользователя Helen Helen 25 января 2010 в 11:10

"Dan" wrote:
вариант навскидку: в nodeapi в SESSION добавлять переменную-сообщение, а сами сообщения чистить и добавлять в препроцессинге страницы.

Интересно)... и вроде должно работать... но не работает! ) сообщение все равно добаляется! не может быть чтобы функция вызывалась позже preprocess_page?

Аватар пользователя Helen Helen 25 января 2010 в 12:41

Вместо сообщения из сессии добавляется кодированный вопросик (одна буковка)... но это не важно, у меня с кодировкой вероятно проблемы какие-то.. А потом выводится стандартное сообщение о созд нового материала

хм.. кодированное сообщение появляется почему-то просто когда пишу в сессию $_SESSION['messages']['rewrite-status'] = t(...); даже если потом его не добавляю в сообщение //drupal_set_message($_SESSION['messages']['rewrite-status']);

Аватар пользователя Helen Helen 25 января 2010 в 14:04

Работает! Dan, спасибо вам большое) Редко встретишь таких отзывчивых людей)
Вообще я в конце отошла от первоначальной темы, углубившись в детали, но может кому-то это тоже пригодиться, таким же начинающим как я)