sort_list / 本サイトの基本構成
last update:
2015/12/20
特定のフォルダにuploadした記事ファイルのfilenameを取得し、更新日の新しい順にsortした上でリスト化されるように組み、tagの振り分けも行う。記事ファイル名は「(content_name).(tag_name).html」にする。content_name や tag_name はアルファベットでなく日本語でも可。更新日は各記事ファイル内の$directData変数をチェックして、空なら自動で取得する。手動で設定することもできる。
記事ファイルのパラメータ
// 自動取得
<?php
$directData = '';
?>
// 手動設定
<?php
$directData = '20151220';
?>
// 特定設定
<?php
$directData = '00000000';
?>
リストのhtml
<?php
// ディレクトリオープン
if ($handle = opendir('記事ファイルがあるフォルダのパス')) {
// ファイル情報取得
while (false !== ($filename = readdir($handle))) {
switch($filename){
case ".": break;
case "..": break;
case ".DS_Store": break;
case ".metadata": break;
case "RemoteSystemsTempFiles": break;
default :
// ファイルの$directDataパラメータ取得
$targetHtml = file_get_contents('記事ファイルがあるフォルダのパス'.$filename);
preg_match("/'[0-9]{8}'/u", $targetHtml, $directData);
// 更新日の取得
// $directDataパラメータが無ければ自動取得
if ($directData == NULL) {
$update = date('Y'.'m'.'d'.'H'.'i'.'s', filemtime('記事ファイルがあるフォルダのパス'.$filename));
// '00000000' を設定したmakeWordsだったら、jsonの更新日を取得
} else if($directData[0] == "'00000000'") {
$update = date('Y'.'m'.'d'.'H'.'i'.'s', filemtime('jsonファイルのパス'));
// その他(手動で8桁を設定した日時)だったら、そのまま適用
} else {
$update = substr($directData[0], 1, 8).'000000';
}
// pageのデータを多次元配列にする
$pageData[] = array(
'filename' => $filename,
'update' => $update
);
break;
}
}
closedir($handle);
// 更新日を配列にし、
foreach($pageData as $value){
$sortItems[] = $value['update'];
};
// 更新日を基準に降順ソート
array_multisort($sortItems , SORT_DESC, $pageData);
}
// リンクパスにendパラメータがなければリストを表示
if (!(isset($_GET['end']))) {
?>
<div class="body01list">
<ul>
<?php
// リンクパスにtagがあればファイル名にtagが含まれているliのみ出力
if (isset($_GET['tag'])) {
foreach($pageData as $value) {
$f_name = explode(".", $value['filename']);
if ($_GET['tag'] == $f_name[1]) {
?>
<li><a href="<?php echo $lnk_path; ?>?end=<?php echo $f_name[0].'.'.$f_name[1]; ?>"><?php echo $f_name[0]; ?></a></li>
<?php
}
}
// リンクパスにtagが無ければ全てのliを出力
} else {
foreach($pageData as $value) {
$f_name = explode(".", $value['filename']);
?>
<li><a href="<?php echo $lnk_path; ?>?end=<?php echo $f_name[0].'.'.$f_name[1]; ?>"><?php echo $f_name[0]; ?></a></li>
<?php
}
}
?>
</ul>
<!--/.body01list--></div>
<?php
unset($filename, $targetHtml, $update, $sortItems, $f_name, $directData, $pageData);
// リンクパスにendパラメータがあればエンドを表示
} else {
include($inc_path.'エンドページのhtmlのパス');
unset($filename, $targetHtml, $update, $sortItems, $f_name, $directData);
}
?>
エンドのhtml
<div class="body02end">
<?php
// $_GET['end'] が $value['filename'] の中にあれば、ページを表示、
// 無ければ(end= の値が古かったりしたら)エラーメッセージを出す。
//
foreach($pageData as $value){
$searchItems[] = $value['filename'];
};
if(in_array($_GET['end'].'.html', $searchItems)){
$target = '記事ファイルがあるフォルダのパス'.$_GET['end'].'.html';
// article 出力
include($target);
} else {
echo 'ページが無い、又はページタイトルを変更しました。<br><br>';
}
unset($searchItems, $target);
?>
<!--/.body02end--></div>
更新日の出力
<?php
// $pageDataから該当の$value['update']を抽出
foreach($pageData as $value){
if($value['filename'] == $_GET['end'].'.html'){
$acceptData = $value['update'];
}
}
// 更新日の出力
$YY = substr($acceptData, 0, 4);
$mm = substr($acceptData, 4, 2);
$dd = substr($acceptData, 6, 2);
?>
<div class="body02update">last update: <?php echo $YY.'/'.$mm.'/'.$dd; ?></div>
<?php
unset($pageData, $YY, $mm, $dd, $acceptData);
?>