- Back to Home »
- PHP , オリジナル »
- データベースを使わないCSMの仕様(IzumikawaCMS)
Posted by : Izumikawa Fukumi
2014年1月5日日曜日
今回私が作成した自作CMSの仕様をご紹介したいと思います。
ある程度のPHPスキルがある方であれば簡単に作成出来てしまう物なのです。
CMS(コンテンツマネージメントシステム)と聞くと大規模なプログラムと思われるかもしれません。
ただWordPressなどはそれなりの機能がある為大規模なプログラムになるのですが、実際要らない機能だってあります。ましてそれなりに知識があれば機能をフル活用しなくともそれ以上の物が作れてしまうのです。
要らない機能を取り除いて自分仕様のCMSは、ある程度の知識があれば作成出来ます。
何故データベースを使わないのか?
この質問については恥ずかしいですが、私はあまりデータベースが得意ではありません。
でもデータベースを使わないCMSは利点だってあります。
無料レンタルサーバーなどでは一部データベースが使えない所だっています。
大体PHPが使えればデータベースも付属として使えるのですが使えない所も結構あります。
この場合データベースを使わないCMSの方が有利なんです。
(※最近データベースが素敵な所が分かった。)
CMSに求める機能
ここは一番重要な所です。自分仕様なので、欲しい機能なら何でもいいから搭載しましょう。
私は以下の機能をCMSに搭載しました。
- お知らせ追加機能
- お知らせリスト編集機能
- ヘッダー情報編集機能
- ブログ記事投稿機能
- ブログ記事一覧管理機能
- ブログ記事更新機能
- プロフィール編集機能
この7つの機能をCMSに搭載しました。
これでも結構機能はあると思われますが、至ってシンプルなソースで出来ました。
付けたい機能によって大規模な物かが決まります。
ブログ記事一覧表示
ブログ記事一覧表示ではデータベースを使っていない為csvでの管理になりました。
記事投稿時にcsvに記事情報を書いていきます。
Bloglog.csv
タイトル,記事ファイル名,日付,記事ID,タグ,ほほう数 タイトル,20131228052258.txt,2013年12月28日_05時22分58秒,タグ,20131228052258,0
この様な形式のcsvを新しい物順に上から追記して行きます。これを一覧表示します。
>>一覧表示したい物
[タイトル表示] [記事文字列] [投稿日] [ほほう数]
これだけをcsvから取り出します。
表示したい物になっている物の大体はCSVから取り出せばいいです。
[記事文字列]はcsv[1]にあるファイル名から取り出してHTMLなどをエスケープして特定の文字数を表示すれば簡単に表示出来ます。
if($_GET['bol'] == ""){
$document_data_print = 5; //表示する件数
$link_data = '秘密/'; //リンク先ディレクトリ
if($csv_file = fopen('秘密/log.csv', 'r')){
for($i=0; $i < 6; $i++){
$csv_aeeay = fgetcsv($csv_file);
$link = $link_data . $csv_aeeay[1]; //記事リンク先生成
$txt_document_data = strip_tags(file_get_contents($link));
if($txt_document_data !== ""){
print '' . $csv_aeeay[0] . '
'; //タイトル表示
print mb_substr($txt_document_data, 0, 700);
print ' ...続きを見る
';
print '投稿日 ほほう[' . $csv_aeeay[5] . ']
';
}
}
$link_data = array();
$link_data[] = '';
$link_data[] = '?bol=2';
}
}else{
//GET送信された時の処理
$file_opn_count = $_GET['bol']*5;
$file_opn_count = $file_opn_count+1;
$file_opn_count1 = $file_opn_count-5; //表示件数の初期値
$link_data = '秘密/'; //リンク先ディレクトリ
$txt_dataarray = array(); //投稿の配列作成
$file_foprn = fopen('秘密/log.csv', 'r');
$if_link = 0;
while(($file_array_data = fgetcsv($file_foprn)) !== FALSE){ //データを配列化
$txt_dataarray[] = $file_array_data;
}
for($i=$file_opn_count1; $i < $file_opn_count; $i++){
$link = $link_data . $txt_dataarray[$i][1];
$txt_document_data = strip_tags(file_get_contents($link));
if($txt_document_data !== ""){
print '' . $txt_dataarray[$i][0] . '
';
print mb_substr($txt_document_data, 0, 700);
print ' ...続きを見る
';
print '投稿日 ほほう[' . $txt_dataarray[$i][5] . ']
';
$if_link++;
}
}
if($_GET['bol'] !== '2'){
if(!$if_link < 6){
$before = $_GET['bol']-1;
$next = $_GET['bol']+1;
$link_data = array();
$link_data[] = '?bol=' . $before;
}else{
$before = $_GET['bol']-1;
$next = $_GET['bol']+1;
$link_data = array();
$link_data[] = '?bol=' . $before;
$link_data[] = '?bol=' . $next;
}
}else{
$link_data = array();
$link_data[] = '';
$link_data[] = '?bol=3';
}
}
一応これはセキュリティ対策は悪いですが、投稿者は私自身なのである程度の事は信用しています。他にも投稿時にある程度の対策はしているので大丈夫です。
次にブログ表示ソースです。
今回はここまでです。これ以上見せてしまうと、色々とバレてしまうので^^;
ましてデータベースも使っていないのでデータのありかなどがバレたら大変です。
次にブログ表示ソースです。
//ユーザーエージェントで対応サイトへ移動させる
if(mb_strpos($_SERVER['HTTP_USER_AGENT'], 'iPhone') !== FALSE){
header("Location: Mobile/index.php?url=" . $_GET['url'] . "#Blog_print");
}elseif(mb_strpos($_SERVER['HTTP_USER_AGENT'], 'Android') !== FALSE){
header("Location: Mobile/index.php?url=" . $_GET['url'] . "#Blog_print");
}
if($file = fopen('Blog_log/log.csv', 'r')){
$data = array();
while(($data_array = fgetcsv($file)) !== FALSE){
if($_GET['url'] == $data_array[4]){
$data[] = $data_array[0]; //タイトル
$data[] = $data_array[1]; //リンク
$data[] = $data_array[2]; //投稿日
$data[] = $data_array[3]; //キーワード
$data[] = $data_array[4]; //ID
$data[] = $data_array[5];
}
}
}
//表示部分
print $print0 . $print1 . $print2 . $print3 . $print4 . $print5 . $print6;
今回はここまでです。これ以上見せてしまうと、色々とバレてしまうので^^;
ましてデータベースも使っていないのでデータのありかなどがバレたら大変です。
