ユーザ用ツール

サイト用ツール


jarltokyo

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
jarltokyo [2026/04/24 16:27] – 削除 Tokyo Adminjarltokyo [2026/06/26 13:15] (現在) Tokyo Admin
行 1: 行 1:
 +~~NOCACHE~~
 +{{keywords>JARL東京都支部,JARL Tokyo,JARL支部,JARL東京支部}}
 +
 +
 +日本アマチュア無線連盟 JARL東京都支部のサイトです。\\
 +ブックマーク・お気に入りは「 JARLTokyo.com 」でお願いします。\\
 +最新情報・お知らせは以下よりご覧ください。
 +
 +
 +
 +====== 最新情報・お知らせ ======
 +
 +
 +----
 +
 +<php>
 +date_default_timezone_set('Asia/Tokyo');
 +
 +$baseDir = '/home/usausa2web/web/www_jarltokyo.com';
 +$blogDir = $baseDir . '/data/pages/blog';
 +$limit = 10;
 +
 +$items = [];
 +
 +foreach (glob($blogDir . '/*.txt') as $file) {
 +    $basename = basename($file, '.txt');
 +
 +    // 対象は YYYYMMDD_slug.txt の記事のみ
 +    if (!preg_match('/^(\d{4})(\d{2})(\d{2})_(.+)$/', $basename, $m)) {
 +        continue;
 +    }
 +
 +    $year  = $m[1];
 +    $month = $m[2];
 +    $day   = $m[3];
 +
 +    $content = file_get_contents($file);
 +    if ($content === false) {
 +        continue;
 +    }
 +
 +    // 最初の H1 見出しをタイトルとして取得
 +    $title = $basename;
 +    if (preg_match('/^======\s*(.+?)\s*======\s*$/m', $content, $tm)) {
 +        $title = trim($tm[1]);
 +    }
 +
 +    // 本文抜粋用に不要な記法を除去
 +    $body = $content;
 +
 +    // META
 +    $body = preg_replace('/~~META:.*?~~/s', '', $body);
 +
 +    // 最初のH1タイトル
 +    $body = preg_replace('/^======.*?======\s*$/m', '', $body);
 +
 +    // 既に入っている場合の掲載日行
 +    $body = preg_replace('/^\/\/掲載:.*?\/\/\s*$/m', '', $body);
 +
 +    // その他見出し
 +    $body = preg_replace('/^={2,6}.*?={2,6}\s*$/m', '', $body);
 +
 +    // WRAPブロックは中身ごと削除
 +    $body = preg_replace('/<WRAP.*?>.*?<\/WRAP>/s', '', $body);
 +
 +    // 画像・メディア
 +    $body = preg_replace('/\{\{.*?\}\}/s', '', $body);
 +
 +    // DokuWikiリンク [[url|label]] / [[page]]
 +    $body = preg_replace('/\[\[(?:[^|\]]+\|)?([^\]]+)\]\]/', '$1', $body);
 +
 +    // 表
 +    $body = preg_replace('/^\^.*$/m', '', $body);
 +    $body = preg_replace('/^\|.*$/m', '', $body);
 +
 +    // 水平線
 +    $body = preg_replace('/^-{4,}\s*$/m', '', $body);
 +
 +    $body = trim($body);
 +
 +    // 空行区切りで先頭2段落を抜粋
 +    $paragraphs = preg_split('/\n\s*\n/', $body);
 +    $excerptParts = [];
 +
 +    foreach ($paragraphs as $p) {
 +        $p = trim(preg_replace('/\s+/', ' ', $p));
 +        if ($p !== '') {
 +            $excerptParts[] = $p;
 +        }
 +        if (count($excerptParts) >= 2) {
 +            break;
 +        }
 +    }
 +
 +    $excerpt = implode("\n\n", $excerptParts);
 +
 +    // 長すぎる場合は短縮
 +    if (function_exists('mb_strlen') && mb_strlen($excerpt, 'UTF-8') > 220) {
 +        $excerpt = mb_substr($excerpt, 0, 220, 'UTF-8') . '…';
 +    }
 +
 +    $items[] = [
 +        'datekey' => $year . $month . $day,
 +        'year'    => $year,
 +        'month'   => $month,
 +        'day'     => $day,
 +        'id'      => $basename,
 +        'title'   => $title,
 +        'excerpt' => $excerpt,
 +    ];
 +}
 +
 +// ファイル名の日付で新しい順
 +usort($items, function ($a, $b) {
 +    return strcmp($b['datekey'], $a['datekey']);
 +});
 +
 +// 最新10件
 +$items = array_slice($items, 0, $limit);
 +
 +foreach ($items as $item) {
 +    $dateLabel = (int)$item['year'] . '年' . (int)$item['month'] . '月' . (int)$item['day'] . '日';
 +    $url = '/blog/' . rawurlencode($item['id']);
 +
 +    echo '<article class="jarltokyo-blog-item">';
 +
 +    echo '<div class="jarltokyo-blog-date">';
 +    echo htmlspecialchars($dateLabel, ENT_QUOTES, 'UTF-8');
 +    echo '</div>';
 +
 +    echo '<h2 class="jarltokyo-blog-title">';
 +    echo '<a href="' . htmlspecialchars($url, ENT_QUOTES, 'UTF-8') . '">';
 +    echo htmlspecialchars($item['title'], ENT_QUOTES, 'UTF-8');
 +    echo '</a>';
 +    echo '</h2>';
 +
 +    if ($item['excerpt'] !== '') {
 +        $paras = explode("\n\n", $item['excerpt']);
 +        foreach ($paras as $p) {
 +            echo '<p>' . htmlspecialchars($p, ENT_QUOTES, 'UTF-8') . '</p>';
 +        }
 +    }
 +
 +    echo '<p style="text-align:right;">';
 +    echo '<a href="' . htmlspecialchars($url, ENT_QUOTES, 'UTF-8') . '">→ 続き...</a>';
 +    echo '</p>';
 +
 +    echo '</article>';
 +    echo '<hr>';
 +}
 +
 +if (empty($items)) {
 +    echo '<p>記事はありません。</p>';
 +}
 +</php>
 +
 +
 +
 +
 +----
 +
 +[[newblog|新しい記事の投稿]]
  
jarltokyo.1777015652.txt.gz · 最終更新: by Tokyo Admin

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki