diff --git a/content_taxonomy.module b/content_taxonomy.module index 7136659fda47febdc2f97e04ae9d55d1f7801e62..2b3db2b43aa9f7003dee6dd0ed0e8fa9599824b5 100644 --- a/content_taxonomy.module +++ b/content_taxonomy.module @@ -27,6 +27,52 @@ function content_taxonomy_form_field_ui_field_edit_form_alter(&$form, &$form_sta '#options' => $options, '#default_value' => isset($tree['parent']) ? $tree['parent'] : 0, ); + + $form['field']['settings']['allowed_values'][$delta]['depth'] = array( + '#type' => 'textfield', + '#title' => t('Tree depth'), + '#default_value' => isset($tree['depth']) ? $tree['depth'] : '', + '#description' => t('Set the depth of the tree. Leave empty to load all terms.'), + '#element_validate' => array('_element_validate_integer_positive'), + ); } } +} + + +/** + * Implements hook_field_info_alter(). + */ +function content_taxonomy_field_info_alter(&$info) { + // Use own options callback for handling additional configuration options. + $info['taxonomy_term_reference']['settings']['options_list_callback'] = 'content_taxonomy_allowed_values'; + + // Add depth option. + foreach ($info['taxonomy_term_reference']['settings']['allowed_values'] as $key => $values) { + $info['taxonomy_term_reference']['settings']['allowed_values'][$key]['depth'] = 0; + } +} + +/** + * Returns the set of valid terms for a taxonomy field. + * Extends taxonomy_allowed_values() with the tree depth option. + * + * @param $field + * The field definition. + * @return + * The array of valid terms for this field, keyed by term id. + */ +function content_taxonomy_allowed_values($field) { + $options = array(); + foreach ($field['settings']['allowed_values'] as $tree) { + if ($vocabulary = taxonomy_vocabulary_machine_name_load($tree['vocabulary'])) { + $max_depth = (isset($tree['depth']) && !empty($tree['depth'])) ? $tree['depth'] : NULL; + if ($terms = taxonomy_get_tree($vocabulary->vid, $tree['parent'], $max_depth)) { + foreach ($terms as $term) { + $options[$term->tid] = str_repeat('-', $term->depth) . $term->name; + } + } + } + } + return $options; } \ No newline at end of file