WPではプラグインを使ってましたが、baserCMSには無いので自分で作らないといけません。
最初から自分で作るのは訳がわからなさすぎるので、先人の知恵をお借りする事にします。
ググりまくった結果、こちらのコードが好みでした。
Drive(L:) - Web屋です。ゲームや曲も作っています。
Webサイトやゲーム、曲などを作っています。 - Laineus Drive(L:)
ただ、URL管理とカウント保存が同一ファイルなので分けました。(単に毎度FTPからDLすんのが面倒くさい)
中身は二つとも同じです。変えるの面倒ですし…(どこまで)
logToArr 関数をちょこっと変更します。
private $logfile = 'download.log'; private $namefile= 'dlfile.log'; //URL管理用ファイルを追加しとく private function logToArr() { $log = file_get_contents($this->logfile, 'r+'); $file = file_get_contents($this->namefile, 'r+'); foreach (explode("\r\n", $file) as $val) { $current = explode(',', $val); $arr[$current[0]]['name'] = $current[1]; $arr[$current[0]]['url'] = $current[2]; $arr[$current[0]]['count'] = 0; //まだログが無い時の為に0を入れておく } //カウントだけカウントファイルから入れなおし foreach (explode("\r\n", $log) as $val) { $current = explode(',', $val); $arr[$current[0]]['count'] = $current[3]; } return $arr; }
こうしとけば、ローカルに dlfile.log だけあればいいので楽ちんです~。
パーミッションは、download.log だけ 666 にすれば大丈夫です。
あと、ログも取りたかったのでログ保存も追加します。
addCount 関数に以下を追記
なんか回りくどい事をしてる気がするけどよくわからない。
//これは最初のファイルとこに追記 private $logdata= 'dllog.log'; //ログを取得 $contents = file_get_contents($this->logdata); $str = $this->data[$id]['name'].','.$this->data[$id]['url'].','.date('Y/m/d H:i:s'); $contents = $str."\r\n".$contents; $fp = fopen($this->logdata, 'w'); fwrite($fp, $contents); fclose($fp);
ログ取るなら、カウントしないで集計すれば?と思うじゃないですか。
まあ、訳がわかりませんでしたのでまた今度。
で、ログは増えていくので、ページネーションが必要ですね。
って事で、ページネーションはこちらのコードをそのまままるっと拝借。
phpのページングは難しくない!シンプルに覚えるサンプル付き解説 | 侍エンジニアブログChevron Right
この記事では「 phpのページングは難しくない!シンプルに覚えるサンプル付き解説 」といった内容について、誰でも理解できるように解説します。この記事を読めば、あなたの悩みが解決するだけじゃなく、新たな気付きも発見できることでしょう。お悩みの方はぜひご一読ください。
無償でお知恵を掲載して下さってる方々には本当に感謝しかないです。
実際にはIPも取るので(同じ方が何度もDLしてたりするので整理用にしか使いませんが)要ログインにするか、管理画面で表示するかしたい・・・(わからない)←これはできた。
あと、ショートコードとかで、DLボタンのURLも変わるといいんだけど・・・・(わからない)