Как я могу получить словарь таксономии по node_type - PullRequest
1 голос
/ 23 декабря 2011

У меня мало типов узлов, и у некоторых из них есть дополнительное поле, связанное со словарем таксономии. Как я могу получить идентификатор или имя словаря таксономии, если я знаю имя поля и тип узла, где это поле существует?

Ответы [ 2 ]

2 голосов
/ 23 декабря 2011

В Drupal 7 поля могут быть добавлены к любому объекту / пакету, а для поля ссылки на термин используемые словари установлены на уровне поля, не на уровне объекта / пакета.

Таким образом, вам не нужно запрашивать настройки поля для определенного типа контента, а просто настройки самого поля.Имена машин словаря хранятся в ключе allowed_values массива settings, возвращаемого из field_info_field():

$field_name = 'field_name_of_field';
$info = field_info_field($field_name);

$vocab_keys = array();
foreach ($info['settings']['allowed_values'] as $item) {
  $vocab_keys[] = $item['vocabulary'];
}

// $vocab_keys now contains an array of all vocabulary machine names allowed on this field

Надежда, которая помогает

0 голосов
/ 23 декабря 2011

Этот код полезен, если вы храните термин в дополнительном поле.

/**
 * Get vocabulary ID by term name applied to node
 */
$tid = $node->your_field[$node->language][0]['tid'];
$term = taxonomy_term_load($tid);

/* $term now is the following object
stdClass Object(
    [tid] => 1
    [vid] => 1
    [name] => Name of term
    [description] => Description of term
    [format] => full_html
    [weight] => 0
    [vocabulary_machine_name] => vocabulary
) */

/**
 * Loading vocabularies
 */
$vocabularies = taxonomy_get_vocabularies();

/* $vocabularies now is the following array
Array(
    [1] => stdClass Object(
        [vid] => 1
        [name] => Forums
        [machine_name] => forums
        [description] => Forum navigation vocabulary
        [hierarchy] => 1
        [module] => forum
        [weight] => -10
    )
    [2] => stdClass Object(
        [vid] => 2
        [name] => Category
        [machine_name] => category
        [description] => 
        [hierarchy] => 1
        [module] => taxonomy
        [weight] => -9

    )
) */

/**
 * Vocabulary searched by you
 */
$vocabulary = $vocabularies[$term->vid];

/* $vocabulary now is the following object
Array(
    [1] => stdClass Object(
        [vid] => 1
        [name] => Forums
        [machine_name] => forums
        [description] => Forum navigation vocabulary
        [hierarchy] => 1
        [module] => forum
        [weight] => -10
    )
) */
...