массив вместе функция foreach список на дату эхо - PullRequest
0 голосов
/ 24 октября 2019

Статьи отсортированы по имени, но не по дате, как я могу это сделать?

Структура каталогов:

  • Blog / 2019 / articleDirA, Блог/2019/articleDirB,...
  • Blog / 2018 / articleDirA, Blog / 2018 / articleDirB, ...

Каждый каталог статей (напр. articleB) содержит следующие файлы:

  • data.php
  • _counter.txt
  • img /

один из data.php:

$article = array( 
  'date' => '2019-03-01',
  'headline' => 'Hello BB!'
);
// Determine in which directory the page is located and define the correct path
if ($section === $baseDir): $actualPath = ''; else: $actualPath = '../'; endif; // result: ../;
//////////
function BlogYear() {
  global $section;
  $NewsFeedYear = array();
  $NewsFeedYear = array_filter(glob('*'), 'is_dir'); // Determine directories (2019: articleDirA, articleDirB ...)
  rsort($NewsFeedYear); // Sorts in reverse order: // 2019, 2018, 2017 ...
  $currentYear = basename(getcwd()); // The current year is the last dir from a path in a string (2019)
  $currentYearPath = array_filter(glob('*'), 'is_dir'); // Determine this current year directory (articleA, articleB ...)
  natsort($currentYearPath); // Sorted in natural order, 2019
//////////
echo '<div>';
foreach($currentYearPath as $articleDir_name) {
  require $articleDir_name.'/data.php';
  echo '<article id="'.$articleDir_name.'">
        <header>Article name is: <b>'.$articleDir_name.'</b></header>
        <div>
        <p>Date: <b>'.date("d. m. Y",strtotime($article['date'])).'</b></p>
        <p>Headline: '.$article['headline'].'</p>
        <p>Counter: ';
        global $base_dir;
        $basePath = preg_replace('/lib/', '', $base_dir);
        include $basePath.$section.'/'.$currentYear.'/'.$articleDir_name.'/_counter.txt';
  echo '</p>
       <p>Link: <a href="'.$section.'/'.$currentYear.'/'.$articleDir_name.'">'.$articleDir_name.'</a></p></article>';
}
echo '</div>';
 }
}
BlogYear();

Результат в каталоге 2019

Имя статьи: articleDirA
Дата: 01. 01. 2019
Заголовок: Hello AA!
Счетчик: 45
Ссылка: Блог / 2019 / articleDirA /

Название статьи: articleDirB
Дата: 01. 03. 2019
Заголовок: Hello BB!
Счетчик: 34
Ссылка: Blog / 2019 / articleDirB /

Название статьи: articleDirC
Дата: 01. 02. 2019
Заголовок: Hello CC!
Счетчик: 67
Ссылка: Blog / 2019 / articleDirC /

Ожидается в каталоге 2019

Название статьи: articleDirB
Дата: 01. 03. 2019
Заголовок: Hello BB!
Счетчик: 34
Ссылка: Blog / 2019 / articleDirB /

Название статьи: articleDirC
Дата: 01. 02. 2019
Заголовок: Hello CC!
Счетчик: 67
Ссылка: Блог / 2019 / articleDirC /

Название статьи: articleDirA
Дата: 01. 01. 2019
Заголовок: Hello AA!
Счетчик: 45
Ссылка: Blog / 2019 / articleDirA /

Это просто имена каталогов, но не дата скаждый файл data.php

1 Ответ

0 голосов
/ 24 октября 2019

Вы можете сначала сохранить все li в массиве, где вы можете установить дату в качестве ключа. После вы можете сделать krsort, который будет сортировать массив в порядке убывания согласно вашему требованию. Вы можете проверить код ниже:

$articleCollection = [];
foreach($currentYearPath as $articleDir_name) {
    require $articleDir_name.'/data.php';
    $articleCollection[strtotime($article['date'])] = 'your data here';
}
krsort($articleCollection);
echo implode("<br/>", $articleCollection);

Здесь вам нужно установить свои значения в формате li вместо "ваших данных здесь". Я надеюсь, что это сработает для вас.

Спасибо !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...