[Решено] Поле ввода индивидуальных значений пользователями, для материала
25 июня 2016 в 21:09
Предложите пожалуйста вариант реализации следующей задачи.
Требуется для типа материала добавить поле, в которое каждый пользователь сможет вводить какое то свое содержание.
Смысл в том чтобы пользователи могли для материала указать какое то значение в конкретный момент времени и при необходимости изменить его на новое.
Все значения введенные пользователями должны отображаться в данной ноде списком.
Поле желательно editable чтобы не было необходимости заходить на страницу редактирования материала.
- Блог
- Войдите или зарегистрируйтесь, чтобы отправлять комментарии
Комментарии
Большое спасибо.
Первый раз сам пишу модуль, по этому не все понятно.
Было решено отказаться от поля в самой ноде и выводить форму в блоке.
Создаю в БД поля uid, nid и value.
На данный момент при отправке данных, для каждой ноды создается отдельная строка.
По условию задачи, для каждого пользователя может быть только одна строка с данными nid, value, которые были добавлены последними.
Подскажите как сделать перезапись данных?
Мой код (mymodule.module)
<?php
global $user;
$values = array(
drupal_set_message($message = t('Inputed data was saved in DB'), $type = 'status', $repeat = FALSE);
/**
* Обработка отправки формы
*/
function MYMODULE_form_submit($form, &$form_state) {
//dpm($form_state);
if (
arg(0) == 'node' && is_numeric(arg(1)) ) {$nodeid = arg(1);
}
'uid' => $user->uid,
'nid' => $nodeid,
'value' => $form_state['values']['value'],
);
$insert = db_insert('values') -> fields(array(
'uid' => $values['uid'],
'nid' => $values['nid'],
'value' => $values['value'],
)) -> execute();
}
?>
Если я правильно понимаю, то должно быть чтото вроде
<?php
$curr_user
= $user->uid;$uid = db_query("SELECT uid FROM values") -> fetchAll();
if (
$uid == NULL ) { // если у пользователя nid пустое то (запись производиться один раз для нового пользователя)db_insert('values') -> fields(array(
'uid' => $user->uid,
'nid' => $nodeid,
'value' => $form_state['values']['value'],
)) -> execute();
} else {
db_update('values') -> fields(array(
'nid' => $values['nid'],
'value' => $values['value'],
) ->condition('uid', $curr_user) -> execute();
}
?>
Перезапись данных через db_update. А вообще, посмотрите вот здесь: http://xandeadx.ru/blog/drupal/88 наверняка найдёте ответы на большинство вопросов.
PS: есть вариант совсем без кодинга - сделать вебформу, дать юзерам права на просмотр сабмишнов и вывести вьюс с сабмишнами сразу под нодой. Но через свой модуль будет работать значительно быстрее, можно ещё всё это дело завернуть в ajax и будет вообще красота.
Есть db_merge.
Все работает, всем спасибо!