inmedia

[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 頁面瀏覽資料統計

在使用 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" 放在首頁
實作代碼等一下再放出

[inmediahk] inmediahk.net/m 手機版


自從香港獨立媒體搬了 server 之後,
其中一個需要增加的功能就是手機版

之前一直沒有下手做的原因是因為要另寫一個theme
手機版用的 theme, 雖然很可能會用上 jqtouch 一類現成的庫
但需要再多一個模組分析 user-agent
很可能需要 themekey
便覺得牽一髮而動全身

但看到最近 jquery 自己推出了 jquery mobile
又經過更多 theming 的磨練之後覺得其實不需要使用一個新 theme
另做一個手機版入口就可以了
這樣便成就了 inmediahk.net/m


loading 頁面

入口很簡單, 用 views 另做一個 page
從 page-m.tpl.php 放 jquery mobile 就可以了
問題是內頁不可以方便的 detect 到 user-agent
便在 mobile page 的 link 都加上 ?v=m
在 template.php 的 node preprocess 加一組 template_files:

<?php
function phptemplate_preprocess_node(&$vars) {
  if(
$_GET['v']=='m') {
   
$vars['template_files'][] = 'node-m';
  }
}
?>

便可以令 mobile 的內頁使用 node-m.tpl.php, 可以使用 jquery mobile 的 html 了

但目前還沒有完成 taxonomy page 的 手機版
技術上類似, 只是需要不急的話就先將就用了...


內頁

[inmediahk] 2010-09 racksapcecloud

最近又為 inmediahk 從 media temple 轉到 rackspace cloud
主要是因為 MT 不便宜, 伺服器的效能因為流量加大而開始下降
遇到伺服器不穩定又需要工作人員重新啟動 (不論半夜, 過年)
所以轉用 rackspace cloud

RS 以 computing cycle, cloud service 的型式提供伺服器
我們幾乎只有 FTP 的權限, 但 RS 就會令網站的 apache, MYSQL 不會出問題
硬碟也類似, 情況和 Google app engine 的 python, Java, Heroku 等很類似
但價錢....都不是一般人可以負擔得起

當中的難度在於,
RS 提供的 FTP 慢, 需要在 MT 以 ssh 傳到 RS 的 ftp
MYSQL 也類似, 沒有 SSH 也難做 backup 等等
cmd 的指令也要先在轉伺服之前先熟練的準備好
還好最後都在兩個小時完成
DNS 大約在一天之內完成
而伺服器的速度又有所升, 是很好的學習經驗

[inmediahk] use of views argument: 作者最新文章

這也是一個少見的要求,
但也相當合理
便是要在node 頁面(node/[nid])的右面欄加一個block, 用作顯示這個node 作者的其他文章
一個多用戶參與寫作的網站便很需要用這些block 來列表特定用戶的文章

這個當然不可能給每一個用戶都做一個views
用戶數是有三萬以上的...
正解 >Read more

[inmediahk]全站RSS, 包括 views, nodes.....

全站所有頁面的RSS 其實並不是什麼特別的功能,
views 使用 argument RSS, display all values 已經可以提供該views 的RSS 了
只細心設定, 全站RSS 只是小事一樁
但這對一個新聞性, 互動性高的網站應該很重要吧

>Read more

[inmediahk] block 標題使用html, 特別的 'more' 連結

大家可能經常遇到一個問題, 就是想使用一個帶有html 的block title
我也看見過其他人在論壇上討論過, 得出使用一個module 的解答

但便用了另一個方法, 給大家參考
因為這次要將首頁右邊的一些block 的title 連到一些頁面
而它們都是使用views 的
很自然便使用views 的"標題" 功能, html 輸出
但我發覺一個小妙用
就是將標題用 包起, 放在在views 的 block header 中, 選用full html
這樣就連CSS 都不用改, 原生已經變成block title 使用的樣式了

還有一點要留意, 用這個方法的話,
empty text 是不會輸出title 的
所以, empty text 也要使用 加標題

這個方法的還有一個延伸應用
就是block 底的 "more" 連結
同樣, views 的footer 使用 便可以使用任何自定義的連結
而獨立媒體的行動日誌便是使用了這個方法
令一個views 的block 連到另一個 views 的頁面的

[inmediahk] content type 自動 taxonomy link

要實現的功能是 "自動放一個內容類型連結"
例如一個"專欄文章"的node, 便放一個連結到頁尾, 可以連結到"專欄文章列表"
"站外連結"node 便連到"站外連結列表"
難度在於"自動"的一部份
因為taxonomy 是用戶選的
連內建的forum 也需要用戶選擇正確的分類
所以連結不難, 但"自動化"便難

原本打算使用taxonomy, 再自己hack 一下form api, 讓它自動成為某一taxonomy
但後來用了一個更好, 更方便, 但沒有那麼直觀的方法
便是用views 的argument, 配合themes >Read more

香港獨立媒體專案

香港獨立媒體 http://www.inmediahk.net

這次的job 是幫香港獨立媒體的網頁由舊有的openACS 轉到 Drupal
而香港獨立媒體是因為參照台灣的苦勞網而決定使用Drupal
經由苦勞的jimmy 大 而找到我
所以要先感謝jimmy 大的推薦, 和苦勞網借出全站source code 參考
特此鳴謝

content access
advertisement
cck
javascript tools
js calendar
BUEditor
comment rss
date api
Google analytics
Google sitemap
logintoboggan
mailout
related links
Captcha
Tagadelic
JQuery interface library
Message effects
calendar
views >Read more