Commerce програмный апдейт product-display

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

Аватар пользователя ХулиGUN ХулиGUN 17 мая 2013 в 23:49

Сегодня на одном из сайтов, где было настроено автоматическое создание product-display рулсами при сохранении нового продукта, было обнаружено, что в процессе эксплуатации сайта не ко всем продуктам добавлялись дисплеи(из-за слабого хостинга). Надо было это исправить в кротчайшие сроки, поэтому приведённый ниже код возможно несколько варварский и топорный, но всё же может кому сгодится:
Можно просто его выполнить а можно на будущее создать правило, например по крону
event -> cron
action -> php

<?php
$commerce_type 
"product";// Тип продукта commerce
$node_type "product_display"// Тип ноды(дисплей для продукта)
$commerce commerce_product_load_multiple(array(), array('type' => $commerce_type)); // Массив всех продуктов
$nodes node_load_multiple(array(), array('type' => $node_type));// Массив нод-дисплеев
$arr = array(); // Пустой массив
foreach($nodes as $node){
  
$arr[] = $node->field_produkt['und'][0]['product_id'];// Получаем массив идентификаторов продуктов, которые есть в дисплеях
}
foreach(
$commerce as $item){ // Проходимся в цикле по продуктам
  
if(array_search($item->product_id$arr)){} 
  else{                      
// Если нет совпадения, то...
    
$node = new stdClass();  // ...создаём новую ноду-дисплей, где...
    
$node->type $node_type;//тип ноды-дисплея
    
$node->title $item->title//Заголовок (я беру из заголовка самого продукта)
    
$node->language LANGUAGE_NONE// Отношение к языку
    
$node->uid 1// uid автора
    
$node->status 1// Опубликовано или нет
    
$node->promote 0// Помещать на главную или нет
    
$node->field_produkt['und'][0]['value'] = $item->product_id// Зачение поля-отношения к продукту (у меня машинное поле называется 'field_produkt', у Вас может быть что-то другое)
    
node_save($node); // Сохраняем ноду
   
}    
}
?>