Программно изменить значение поля ноды Drupal 7 без node_save и node_load

// Программно изменить поле ноды без node_load и node_save o_O
function set__und ($nid, $type = 'split_sistemy_kondicionery', $field, $value, $key_value = 'value', $i = 0, $und = 'und'){
    $node = (object)array(
      'nid' => $nid,
      'type' => $type,
    );
    
    $node->{$field}[$und][$i][$key_value] = $value;
    $field_info = field_info_field($field);
    field_sql_storage_field_storage_write('node', $node, 'update', array($field_info['id']));
    cache_clear_all("field:node:{$node->nid}", 'cache_field');
}


// Пример. Что бы изменить Артикул товара типа сплит системы:
set__und ($nid = 9, $type = 'split_sistemy_kondicionery', 'field_artikul', 'bsv-07');


// Процедурно

function rename__artikul ($new_nid, $type = 'split_sistemy_kondicionery', $sku){
    $node = (object)array(
      'nid' => $new_nid,
      'type' => $type,
    );
    $node->field_artikul['und'][0]['value'] = $sku;
    $field_info = field_info_field('field_artikul');
    field_sql_storage_field_storage_write('node', $node, 'update', array($field_info['id']));
    cache_clear_all("field:node:{$node->nid}", 'cache_field');
}

Термин

$term = (object)array(
  'tid' => $tid,
  'vocabulary_machine_name' => $vocabulary_name,
);

$term->{$pole_render_html}['und'][0]['value'] = $set_value;

if (!$set_value){
    unset($node->{$pole_render_html});
}

$field_info = field_info_field($pole_render_html);
field_sql_storage_field_storage_write('taxonomy_term', $term, 'update', array($field_info['id']));
cache_clear_all("field:taxonomy_term:{$term->tid}", 'cache_field');

Источник: http://xandeadx.ru/blog/drupal/634

Связаться с автором

Комментарии

Если у вас есть вопрос, критика или другое мнение - напишите в комментариях.