ВопросКак к комментарию прикрепить форму, так чтобы эта форма относилась к конкретному комментарию

Всем привет.
Необходимо решить следующее. В кастомном модуле я создал форму в которой есть текстовое поле и кнопка Отправить. Сделал для формы функции валидации и сабмита, затем запихнул данную форму в переменную template_preprocess_comment и вывел в шаблоне comment.tpl.php
Мой код:

<?php
/**
 * Реализация template_preprocess_comment()
 **/
function comment_email_form_preprocess_comment(&$variables){
	$variables['email_form'] = drupal_render(drupal_get_form('comment_email_form_form'));
	//dsm($variables);
}
/**
 * Создаем форму, которая будет хранить данные email адресов бригад и отправлять письмо.
 **/
function comment_email_form_form($form, $form_state){
$query = db_select('comment', 'c')
	->fields('c', array('cid', 'nid'));
$result = $query->execute();
$comments = array();
foreach($result as $value){
	$comments[$value->cid] = comment_load($value->cid);
}
	 dsm($comments);
  $form['email'] = array(
    '#type' => 'textfield',
    '#access' => TRUE,
    '#default_value' => $comments[$value->cid]->brigade_select['und'][0]['value'], // ???
    '#required' => TRUE,
  );
 
  $form['actions']['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Send'),
  );
  $form['#validate'][] = 'comment_email_form_validate';
  $form['#submit'][] = 'comment_email_form_submit';
  $form_state['rebuild'] = TRUE;
  return $form;
}
function comment_email_form_validate($form, &$form_state) {
  $form_state['rebuild'] = TRUE;
  $valid_email = $form_state['values']['email'];
  /*if (!valid_email_address($valid_email)) {
  form_set_error('email', 'Sorry. Your email address,' . $valid_email . ', is not valid. Please submit a valid E-mail address.');
  }*/
}
function comment_email_form_mail($key, &$message, $params) {
if($key == 'some_mail_key'){
  $headers = array(
    'MIME-Version' => '1.0',
    'Content-Type' => 'text/html; charset=UTF-8;',
    'Content-Transfer-Encoding' => '8Bit',
    'X-Mailer' => 'Drupal'
  );
 
  foreach ($headers as $key => $value) {
    $message['headers'][$key] = $value;
  }
 
  $message['subject'] = $params['subject'];
  $message['body'] = $params['body'];
  }
}
 
function comment_email_form_submit($form, &$form_state) {
	$valid_email = $form_state['values']['email'];
    $from = 'noreply@example.com';
    $body[] = 'Email: '.$valid_email.'<br />URL: '.request_uri().'Вот такое вот хаха :0';
    $to = $valid_email; // Set this email address - emails will be sent to this email address! 
    $params = array(
    'body' => $body,
    'subject' => 'Website Information Request',
    );
 
    if (drupal_mail('comment_email_form', 'some_mail_key', $to, language_default(), $params, $from, TRUE))
    {
        drupal_set_message(t('Thank you for writing team has been sent successfully. Please wait for further instructions.'));     
    } else {
        drupal_set_message(t('Error sending e-mail. Please try again later'));
    }
}

Судя по коду уже можно увидеть какая основная задача модуля, мне нужно отправлять email на адрес пользователя который оставил комментарий при создании бригады(нода). Проблема в том, что я не знаю как мне прицепить email адрес пользователя к текстовому полю по умолчанию. Нужно как-то привязать форму к самому комментарию.

Комментарии

Аватар пользователя HarryAscent
HarryAscent написал:

Прошу прощения, поправлю предложение "Мне нужно отправлять email на адрес пользователя который оставил при создании бригады(нода) а затем прокомментаровал заявку в которой и есть наша форма отправки Email ".

14.10.2013 17:47
Аватар пользователя Spleshka
Spleshka написал:

Вам для этого не обязательно даже кодить. Посмотрите видеоурок http://nodeone.se/en/notify-author-of-comments. Если я правильно понял, вам надо сделать именно это.

14.10.2013 18:54
Аватар пользователя HarryAscent
HarryAscent написал:

Спасибо за урок пригодится) но у меня следующая задача. Есть список бригад(нод) и заявки(тоже нода), в бригаде заполняется поле email.
Так вот когда пользователь(который создал бригаду(ы)) комментит заявку, нужно прикреплять к комментарию этой заявки в текстовое поле формы comment_email_form_form идентификатор бригады(ноды) или комментария по которому я уже вытащу email адрес который будет просто хранится в текстовом поле email в форме comment_email_form_form которая находится в comment.tpl.php которую я создал ранее.
По идее всё что мне нужно это идентифицировать комментарий с текстовым полем формы.

14.10.2013 19:20
Аватар пользователя Spleshka
Spleshka написал:

У объекта $comment есть поле нид - ноды, к которой коммент оставлен. Просто сделайте так:

// Получаем заявку.
$node = node_load($comment->nid);

После чего обратитесь к полю ноды и получите nid вашего списка бригад. Потом снова загрузите эту ноду, и уже обратитесь к полю загруженного объекта для получения емейла.

14.10.2013 20:26
Аватар пользователя HarryAscent
HarryAscent написал:

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

14.10.2013 20:39
Аватар пользователя HarryAscent
HarryAscent написал:

если бы я мог как-то форму в preprocess изменять, там есть идентификатор комментария по которому я мог бы сделать проверку и привязать к каждому полю свой емейл адрес, но как это сделать я не знаю уже 3-4 дня голову ломаю =\

14.10.2013 20:43
Аватар пользователя Spleshka
Spleshka написал:

Если честно, до сих пор не до конца понимаю задачу. Вы сказали, что надо отправлять письма на емейл, который указан в бригаде, которая привязана к заявке. Откуда тогда берётся динамический емейл?

15.10.2013 10:28
Аватар пользователя HarryAscent
HarryAscent написал:

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

15.10.2013 10:41
Аватар пользователя HarryAscent
HarryAscent написал:

Может мы по скайпу голосом лучше?) так я смогу вам обьяснить что я хочу лучше

15.10.2013 16:33

Комментировать