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

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

Аватар пользователя NX-74205 NX-74205 22 декабря 2009 в 7:21

Требуется:
При нажатии на кнопку, чтобы создавался, определенный тип материала, и пользователю отсылалось личное сообщение. Каким образом это реализовать, или может быть существуют готовые модули для этих целей, премного благодарен за любую помощь.

Комментарии

Аватар пользователя sadmin sadmin 22 декабря 2009 в 9:18

Делаете скрытую форму с заполненными полями по вкусу, потом по submit создаете ноду и прикручиваете сообщение (через свою систему или через мессаге модуль).
Для примера советую посмотреть как генерирует контент модуль devel - там есть функция генерировать контент, так вот ее реализация это и есть ответ на ваш вопрос.
Посмотрите файл devel_generate.inc, функцию devel_generate_content_add_node(&$results)
Кстати форму можно в этом случае делать и без полей, в общем удачи в эксперименте)

Аватар пользователя NX-74205 NX-74205 23 декабря 2009 в 16:20

Есть какой то тип материала, созданный каким то пользователем. Допустим у пользователя uid = 78
В теле материала есть кнопка "связаться" (с пользователем). По ее нажатию происходит создание типа материала "Чат" и пользователю на материале которого была нажата эта кнопка отсылается приглашение в чат.
sadmin каким образом делать скрытую форму? Буду очень благодарен за ссылки на информацию. *ушёл гуглить*

Аватар пользователя sadmin sadmin 24 декабря 2009 в 9:17

"NX-74205" wrote:
По ее нажатию происходит создание типа материала "Чат" и пользователю на материале которого была нажата эта кнопка отсылается приглашение в чат.

Что-то тут не логично, по-моему. Создавать тип материала при каждом обращении, это же сколько типов будет.

Нcсчет скрытой формы - смотрите API (Input со свойством hidden)

Аватар пользователя NX-74205 NX-74205 24 декабря 2009 в 19:09

Quote:
потом по submit создаете ноду

Как? создавать ноду по сабмиту?

нашел в апи такое вот

<?php// Create a new node
$form_state = array();
module_load_include('inc', 'node', 'node.pages');
$node = array('type' => 'story');
$form_state['values']['title'] = 'My node';
$form_state['values']['body'] = 'This is the body text!';
$form_state['values']['name'] = 'robo-user';
$form_state['values']['op'] = t('Save');
drupal_form_submit('story_node_form', $form_state, (object)$node);?>

размещаю этот код в PHP файле который расположен в корне сайта, к которому по сабпиту происходит обращение.... ничего не происходит.

Аватар пользователя Dan Dan 25 декабря 2009 в 7:01

Программное создание ноды:
<?php
module_load_include('inc', 'node', 'node.pages');
$node_form_state = array();
global $user;
$node = array('type' => 'story');
$node_form_state['values']['title'] = 'My node';
$node_form_state['values']['field_some_cck_field'][0]['value'] = '12345';
//$node_form_state['values']['name'] = $user->uid? $user->name : 'Гость';
$node_form_state['values']['op'] = t('Save');
drupal_execute('story_node_form', $node_form_state, (object)$node);
?>
То есть то же что и у вас, только drupal_execute, что правильней.

Аватар пользователя NX-74205 NX-74205 26 декабря 2009 в 9:21

Спасибо, то что надо, все работает.
Возник еще один вопрос. А как перенаправить пользователя автоматом на созданную ноду?

Аватар пользователя Dan Dan 26 декабря 2009 в 15:34

Это не правильно. Смотрите $node_form_state, может там есть nid. Но вообще странно - в $node должно быть...

Аватар пользователя NX-74205 NX-74205 26 декабря 2009 в 19:02

$node->nid возвращает пустое значение...
с одной стороны удивительно.. с другой, код во отдельном php скрипте, и может быть $node->nid содержит nid как раз для него.. то есть null

Аватар пользователя NX-74205 NX-74205 26 декабря 2009 в 19:40

Так, с этим разобрался

<?php  $node node_load(array('nid' => $node_form_state['nid']));
  
drupal_goto("node/$node->nid");
?>

Теперь как бы, отправить сообщение пользователю, с помощью модуля private message после создания этой страницы...

Аватар пользователя Dan Dan 26 декабря 2009 в 21:40

Это что за изврат?!
Вот так:
<?php
drupal_goto("node/{$node_form_state['nid']}");
или
drupal_goto('node/'.$node_form_state['nid']);
?>
(зачем делать лишнюю загрузку ноды, если нужет просто её номер, который и так есть!)
PrivateMessage посмотри код модуля там наверняка будет ф-ция отправки сообщения.

Аватар пользователя NX-74205 NX-74205 27 декабря 2009 в 15:44

Отправку сообщения решил проше, и в моем случае даже лучше. место отправки ЛС, я отправляю емаил

<?php$subject = "Приглашение в чат на example.com";
$message = "Вас приглашать пользователь $name2 в чат. Чтобы перейти к чату, вы можете пройти по cсылке example.com/node/{$node_form_state['nid']}";
$from = db_result(db_query("SELECT mail FROM {users} where uid = $id2"));
$to = db_result(db_query("SELECT mail FROM {users} where uid = $id1"));
mail($to, $subject, $message, $from);?>