Создание ноды из параметров POST запроса

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

Аватар пользователя andreystrelkov andreystrelkov 31 декабря 2014 в 19:00

Добрый день, прошу помощи товарищи.
Попробую по частям спросить

Имеется тип материала - ОТЧЁТ
в котором есть дополнительные Text поля: SUMMA и IMYA

Есть сторонний сервис, который может на определённый путь сайт посылать POST запрос типа x-www-form-urlencoded
со следующими параметрами
NAZVANIE = TESTOVYI OTCHET
SUMMA = 100
IMYA = PETROV IVAN

задача при получении данного запроса, сайт должен создать ноду для типа материала ОТЧЁТ
в которой заполнить дефолтные поля, такие как title, body, и т.п. ну т.е собственно как у xandeadx в примере

$node = new stdClass();
$node->type = 'story';
node_object_prepare($node);
$node->title = 'Заголовок ноды';
$node->language = LANGUAGE_NONE;
$node->body[LANGUAGE_NONE][0]['value'] = 'Содержание ноды';
$node->body[LANGUAGE_NONE][0]['summary'] = 'Текст анонса';
$node->body[LANGUAGE_NONE][0]['format'] = 'filtered_html';
$node->uid = 1; // необязательно
$node->status = 1; // необязательно
$node->promote = 1; // необязательно
node_save($node);

только title назвать из параметра NAZVANIE
и дополнительные поля SUMMA и IMYA тоже из параметров

Как это реализовать? получается нужно написать PHP код который сможет разобрать по параметрам POST запрос, а потом из полученных переменных по примеру выше создать ноду

Это был первый вопрос

Комментарии

Аватар пользователя andreystrelkov andreystrelkov 31 декабря 2014 в 20:45

Наверное в том. что я не до конца понимаю что такое хуки в Drupal-е, наверное это какие то предпроцессы в коде, которые могут выполняться в определённом месте.
Вот например следующий код читает весь POST запрос и пишет его в файл

<?php
$fp=fopen('text.txt','a');
foreach ($_POST AS $field => $value)
{
fwrite($fp,"$field = $value");
}
?>

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

Аватар пользователя andreystrelkov andreystrelkov 31 декабря 2014 в 22:01

Погуглил, немного почитал, решил попробовать сделать микромодуль, сделал небольшой код в нём без всяких стандартов оформления

<?php

function my_module_menu() {
$items = array();
$items['my-page'] = array (
'title' => 'My page',
'page callback' => 'my_first_page',
'access callback' => TRUE
);

return $items;
}

function my_first_page() {

foreach ($_POST as $id=>$value)
{
Print(" $id = $value
");
}
}

Основную часть инициализации модуля взял с урока Drupalguide, позже до конца разберусь что где зачем, и надо ли мне это

в итоге моя страница созданная возращает сейчас параметры посланные POST-ом
а именно

notification_type = card-incoming
operation_id = 473290786557087012
amount = 0.98
currency = 643
datetime = 2014-12-30T21:39:46Z
sender =
codepro = false
label = test
sha1_hash = 1d21d2e0c556406a0d61e1cc72a0dfcba155e308

Скажите кто нибудь пожалуйста, что нужно в коде дописать чтобы все название id стали переменные под тем же именем, для того чтобы их дальше использовать в процессе программного создания ноды (т.е. $notification_type $operation_id $amount и т.д.)

Аватар пользователя andreystrelkov andreystrelkov 31 декабря 2014 в 22:16

Спасибо, намекните пожалуйста, как всё же название параметра полученного обозначить новой переменной со значением из запроса

$notification_type
$operation_id
$amount
$currency
$datetime
$sender
$codepro
$label
$sha1_hash

Аватар пользователя andreystrelkov andreystrelkov 31 декабря 2014 в 22:27

Хм, похоже выдрать можно таким образом
$_POST["amount"];

------------

Всё, вроде как более менее разобрался, один вопрос, использую код выше (Создание ноды) могу ли я в нём заполнить значение дополнительно созданных полей?

у меня есть текстовое поле sha1, в интерфейсе его полное имя field_sha1
пробовал вставлять
$node->sha1 = "aaaa";
$node->field_sha1 = "aaaa";

не заполняет :/