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

    Опубликовано Andres - ср, 02/27/2019 - 10:35

    // Программно изменить поле ноды без 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