Предложите пожалуйста вариант реализации следующей задачи.
Требуется для типа материала добавить поле, в которое каждый пользователь сможет вводить какое то свое содержание.
Смысл в том чтобы пользователи могли для материала указать какое то значение в конкретный момент времени и при необходимости изменить его на новое.
Все значения введенные пользователями должны отображаться в данной ноде списком.
Поле желательно 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.
Все работает, всем спасибо!