解決樹狀分類層級不明的問題 solving the unknown level of taxonomy trees

Taxonomy 分類是可以多層的, 樹狀的
但有一個很大的問題, 就是 taxonomy_get_term(), node_load() 的時候的分類並沒有有關層的參數
即是, 雖然分類有層級, 但我並不知道這個分類是最頂層, 中間, 還是最底
這個問題一直很困擾, 因為像以下的例子:

  • China
    • Beijing
    • Shanghai

就不能輕易找出"城巿"了

最近找到一個比較可行的方法
1. hierarchical_select
一個方便的功能, 能令你的層級選擇的時候更人性化
我使用的設定是將每一層的分類都儲存, 而不是只是儲存末諯分類

2. content taxonomy
不使用原生的 分類連到 content type
而使用 cck 將 taxonomy 到 content type

3. computed field
最重要, 作用是將從 hierarchical_select 的分類分層, 再每一層記錄分類
如上例中, 需要建立兩個 computed field, 一個儲存國家, 一個城巿
需要有的資料的時候就從 computed field 取出
而不從一般的 taxonomy 最出

實際的代碼:

<?php
$country
= array_slice($node->field_country,-2,1);
$t = taxonomy_get_term($country[0]['value']);
$node_field[0]['value'] = $t->name;
?>

有關 computed field 的使用方法可參考 Computed Field: 在另一個檔案提供代碼算式 compute in file

Computed Field: 在另一個檔案提供代碼算式 compute in file

Computed Field 是一種 cck 使用的 field type,
類似 imagefield, 但主要提供是一個地方,
放的是一個算式的結果.

例如有中英數三個整數欄位,
我可以加一個 computed field, 儲存的數值是他們三個的和
然後我就可以輕鬆根據這個數值, 使用 views, 例出, 排序學生們的總分

Computed field 提供一個 textarea 輸入算式, 但也提供以特定的函數命名提供算式
它自己的說明清楚提示這個命名, 但就沒有這個函數應該使用的參數和返回值, 實例如下:

<?php
/**
 * <obj> $node that contains all field values
 * <array> $field
 * <array> $node_field that store this computed field value
 **/
function computed_field_[field_name]_compute(&$node, $field, &$node_field) {
 
//$node_field[0]['value'] 就是實際存起來的結果
 
$node_field[0]['value'] = sum($node->field_math[0]['value'],$node->field_eng[0]['value']);
 
}
?>

Drupal book v2011-spring

List of Good books in 2011 spring:

1. Drupal’s Building Blocks: Quickly Building Web Sites with CCK, Views, and Panels

Most basic elements in building a website with Drupal. Config/backend stuff. A good start for Drupal developer.

2. Drupal 6 Themes

Frontend stuff, i.e., how drupal use html templates and the integration in between.

3. Using Drupal

advanced version of book1. More building elements in Drupal.

4. Pro Drupal 6 Development 2nd ed

Pure programming stuff. For customization that specific to special functions that no one did before. API, hooks, behind the scenes.

用 PHP 來提取 views 的結果: $view->preview()

EDIT 2010-01-13 <?php $view->access() ?>

之前有提及過用 PHP 來提取 views 的結果: 從 fid 提取上傳檔案的資料

但發覺這個方法不可以拿出 Filefield 的資料, 原因未明
因為效能問題不想使用 node_load(), 花了些時間挖
Views 的 AJAX paging 就是使用 <?php $view->preview()?> (可以參考右欄 Recent content 的 paging)

實際使用:

<?php
    $view
= views_get_view($name);
    if (
is_object($view)) {
     
$output .= $view->preview($display_id,array($taxonomy->name)); //第二個 arg array() 是給views 用的 argments
   
}
?>

此方法可以完全使用 views 的 templates, display options 等, 真正方便

EDIT:
要檢查權限:<?php $view->access($display_id) ?>

再加一個方法:

<?php
views_embed_view
($name, $display_id, $arg1, $arg2);
?>

[Solr] 數值的搜尋 integer index

patch: http://drupal.org/node/949768

問題主要出現在沒有 integer 的 filters
例如 integer checkbox, 沒有辦法可以像 text select dropdown refine 搜尋結果
而這個patch 可以修正, 令 widget 為 checkbox, checkboxes, dropdown 的 Integer/Float 可以有一個獨立的block 來收緊搜尋的結果

Pages

Google