Делаю загрузку товаров из 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 со значением?
Комментарии
Юзайте Entity api.
Вот это что-ли : $ewrapper->field_my_entity_ref->set(intval($ref_nid));
Т.е. метод entity_create() может создать любую "сущность", в частности ноду. А метод entity_metadata_wrapper() он нужен чтобы поля указывать у этой сущности так? Вообще я изначально создаю taxonomy_term, потом создаю node с привязкой к taxonomy_term. Т.е. категорию и товар создать и связать получается, а вот дальше надо создать свойство и привязать к товару. Entity api, я так понял просто более универсальный способ создавать node, ткните носом где идет привязка node к field ?
Ну кто-нибудь проясните мне как в drupal устроено!
Да, вы верно написали.
Для создания ноды и привязки её к термину достаточно этого кода:
<?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
?>