node_save () не работает при программном создании узла - PullRequest
0 голосов
/ 21 сентября 2018

Я пытаюсь создать узел программно, например, так:

$newNode = (object) NULL;
$newNode->type = 'job';
$newNode->title = $data['JobTitle'];
$newNode->uid = $user->uid;
$newNode->created = strtotime("now");
$newNode->changed = strtotime("now");
$newNode->status = 1;
$newNode->comment = 0;
$newNode->promote = 0;
$newNode->moderate = 0;
$newNode->sticky = 0;
$newNode->tid = 0;

$newNode->summary['und'][0]['value'] = $data['JobSummary'];
$newNode->body['und'][0]['value'] = $data['JobDescription'];
$newNode->field_employment_type['und'] = strtolower($data['JobType']);
$newNode->field_job_reference['und'][0]['value'] = $data['JobReference'];
$newNode->field_salary['und'][0]['value'] = "";
$newNode->field_salary_from['und'][0]['value'] = $data['SalaryFrom'];
$newNode->field_salary_to['und'][0]['value'] = $data['SalaryTo'];
$newNode->field_salary_override['und'][0]['value'] = $data['Salary'];
$newNode->field_application_email['und'][0]['value'] = $data['ApplicationEmail'];
$newNode->field_job_category['und'][2] = 2;
$newNode->field_job_category['und'][4] = 4;

//die(print_r($newNode));
// save node
node_save($newNode);

Здесь у меня есть потенциально 4 таксономии для выбора (их идентификатор указан в скобках) Creative (2), Technical (3), Marketing(4), Службы клиента (6).

В файле node_save я получаю следующую ошибку:

500 Внутренняя ошибка сервера: произошла ошибка (23000): SQLSTATE [23000]: Нарушение ограничения целостности: 1048 Столбец 'tid' не может быть нулевым

Как мне преодолеть это, я подумал бы, что установки field_job_category в качестве идентификатора таксономии будет достаточно?

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Если вы хотите, чтобы ассоциировался только один идентификатор термина:

$newNode->field_category[LANGUAGE_NONE][0]['tid'] = <actual term id>

Если вам нужно связать несколько идентификаторов терминов: переберите свой массив идентификаторов терминов и индекс приращения.Примерно так:

$newNode->field_category[LANGUAGE_NONE][0]['tid'] = <actual term id>
$newNode->field_category[LANGUAGE_NONE][1]['tid'] = <actual term id>
$newNode->field_category[LANGUAGE_NONE][2]['tid'] = <actual term id>

Обратите внимание на значения индекса выше.

И я обычно устанавливаю следующие атрибуты, установленные для нового узла:

0 голосов
/ 21 сентября 2018

Удалить $newNode->tid = 0; и подготовить объект:

$newNode = new stdClass();
$newNode->type = 'job';

node_object_prepare($node);

$newNode->title = $data['JobTitle'];
$newNode->uid = $user->uid;
$newNode->created = strtotime("now");
$newNode->changed = strtotime("now");
$newNode->status = 1;
$newNode->comment = 0;
$newNode->promote = 0;
$newNode->moderate = 0;
$newNode->sticky = 0;

$newNode->summary['und'][0]['value'] = $data['JobSummary'];
$newNode->body['und'][0]['value'] = $data['JobDescription'];
$newNode->field_employment_type['und'] = strtolower($data['JobType']);
$newNode->field_job_reference['und'][0]['value'] = $data['JobReference'];
$newNode->field_salary['und'][0]['value'] = "";
$newNode->field_salary_from['und'][0]['value'] = $data['SalaryFrom'];
$newNode->field_salary_to['und'][0]['value'] = $data['SalaryTo'];
$newNode->field_salary_override['und'][0]['value'] = $data['Salary'];
$newNode->field_application_email['und'][0]['value'] = $data['ApplicationEmail'];
$newNode->field_job_category['und'][]['tid'] = 2; // right syntax
$newNode->field_job_category['und'][]['tid']= 4;  // right syntax

//die(print_r($newNode));
// save node
node_save($newNode);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...