/** * 一覧をページの読みでソートし出力 * @param string $type 一覧を表示するタイプ * @param boolean $force キャッシュを再生成する(※ページの経過時間はキャッシュの対象外) * @return array */ private static function getHeadings($type = 'wiki', $force = false) { global $cache; static $heading; $cache_name = self::PAGENAME_HEADING_CACHE_PREFIX . $type; if ($force) { // キャッシュ再生成 unset($heading[$type]); $cache['wiki']->removeItem($cache_name); } else { if (!empty($heading[$type])) { // メモリにキャッシュがある場合 return $heading[$type]; } else { if ($cache['wiki']->hasItem($cache_name)) { // キャッシュから最終更新を読み込む $heading[$type] = $cache['wiki']->getItem($cache_name); return $heading[$type]; } } } $ret = array(); $pages = self::pages($type); if ($type !== 'attach') { foreach ($pages as $page) { // ここで一覧取得 $initial = Reading::getReadingChar($page); // ページの読みを取得 if ($initial === $page) { // 読み込めなかった文字 $initial = Reading::OTHER_CHAR; } else { if (preg_match('/^(' . Reading::SYMBOL_PATTERN . ')/u', $initial)) { $initial = Reading::SYMBOL_CHAR; } } // ページの頭文字でページとページの読みを保存 $ret[$initial][$page] = Reading::getReading($page); } } else { foreach ($pages as $page => $a) { // ここで一覧取得 $initial = Reading::getReadingChar($page); // ページの読みを取得 if ($initial === $page) { // 読み込めなかった文字 $initial = Reading::OTHER_CHAR; } else { if (preg_match('/^(' . Reading::SYMBOL_PATTERN . ')/u', $initial)) { $initial = Reading::SYMBOL_CHAR; } } // ページの頭文字でページとページの読みを保存 $ret[$initial][$page] = Reading::getReading($page); } } unset($initial, $page); // ページの索引でソート ksort($ret, SORT_NATURAL); foreach ($ret as $initial => &$pages) { // ページ名の「読み」でソート asort($pages, SORT_NATURAL); // 「読み」でソートしたやつを$headingに保存 $heading[$type][$initial] = array_keys($pages); } unset($ret); // キャッシュに保存 $cache['wiki']->setItem($cache_name, $heading[$type]); return $heading[$type]; }
/** * 一覧をページの読みでソートし出力 * @param string $dir ディレクトリ * @param boolean $force キャッシュを再生成する(※ページの経過時間はキャッシュの対象外) * @return array */ private static function getHeadings($dir = DATA_DIR, $force = false) { global $cache; static $heading; $func = self::getCacheName($dir); $cache_name = self::PAGENAME_HEADING_CACHE_PREFIX . $func; if ($force) { // キャッシュ再生成 unset($heading[$func]); $cache['wiki']->removeItem($cache_name); } else { if (!empty($heading[$func])) { // メモリにキャッシュがある場合 return $heading[$func]; } else { if ($cache['wiki']->hasItem($cache_name)) { // キャッシュから最終更新を読み込む $heading[$func] = $cache['wiki']->getItem($cache_name); return $heading[$func]; } } } foreach (self::getExists($dir) as $file => $page) { $initial = Reading::getReadingChar($page); if ($initial === $page) { // 読み込めなかった文字 $initial = Reading::OTHER_CHAR; } else { if (preg_match('/^(' . Reading::SYMBOL_PATTERN . ')/u', $initial)) { $initial = Reading::SYMBOL_CHAR; } } // ページの頭文字でページとページの読みを保存 $ret[$initial][$page] = Reading::getReading($page); } unset($initial, $page); // ページの索引でソート ksort($ret, SORT_NATURAL); foreach ($ret as $initial => &$pages) { // ページ名の「読み」でソート asort($pages, SORT_NATURAL); // 「読み」でソートしたやつを$headingに保存 $heading[$func][$initial] = array_keys($pages); } unset($ret); // キャッシュに保存 $cache['wiki']->setItem($cache_name, $heading[$func]); return $heading[$func]; }