Идеи для "увеличения" постов в файловой системе комментирования - PullRequest
1 голос
/ 19 августа 2010

Я работаю над файловой системой комментирования со встроенными комментариями (только 1 уровень). Несмотря на то, что я новичок, мне удалось создать систему, в которой пользователи могли бы добавлять новые комментарии и использовать @ [NUMBER], чтобы добавить свой ответ под другим комментарием.

Моя структура файлов и папок выглядит следующим образом:

/threads/
         1/
            1.txt
            2.txt
            3.txt

         2/ 
            1.txt
         3/
            1.txt
            2.txt
            3.txt
            4.txt

Папка в темах имеет номер темы (используется для ответа) в качестве своего имени, а 1.txt содержит содержимое сообщения «мать». Каждый пост выше 1 является ответом.

Так что я мог бы показать потоки в том порядке, в котором они были сделаны, или показать их вверх ногами, но они застрянут в этом порядке (я использую цикл для поиска папок, а затем увеличить или уменьшить номер папки). У кого-нибудь есть идеи о том, как я могу создавать темы, которые получают ответы наверх списка?

Я подумал о файле order.txt, в котором номера потоков указаны в определенном порядке, и, когда получен ответ на поток X, сценарий должен поставить X вверху этого списка (или внизу, что легко инвертировать).

Предложения очень ценятся!

Ответы [ 4 ]

1 голос
/ 19 августа 2010

Я, вероятно, проголосую за это, но если вы не собираетесь использовать здесь реляционную базу данных, почему бы не сделать информацию о заказе частью имени файла / папки?Таким образом, вы можете упорядочить по метаданным, которые содержатся как часть схемы имен файлов / папок (как вы начали здесь делать), ваш каталог потоков будет содержать 1_2 / (первый поток, второй порядок) 2_1 / (второй поток, самый последний), 3_0 / (третий поток, липкий <- пожалуйста, простите за ползучесть). Это позволит вам использовать функцию разделения для получения соответствующих метаданных из имен файлов.обновить, но может выглядеть примерно так на снимке: </p>

/threads/ 
          1_2/
               1.txt
               2.txt
          2_3/
               1.txt
               2.txt
               3.txt
          3_1/ 
               1.txt
               2.txt
1 голос
/ 19 августа 2010

Что ж, хотя я не согласен с мудростью делать это именно таким образом, текстовый файл заказа выглядит достаточно хорошо, учитывая, как часто при обновлении ваших потоков могут возникать проблемы блокировки чтения / записи.

Другой вариант - проверить измененное время для папок и / или сообщений. http://php.net/manual/en/function.filemtime.php Я считаю, что это будет подходящая функция.

В отношении сортировки вам необходимо использовать функцию сортировки. Лучшие идеи, которые я могу придумать, - при создании массива конвертировать измененное время в метку времени Unix и использовать его в качестве индекса массива. Возможно, потребуется инвертировать массив после, чтобы сначала показать новейшие, но я думаю, это сработает. Я бы предложил использовать функцию mktime вместе, чтобы получить красиво отформатированную дату / время, а затем использовать ее для индекса.

Альтернативой является сохранение массива в массиве и выполнение чего-то подобного:

$threadArray = array(
   array("thread" => "1", "timemodified" => "12703048849"),
   array("thread" => "2", "timemodified" => "12703048842"),
   array("thread" => "3", "timemodified" => "12703045349"),
   array("thread" => "4", "timemodified" => "12703021449"),
);

function sortByTime($a, $b)
{
  return strnatcmp($a['timemodified'], $b['timemodified']);
}

# sort
usort($threadArray, 'sortByTime');
1 голос
/ 19 августа 2010

Очень похоже на box9 , но с другим подходом.
В каждой папке потока создайте файл, скажем - random.timestamp.txt ($file = 'random.'.time().'.txt';).
При любых изменениях в потоке вы переименовываете этот файл с новой отметкой времени.Когда вы отображаете потоки, извлеките файл отметок времени каждого потока и выровняйте их по своему желанию (DESC / ASC).Нечто подобное ..

1 голос
/ 19 августа 2010

Вставьте файл в каждую папку (1, 2, 3 и т. Д.), Который содержит строку со временем последнего обновления темы (может быть, когда она была опубликована, если у нее нет ответов, или времяпоследний ответ).Когда пришло время отобразить каждый поток, посмотрите на время в этом файле и установите его в правильное положение при отображении.

Причина, по которой я бы сделал это вместо создания файла order.txt, заключается в том, что один файлis:

  1. Легко искажается, что означает, что вы потеряете ВСЕ данные заказа.
  2. Неэффективно читать / переписывать большой файл каждый раз, когда добавляется сообщение

Вы также можете вставить другие данные, которые вам могут понадобиться, в этот текстовый файл в каждой папке.Это похоже на то, как Windows хранит миниатюры в файле thumbs.db для каждой папки.

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