2010-08-19 4 views
1

파일 기반 주석 시스템에서 인라인 코멘트 (1 레벨 만 사용)로 작업하고 있습니다. newby 임에도 불구하고 사용자가 새 메모를 추가하고 @ [NUMBER]를 사용하여 다른 메모 아래에 답글을 추가 할 수있는 시스템을 만들었습니다.파일 기반 주석 시스템에서 "bumping up"게시물에 대한 아이디어

/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

내가 질문을 탈선하지 않지만, 당신은 왜 관계형 데이터베이스를 사용하지 않는 이거? – Hammerite

+0

@Hammerite 비록 당신의 의견을 표결했지만, 숙제 스타일 할당이나 제한된 자원을 가진 시스템에 대해 명심해야합니다. 플랫 파일 시스템은이 용도로는 거의 사용되지 않지만이 방법이 필요할 수도있는 합법적 인 이유가 많이 있습니다. 학습을 위해서 배우는 것도 이것의 완벽한 타당한 이유입니다. 그것은 우리 모두에게 우리의 발가락에 머물러야하고 상자 밖에서 항상 이점을 생각하도록 강요합니다. – CogitoErgoSum

답변

1

글쎄, 내가이 특별한 방법을 사용하는 지혜에 동의하지 않지만, 주문 텍스트 파일은 스레드 업데이트가 얼마나 자주 읽기/쓰기 잠금 문제가 될 수 있는지에 따라 충분할 것으로 보인다.

다른 옵션은 폴더 및/또는 게시물의 수정 시간을 확인하는 것입니다. http://php.net/manual/en/function.filemtime.php 나는 적절한 기능이라고 생각한다.

정렬과 관련하여 정렬 기능을 사용해야합니다. 내가 생각해 낼 수있는 가장 좋은 아이디어는 배열을 만들어 유닉스 타임 스탬프로 수정 한 시간을 어레이 인덱스로 사용할 때이다. 가장 새로운 것을 보여주기 위해 배열을 뒤집을 필요가 있을지 모르지만 나는 그것이 작동 할 것이라고 생각할 것이다. 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'); 
+0

흠 맞아요. Touch()를 사용하여 1.txt 파일을 업데이트 할 수 있었기 때문에 모든 파일을 검사하고 최근에 업데이트되었는지 확인할 필요가 없습니다. 감사합니다. 그런데 어떻게 올바른 방법으로 표시 할 수 있습니까? 어떻게 "시간별로 정렬합니까?" 다시 한번 감사드립니다. – Chris

+0

내 편집을 확인합니다. 그에게 blurb을 추가했습니다. – CogitoErgoSum

+0

수정 해 주셔서 감사합니다. – Chris

1

스레드가 마지막으로 업데이트 된 시간이 포함 된 각 폴더 (1, 2, 3 등 ...)에 파일을 첨부하십시오 (응답이 없거나 게시 할 수없는 경우 게시 될 수 있음) 마지막 회신의). 각 스레드를 표시 할 시간이되면 해당 파일의 시간을보고 표시 될 때 올바른 위치에 놓습니다.

  1. 은 쉽게 당신이 이 모든 정보를 주문 잃게 것을 의미 손상 : 내가 order.txt 파일을 생성을 통해이 작업을 수행 할 것

    이유는 하나의 파일이 있다는 것이다.

  2. 그것은 읽을 비효율적이다/매번 포스트 당신은 또한 각 폴더에서이 텍스트 파일로 할 수있는 다른 데이터를 부착 할 수

추가됩니다 큰 파일을 다시 작성합니다. 이는 Windows가 각 폴더의 thumbs.db 파일에 축소판을 저장하는 것과 같습니다.

+0

고마워,하지만 (첫 번째 답변처럼) 모든 타임 스탬프를 얻은 후에 제대로 표시하는 방법을 모르겠다. 먼저, 나는 무엇이 먼저 오는지를 결정하기 위해 모든 타임 스탬프가 필요하다. 그런 다음 순서를 어떻게 든 결정하고 타임 스탬프에 해당하는 파일을 출력해야한다. 감사! – Chris

1

예쁜 유사한 box9에 있지만, 다른 접근 방식.
각 스레드 폴더에서 파일을 만듭니다. 다음과 같이 가정 해 봅시다. random.timestamp.txt ($file = 'random.'.time().'.txt';).
스레드 내에서 변경 사항이있을 때마다이 파일의 이름을 새 타임 스탬프로 바꿉니다. 스레드를 표시 할 때 각 스레드 타임 스탬프 파일을 가져 와서 원하는대로 정렬하십시오 (DESC/ASC). 그와 비슷한 것 ..

+0

어쨌든 타임 스탬프를 쉽게 비교할 수 있습니까? 내가 그들을 모두 회수 한 후에 어떻게 타임 스탬프를 쓰레드로 추적 할 수 있었는지 궁금합니다. 답변 해 주셔서 감사합니다! – Chris

+0

타임 스탬프는 숫자이므로 원하는대로 비교할 수 있습니다. 그러나 당신의 질문을 완벽하게 이해할 수 있을지 확신 할 수 없습니다. – jolt

+0

예, 그것이 의미하는 바입니다. HH : SS DD/MM/YYYY 형식입니다. – Chris

1

나는이 문제에 대해 투표를 거절 할 것이지만 여기에 관계형 데이터베이스를 사용하지 않을 경우 파일/폴더 이름의 주문 정보를 만들어 보지 않으시겠습니까? 따라서 파일/폴더 이름 체계의 일부로 포함 된 메타 데이터로 주문할 수 있습니다 (여기에서 시작한 것처럼) 스레드 디렉토리에는 1_2/(첫 번째 스레드, 두 번째 주문) 2_1/(두 번째 스레드, 가장 최근 스레드), 3_0/(세 번째 스레드, sticky < - 기능 크리프를 용서하십시오.) 이렇게하면 분할 기능을 사용하여 파일 이름에서 관련 메타 데이터를 가져올 수 있습니다.

최종 폴더 구조는 다양 업데이트에서 변경할 수 있지만, 스냅 샷이 같을 수있는 것 :

/threads/ 
      1_2/ 
       1.txt 
       2.txt 
      2_3/ 
       1.txt 
       2.txt 
       3.txt 
      3_1/ 
       1.txt 
       2.txt 
+0

읽기 쓰기 잠금이 이에 영향을 미칩니다. 즉, 1_200901011155라는 폴더를 업데이트하려고합니다. 이미 1_200901011159로 변경되었습니다. 다른 문제는 들어 가지 않지만 흥미로운 아이디어입니다. – CogitoErgoSum

+0

예, 저는 그 문제에 대해 직접 알아 봤습니다. 프로젝트의 범위가 그러한 종류의 정확성과 상호 작용의 양을 지시하면 관계형 데이터베이스의 필요성을 나타낼 수도 있습니다. 운영 체제의 파일 메타 데이터 사용에 대한 귀하의 아이디어를 좋아합니다. –

+0

아, 내 "order.txt"파일 아이디어 대신 재미있는 생각이 있어야합니다. 감사합니다 .-) – Chris

관련 문제