データ集計周りのロジックを調査したときのメモ。
ソースを調査した目的は、Research Artisan Liteでログイン直後に表示される時間別画面に、各種サマリー値(adsenseクリック数など)を出したかったから。
確認できた事
ログの集計は、RaModel.phpのfindQuery()で実施される。
ログの種類は各種ある(アクセスログ、クリックログ、adsenseログetc.)、これらはlogテーブルのlogtype列で種別分けされている
logtypeの種類はConfig.phpで定義されている。
const NORMAL_ACCESS = '0'; const CLICK_LINK = '1'; const CLICK_BTN = '2'; const CLICK_ADSENSE = 'g'; |
アクセスログの各種確認画面で、データの取得を行うSQLは、ResearchController.phpで決定されている。
(画面に応じて、本クラスのデータ取得メソッドがコールされる)
どの画面が,どのデータ取得メソッドをコールするかは、MenuConfig.phpに定義されている。
public static $convertActions = array( 'time_detail' => 'time', 'uid_detail' => 'uid', 'ip_user' => 'ip', 'remotehost_user' => 'remotehost', 'domain_user' => 'domain', 'jpdomain_user' => 'jpdomain', 'country_user' => 'country', 'pref_user' => 'pref', 'rank_user' => 'rank', 'key_user' => 'key', 'engine_key' => 'engine', 'engine_user' => 'engine', 'host_user' => 'host', 'crawler_user' => 'crawler', 'referer_user' => 'referer', 'rate_user' => 'rate', 'clickrank_user' => 'clickrank', 'btnrank_user' => 'btnrank', 'pagein_user' => 'pagein', 'pageout_user' => 'pageout', 'brow_ver' => 'brow', 'brow_user' => 'brow', 'os_user' => 'os', 'screenwh_user' => 'screenwh', 'screencol_user' => 'screencol', 'jsck_user' => 'jsck', 'adsenserank_user' => 'adsenserank', 'adsensepagerank_user' => 'adsensepagerank', 'adsenseip_user' => 'adsenseip', 'aliasedit' => 'aliaslist', 'domainedit' => 'domainlist', 'douninstall' => 'uninstall', 'deletelog_confirm' => 'deletelog' ); |
view側では、例えばユニークユーザは$helper->uniqueCount()で取得可能だが、”ユニークユーザ”が何であるかは、ResearchController.phpで決められる。なので、時間別アクセス数のページで、Adsenseクリック数のユニークユーザーを表示させるには工夫が必要。(前述のメソッドをコールすると、当然ながら時間別アクセス数のUUが表示されるので)
アクセスログ表示画面に対する$helper->uniqueCount()の実態は、ReserchHelper.phpで定義されている。
public function uniqueCount() { print $this->getFormatNumber($this->result->get('uniqueCount')); } |
ReserchHelper.phpを見ると、clickAdsenseCount()メソッドとか有るので、これをコールすれだけかと思いきや、残念ながら常に0が返ってくるだけ。
なぜかというと、Log.phpで、logtypeがCLICK_ADSENSEのときしか値を取ってないから。
これがCLICK_ADSENSEになるのは、アドセンスログのログ画面を表示させるときだけだから、今回やりたい事にとっては、役に立たない。
private function _extractDetailCount() { switch($this->getValue('logtype')) { case Config::NORMAL_ACCESS: ++$this->_totalCount; break; case Config::CLICK_LINK: ++$this->_clickLinkCount; break; case Config::CLICK_BTN: ++$this->_clickBtnCount; break; case Config::CLICK_ADSENSE: ++$this->_clickAdsenseCount; break; } |
結局のところ、特定のcontrollerから複数のhelperをコールしたいのだけど、MenuConfigでcontroller:helperが1:1に紐付けられているので、対応が難しい…という感じっぽい
どうしたものか…
関連記事
コメントを残す