25 авг. 2011 г.

Программное добавление термина таксономии

Этот код работает для DRUPAL 7
поддерживается создание связей терминов и полей таксономии
PS:
Обязательно проверьте чтоб ваш скрипт был в кодировке utf


/**
 * Arguments
 * name
 * vid
 * arg[parent] =0
 * arg[termFields] = array(array(key=>value))
*/
function _taxonomy_term_add($name, $vid, $arg = array()){
   
    $term = new stdClass;
    $term->name = $name;
    $term->vid = (int)$vid;
    $term->parent = (int)$arg['parent']>0? (int)$arg['parent'] : 0;
    $term->path = array(
     "alias" => '',
     "pid" => null,
     "source" => null,
     "language" => "und",
     "pathauto" => 1
     );
  
   
    if(isset($arg['termFields']) && is_array($arg['termFields'])){
      $termFields = $arg['termFields'];
     
      foreach($termFields as $field){
        list($fieldName,$fieldValue) = each($field);
     
        $term->{$fieldName} = array(
                            "und" => array(
                                     array("value" => $fieldValue)
                                          )
                                 );
       }
    }
   
    taxonomy_term_save($term);
    _taxonomy_manager_update_voc($term->vid, $term->parent);
    taxonomy_terms_static_reset();
 
  return $term;
    
}

/**
 * Helper function that updates the hierarchy settings of a voc
 */
function _taxonomy_manager_update_voc($vid, $parents = array()) {
  $voc = taxonomy_vocabulary_load($vid);
  if ($voc->vid == $vid) {
    $current_hierarchy = count($parents);
    if ($current_hierarchy > 2) {
       $current_hierarchy = 2;
    }
    if ($current_hierarchy > $voc->hierarchy) {
      $voc->hierarchy = $current_hierarchy;
      taxonomy_vocabulary_save($voc);
    }
  }
}

//пример добавления термина

$termname = 'Кама';
$vid = 4;
$arg = array(
             'parent' =>0
             'termFields' => array(array('taxonomy_field_name'=>$termname))
            );

_taxonomy_term_add($termname, $vid, $arg);