Как программно создавать поля и привязывать их со значением к ноде?

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

Аватар пользователя i3bepb i3bepb 11 июля 2014 в 12:34

Делаю загрузку товаров из xml, для этого пишу свой модуль по выгрузке. Каталог: категории - taxonomy, товары - node, свойства товаров - fields. Вообщем как-то так, нашел как программно создавать taxonomy и node, т.е. создаю категорию, создаю товар, а вот как сделать fields(свойства) и привязать их к товарам? На данный момент нашел вот такой код:

<?php
            $fn 
'a_' $v2->property_id;
            if(!(
$field field_info_field($fn))) {
                
$field = array(
                    
'field_name'   => $fn,
                    
'type'         => 'text',
                    
'cardinality'  => 1,
                    
'settings'     => array(),
                    
'entity_types' => array('node''product'),
                );
                
field_create_field($field);
            }
            if(!(
$field field_info_instance('product'$fn'product'))) {
                
$instance = array(
                    
'field_name'  => $fn,
                    
'entity_type' => 'product'// указываем сущность к которой будет относится экземляр поля
                    
'label'       => $v2->property_name,
                    
'bundle'      => 'product',
                    
'type'        => 'text',
                    
'widget'      => array('type' => 'text_textfield'),
                );
                
field_create_instance($instance);
            }
?>

Т.е. он создает field, но как его теперь привязать к конкретному node со значением?

Комментарии

Аватар пользователя i3bepb i3bepb 11 июля 2014 в 14:01

Т.е. метод entity_create() может создать любую "сущность", в частности ноду. А метод entity_metadata_wrapper() он нужен чтобы поля указывать у этой сущности так? Вообще я изначально создаю taxonomy_term, потом создаю node с привязкой к taxonomy_term. Т.е. категорию и товар создать и связать получается, а вот дальше надо создать свойство и привязать к товару. Entity api, я так понял просто более универсальный способ создавать node, ткните носом где идет привязка node к field ?

Аватар пользователя mbaev mbaev 12 июля 2014 в 17:20

"i3bepb" wrote:
Вот это что-ли

Да, вы верно написали.
Для создания ноды и привязки её к термину достаточно этого кода:

<?php
global $user;
$values = array(
  
'type' => 'node_type',
  
'uid' => $user->uid,
  
'status' => 1,
  
'comment' => 1,
  
'promote' => 0,
);
$entity entity_create('node'$values);
$ewrapper entity_metadata_wrapper('node'$entity);
$ewrapper->title->set('New title');
$ewrapper->field_my_field->set('My custom value');
$ewrapper->field_my_taxonomy_term_field->set($termId 10/* for example */); // this is our taxonomy term id
$ewrapper->save(); // save changed node
?>