ВопросКак к комментарию прикрепить форму, так чтобы эта форма относилась к конкретному комментарию
Всем привет.
Необходимо решить следующее. В кастомном модуле я создал форму в которой есть текстовое поле и кнопка Отправить. Сделал для формы функции валидации и сабмита, затем запихнул данную форму в переменную 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
- 14.10.2013
- 5408
Комментарии
Прошу прощения, поправлю предложение "Мне нужно отправлять email на адрес пользователя который оставил при создании бригады(нода) а затем прокомментаровал заявку в которой и есть наша форма отправки Email ".
Вам для этого не обязательно даже кодить. Посмотрите видеоурок http://nodeone.se/en/notify-author-of-comments. Если я правильно понял, вам надо сделать именно это.
Спасибо за урок пригодится) но у меня следующая задача. Есть список бригад(нод) и заявки(тоже нода), в бригаде заполняется поле email.
Так вот когда пользователь(который создал бригаду(ы)) комментит заявку, нужно прикреплять к комментарию этой заявки в текстовое поле формы comment_email_form_form идентификатор бригады(ноды) или комментария по которому я уже вытащу email адрес который будет просто хранится в текстовом поле email в форме comment_email_form_form которая находится в comment.tpl.php которую я создал ранее.
По идее всё что мне нужно это идентифицировать комментарий с текстовым полем формы.
У объекта $comment есть поле нид - ноды, к которой коммент оставлен. Просто сделайте так:
После чего обратитесь к полю ноды и получите nid вашего списка бригад. Потом снова загрузите эту ноду, и уже обратитесь к полю загруженного объекта для получения емейла.
я уже так делал, но я получу тогда везде один email, во всех текстовых полях будет email бригады последнего пользователя.
если бы я мог как-то форму в preprocess изменять, там есть идентификатор комментария по которому я мог бы сделать проверку и привязать к каждому полю свой емейл адрес, но как это сделать я не знаю уже 3-4 дня голову ломаю =\
Если честно, до сих пор не до конца понимаю задачу. Вы сказали, что надо отправлять письма на емейл, который указан в бригаде, которая привязана к заявке. Откуда тогда берётся динамический емейл?
Смотрите, изначально пользователь под ролью Бригада создает бригаду(ноду) в ней указывает емейл адрес, затем пользователь под ролью Клиент создает заявку(так-же нода) и отправляет емейл с ссылкой на заявку избранным бригадам(этот функционал я уже сделал), после бригада прикрепляет с помощью комментариев файл сметы, где ниже заявки они публикуются после премодерации эти файлы сметы, скрытое текстовое поле емейла этой бригады и кнопка отправить итак от разных бригад которые оставили комментарий, так и вот если пользователю понравилась та или иная бригада по расценкам из сметы, то он отправляет им емейл с ссылкой на подписку для заявки, тем самым заключая договор о сотрудничестве.
Может мы по скайпу голосом лучше?) так я смогу вам обьяснить что я хочу лучше
Комментировать