2009-10-28 30 views
15

Tôi có thể truy xuất id từ vựng trực tiếp từ DB, nhưng có chức năng tích hợp sẵn không?lấy id từ vựng theo tên

ví dụ:

tôi có một vốn từ vựng được gọi là "niêm yết", tôi cần điều đó được xây dựng trong chức năng mất "danh sách" như là đối số chức năng, và trở một vid.

tôi đang sử dụng drupal 6

Trả lời

17

Tôi có một chức năng cho điều này, cũng gần như ..

/** 
* This function will return a vocabulary object which matches the 
* given name. Will return null if no such vocabulary exists. 
* 
* @param String $vocabulary_name 
* This is the name of the section which is required 
* @return Object 
* This is the vocabulary object with the name 
* or null if no such vocabulary exists 
*/ 
function mymodule_get_vocabulary_by_name($vocabulary_name) { 
    $vocabs = taxonomy_get_vocabularies(NULL); 
    foreach ($vocabs as $vocab_object) { 
    if ($vocab_object->name == $vocabulary_name) { 
     return $vocab_object; 
    } 
    } 
    return NULL; 
} 

Nếu bạn muốn vid chỉ nhận được tài sản vid của đối tượng trở lại và.

$vocab_object = mymodule_get_vocabulary_by_name("listing"); 
$my_vid = $vocab_object->vid; 

Henriks chỉ lưu trữ nó trong một biến là rất hợp lệ như mã trên bạn sẽ không muốn chạy trên mọi yêu cầu.

Sửa

Cũng đáng chú ý là trong Drupal 7, bạn có thể sử dụng taxonomy_vocabulary_get_names() mà làm điều này một chút dễ dàng hơn.

+1

+1 để thêm ví dụ –

+0

** Người dùng D7 vui lòng chú ý: ** Sử dụng '$ vocab_object-> machine_name' thay vì' -> name'! – mate64

4

Không có chức năng được cài đặt sẵn cho điều này, afaik. Bạn có thể cuộn của riêng bạn bằng cách gọi taxonomy_get_vocabularies() và tìm kiếm tên của bạn trong mảng kết quả, nhưng điều này sẽ thực hiện yêu cầu cơ sở dữ liệu trên mọi cuộc gọi.

Nếu bạn có từ vựng mà bạn thường sử dụng từ mã, nó có thể dễ dàng/hiệu quả hơn để lưu trữ vid trong biến Drupal qua variable_set() một lần và lấy lại thông qua variable_get() (Nhiều mô-đun tạo từ vựng khi cài đặt theo cách này).

Chỉnh sửa: đây là một số mã mẫu để thực hiện việc này khi cài đặt mô-đun.

function mymodule_install() { 
    $ret = array(); 
    $vocabulary = array(
     'name' => t('myvocab'), 
     'multiple' => '1', 
     'required' => '0', 
     'hierarchy' => '1', 
     'relations' => '0', 
     'module' => 'mymodule', 
     'nodes' => array('article' => 1), 
    ); 
    taxonomy_save_vocabulary($vocabulary); 
    $vid = $vocabulary['vid']; 
    variable_set('mymodule_myvocab', $vid); 
    return $ret 
} 
+0

Henrik, tôi hy vọng bạn không phiền, nhưng một Tôi đã có một số mã để hadn tôi đặt một mẫu trong để lưu trữ một vocab trên cài đặt. –

+0

@Jeremy: Không sao, bạn được chào đón. –

+0

Tôi sắp đề xuất taxonomy_get_vocabularies và thấy ghi chú của bạn về * một cuộc gọi DB khác theo yêu cầu ... bạn nói đúng. –

3

Cần trợ giúp.

function _my_module_vid($name) { 
    $names = taxonomy_vocabulary_get_names(); 
    return $names[$name]->vid; 
} 
+0

Điều này sẽ hiệu quả, nhưng bạn nên kiểm tra và trả lại FALSE nếu không có từ vựng với tên đó? –

0

Bạn biết loại nút được liên kết với vocaulbary. Vì vậy, chỉ cần sử dụng taxonomy_get_vocabularies() và chuyển kiểu nút làm đối số và bạn sẽ nhận được các chi tiết bạn muốn!

14

Đối với Drupal 7 nếu bạn biết tên máy từ vựng đây là cách:

$vid = taxonomy_vocabulary_machine_name_load('your_vocabulary_name')->vid; 

Nếu bạn chỉ biết tên thực của từ vựng, bạn có thể sử dụng chức năng này:

function _get_vocabulary_by_name($vocabulary_name) { 
    // Get vocabulary by vocabulary name. 
    $query = db_select('taxonomy_vocabulary', 'tv'); 
    $query->fields('tv', array(
    'machine_name', 
    'vid', 
)); 
    $query->condition('tv.name', $vocabulary_name, '='); 
    $vocabulary = $query->execute()->fetchObject(); 
    return $vocabulary; 
} 
0

Trong Drupal 7 bạn có thể sử dụng:

$vocab_object = taxonomy_vocabulary_machine_name_load('vocabulary_name'); 
$my_vid = $vocab_object->vid;