Всем привет.
Мне необходимо решить следующее. В кастомном модуле я создал форму в которой есть текстовое поле и кнопка Отправить. Сделал для формы функции валидации и сабмита, затем запихнул данную форму в переменную 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. Проблема в том, что я не знаю как мне прицепить email адрес пользователя к текстовому полю по умолчанию. Нужно как-то привязать форму к самому комментарию.
Комментарии
Я не спец в пхп к сожалению, но сюдя по Вашему описанию всё можно запилить штатными средствами.
Если бы можно было я бы сделал) увы но нет, мне нужно привязать идентификатор ноды или комментария к кастомному полю формы которое я создал в этом модуле, который выше описан
Не стал вглядываться в код, прочитал то что ниже. Мыло
global $user;
$user->email;
//если тянуть с автора ноды
$user = user_load($node->uid)
$user->email;
И главный вопрос - средствами [module=rules] нельзя запилить,
Смотрите, изначально пользователь под ролью Бригада создает бригаду(ноду) в ней указывает емейл адрес, затем пользователь под ролью Клиент создает заявку(так-же нода) и отправляет емейл с ссылкой на заявку избранным бригадам(этот функционал я уже сделал), после бригада прикрепляет с помощью комментариев файл сметы, где ниже заявки они публикуются после премодерации эти файлы сметы, скрытое текстовое поле емейла этой бригады и кнопка отправить итак от разных бригад которые оставили комментарий, так и вот если пользователю понравилась та или иная бригада по расценкам из сметы, то он отправляет им емейл с ссылкой на подписку для заявки, тем самым заключая договор о сотрудничестве.
По средствами Rules я смогу сделать отправку после создания, обновления или просмотра комментария, но не постоянную кнопку отправить для клиента.
http://www.drupal.ru/node/70738
спасибо, но данное решение мне не подходит