客製輸出 views 的多個值欄位 (theming view field with multiple values)
Theme developer 顯示, theme_content_view_multiple_field() 決定多個值的時候 views 的輸出,
源碼:
<?php
function theme_content_view_multiple_field($items, $field, $values) {
$output = '';
foreach ($items as $item) {
if (!empty($item) || $item == '0') {
$output .= '<div class="field-item">'. $item .'</div>';
}
}
return $output;
}
?>
自定成用逗號分隔, 例如 value1, value2, value3
theme 內的 template.php:
<?php
function theme_content_view_multiple_field($items, $field, $values) {
$output = '';
foreach ($items as $item) {
if (!empty($item) || $item == '0') {
$output .= ($item==end($items))? $item:$item.', ';
}
}
return $output;
}
?>
[2012-12-21] 續 apache solr (二)
我測試的 apachesolr module 是 6.x-2.0-beta3
我發覺站內的內容並不是即時更新到 solr 的 index 之內的
應該是有以下的步驟:
- 新建/修改的 node 會在 Drupal 內部先整理好, 再一次送到 solr, 可選立即送, 而admin page 有一個數字顯示目前未被送出之 node 的數目
- Solr 收到更新名單, 但仍需要時間建立 index, 已建立的數字可以在 admin page 看到, 但 index 的更新不可以手動發動, 要等, 或者重啟 solr
暫時未看到有 patch core 的需要, 但我只測試英文內容, 不知道有否關連
[2010-12-14] 初探 apache solr on Drupal
使用過 Drupal 內建的 search 的話
便會發覺這個功能是雞肋
的確是一個基於 tree 而不是 "SQL like" 的搜尋, 也是全文檢索
但就沒有辦法對搜尋結果加以 filter (faceted search)
也不可以用日期或者其他方式排序
Drupal 的開發者們都發覺言個問題
所以便導入了 Apache solr 這個專案了以達成更強大的搜尋功能
大家可以參考新版的 Drupal 官網的搜尋, 和 issue queue 作例子
當然, 社群自己重寫一個也不是不可以
但要做到和 Solr 同一高度倒不如整合還比較快和可靠
而缺點則是, Solr 是基於 java 技術的 (java 1.5 或以上)
也即是說你的伺服器未必支援....
如果你的伺服器不能讓你以 SSH 連接
你便很大機會不能使用了...
Drupal 的 Apache solr module 就是連結兩者的鑰匙
翻譯一下安裝文件 (2010-12-14 6.x-1.2 版本)
- 下載 Drupal Apache solr module
- 解壓到 sites/all/modules/
- 下載 Solr 的PHP 庫, 到 http://code.google.com/p/solr-php-client/downloads/list 下載 r22 的壓縮檔
- 解壓到 sites/all/modules/apachesolr/
- 下載 Solr, http://www.apache.org/dyn/closer.cgi/lucene/solr/
- 解壓到 htdocs 以外, 令apache 不能以 http 的方式訪問 solr
- 將 sites/all/modules/apachesolr/schema.xml 和 solrconfig.xml 抄到 Solr 的 example/solr/conf
- 啟用 Drupal Apache solr module
待續...
[inmediahk] 2010-12-06 頁面瀏覽資料統計(二)
啊, 說好的 "GA 最熱門 block" 要跳票了, 這星期... 太忙了, Freelance 纏身
先將部份的代碼分享上來, 讓大家研究一下
首先建立一個 url, 這個url 會跟據參數返回 GA 的結果
<?php
function ga_api_menu() {
$items = array();
$items['ga_api/ahah'] = array(
'title' => 'AHAH',
'page callback' => 'ga_api_ahah_callback',
'access callback' => TRUE,
);
return $items;
}?>
以下是查詢 GA 的代碼, 使用 ga:pi class, 只提取 pageview
<?php
function ga_api_ahah_callback() {
//使用一個新注冊, 唯讀的帳戶作提交要求
$ga = new gapi('username','password');
//讀取參數
$path = $_GET['d'];
//留一個機會使用緩存
//$results = cache_get('ga_api_'.$path);
if (empty($results)) {
$filter = 'pagepath=='.$path;
$start_date = date('Y-m',strtotime('-1 Year')).'-01';
$end_date = date('Y-m-d');
try{
$ga->requestReportData(8930156,array('pageTitle','month','year'),array('pageviews'),array('year','month'),$filter,$start_date,$end_date);
} catch( Exception $e) {
print drupal_json(array('status' => TRUE, 'data' => $e->getMessage()));
exit();
}
$results = $ga->getResults();
//cache_set('ga_api_'.$path, $results,'cache',date('U',strtotime("+1 day")));
}
//kprint_r($results);
$output = '';
//輸出 json
foreach($results as $id => $result)
{
$output .= '<div>';
//$datetime = DateTime::createFromFormat('m',$result->getMonth());
$output .= $result->getYear().'-'.$result->getMonth() . ': ';
$output .= 'PV'.$result->getPageviews();
$output .= ' ('.mb_substr ($result->getPagetitle(),0,7).'...)';
$output .= '</div>';
}
print drupal_json(array('status' => TRUE, 'data' => $output));
exit();
}?>
以上的代碼都先使用 GA 的 console 試試存取, 再變成使用 class 的代碼, 而 GA export 的文件和例子都很全面, 中英文都一樣完整, 值得一讚
[inmediahk] 2010-11-29 頁面瀏覽資料統計
Attachment | Size |
---|---|
inmediahk-ga-data-export.jpg | 92.02 KB |
在使用 boost 模組以增加伺服器的負載和提高反應時間的同時,
因為boost 會完全繞過資料庫的讀取, 內建的統計模組便會失去功能
只能靠 Google analytics 或者 web server 端的統計數字
問題都不是太嚴重
但兩種統計都不能給眾多作者和編輯存取成為唯一的缺點
還好, Google analytics 有 export API 理論上是可以提供簡單的資料的
但因為一直沒有時間, 而且之前也沒有使用這 API 的經驗
便一直放下至近日..
借助 ga:pi() GAPI - Google Analytics API PHP Interface
編寫了一個簡單的 AJAX callback 返回目標頁面過去十二個月的每月 Pageview
再在每一個 node 的 links 加一個 <a> 以呼叫 AJAX 請求
逹到以下的效果:
(使用 tipsy 顯示結果)
下一步是建立一個 "最多人觀看block" 放在首頁
實作代碼等一下再放出