[Решено] Поле ввода индивидуальных значений пользователями, для материала

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

Аватар пользователя molp molp 25 июня 2016 в 21:09

Предложите пожалуйста вариант реализации следующей задачи.

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

Все значения введенные пользователями должны отображаться в данной ноде списком.
Поле желательно editable чтобы не было необходимости заходить на страницу редактирования материала.

Комментарии

Аватар пользователя bumble bumble 26 июня 2016 в 17:55
2

molp wrote:

Предложите пожалуйста вариант реализации следующей задачи.

  • Создать таблицу в БД с UID и текстовым полем. Туда писать "ответы".
  • Создать AJAX-форму для записи/вывода ответов текущего пользователя.
  • Добавить EXTRA-поле на их вывод к материалу.
Аватар пользователя molp molp 27 июня 2016 в 11:33

Большое спасибо.
Первый раз сам пишу модуль, по этому не все понятно.

Было решено отказаться от поля в самой ноде и выводить форму в блоке.
Создаю в БД поля uid, nid и value.
На данный момент при отправке данных, для каждой ноды создается отдельная строка.
По условию задачи, для каждого пользователя может быть только одна строка с данными nid, value, которые были добавлены последними.
Подскажите как сделать перезапись данных?

Мой код (mymodule.module)

<?php
/**
 * Обработка отправки формы
 */
function MYMODULE_form_submit($form, &$form_state) {
    
//dpm($form_state);

    

global $user;

    if ( 

arg(0) == 'node' && is_numeric(arg(1)) ) {
        
$nodeid arg(1);
    }

    

$values = array(
        
'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();

    

drupal_set_message($message t('Inputed data was saved in DB'), $type 'status'$repeat FALSE);
}
?>

Если я правильно понимаю, то должно быть чтото вроде

<?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();
    }
?>
Аватар пользователя gun_dose gun_dose 27 июня 2016 в 9:29
1

Перезапись данных через db_update. А вообще, посмотрите вот здесь: http://xandeadx.ru/blog/drupal/88 наверняка найдёте ответы на большинство вопросов.

PS: есть вариант совсем без кодинга - сделать вебформу, дать юзерам права на просмотр сабмишнов и вывести вьюс с сабмишнами сразу под нодой. Но через свой модуль будет работать значительно быстрее, можно ещё всё это дело завернуть в ajax и будет вообще красота.