3300.me

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);
?>