Программно создать ноду одного типа после создания другой

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

Аватар пользователя Anodo Anodo 24 января 2019 в 17:15

Здравствуйте!

Не могу решить задачу, поставленную в заголовке

Пытаюсь сделать так, чтобы после создания basic page программно создавалась статья article.
Пользуюсь хуком hook_node_insert();
Код модуля:

<?php
function mymodule_node_insert ($node) {
if (
$node->type 'page') {
  
$my_node = new stdClass();
  
$my_node->type 'article';
  
node_object_prepare($my_node);
  
$my_node->title 'Title';
  
$my_node->language LANGUAGE_NONE;
  
$my_node->body[LANGUAGE_NONE][0]['value'] = 'content';
  
$my_node->body[LANGUAGE_NONE][0]['summary'] = 'anons';
  
$my_node->body[LANGUAGE_NONE][0]['format'] = 'filtered_html';
  
$my_node->uid 1;     // необязательно
  
$my_node->status 1;  // необязательно
  
$my_node->promote 1// необязательно

  

node_save($my_node);
}
?>

В итоге при добавлении любого типа материала сайт зависает или хостинг возвращает "Ошибка 502. Сайт временно недоступен."
В чем косяк, почему он зацикливается?

Комментарии

Аватар пользователя gun_dose gun_dose 25 января 2019 в 10:12
1

<a href="mailto:sas@drupal.org">sas@drupal.org</a> wrote:

Потому что не

if ($node->type = 'page') {

а

if ($node->type == 'page') {


А ещё лучше

<?php
if ($node->type === 'page') {
?>

Т.к. проверка на строгое равенство выполняется без приведения типа, соответственно просит меньше ресурсов.

Anodo wrote:

 $my_node->body[LANGUAGE_NONE][0]['value'] = 'content';
  
$my_node->body[LANGUAGE_NONE][0]['summary'] = 'anons';
  
$my_node->body[LANGUAGE_NONE][0]['format'] = 'filtered_html';

Перед этим лучше поставить

<?php
  $my_node
->body = array();
?>

чтобы избежать возможных варнингов в журнале.

Аватар пользователя fairrandir fairrandir 25 января 2019 в 11:11
1

gun_dose wrote:

А ещё лучше

<span style="color: #000000"><span style="color: #0000BB">&lt;?php<br></span><span style="color: #007700">if&nbsp;(</span><span style="color: #0000BB">$node</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">type&nbsp;</span><span style="color: #007700">===&nbsp;</span><span style="color: #DD0000">'page'</span><span style="color: #007700">)&nbsp;{<br></span><span style="color: #0000BB">?&gt;</span></span>


А ещё лучше

<?php
if ('page' === $node->type) {
?>

так называемые условия Йоды