2009-11-06 3 views
2

나는 (그가 사용하지 않을 주류 콘텐츠 관리 시스템의 부 풀림없이) 그가 필요로하는 것을 구체적으로하는 나의 고객 중 한 명을 위해 간단한 CMS를 썼다.CMS에서 페이지를 주문하는 방법은 무엇입니까?

CMS를 사용하면 페이지 및 뉴스 (세로 막대에 표시되는 짧은 메시지)의 두 가지 유형의 콘텐츠를 만들고 관리 할 수 ​​있습니다.

페이지가 사전 순으로 정렬 된 웹 사이트의 탐색 메뉴에 표시됩니다. 고객은 페이지를 사용자 정의 순서대로 정렬 할 수 있기를 원합니다.

프로그래밍 방식으로이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 나는 "priority"라는 컬럼을 페이지 테이블에 추가하려고 생각하고있다. 숫자가되며 페이지는이 숫자를 기준으로 오름차순 또는 내림차순으로 정렬됩니다. 클라이언트는 모든 페이지에 대해이 번호를 편집 할 수 있습니까?

궁금한 점이 무엇입니까? 이 작업을 수행하는 더 좋은 방법이 있습니까? 이 목적을위한 디자인 패턴은 무엇입니까?

+2

'bloat [...] 그는 결코 사용하지 않을 것이고,'클라이언트는 페이지를 분류 할 수 있기를 원합니다. '- 이것은 앞으로 더 많은 사람들의 첫 번째 바퀴 일 것입니다 ... –

+0

실제로, 그는 이미 웹 사이트를 사용하고 거기에 콘텐츠를 추가하십시오. 이것은 약간의 수정 일뿐입니다 (프레임 워크를 사용하므로 이처럼 작은 변경을 쉽게 할 수 있습니다). 제가 구현할 때 아무런 문제가 없습니다. 다른 사람들이이 문제에 어떻게 적응하는지 듣고 싶었습니다. –

답변

7

필자는 개인적으로 jQuery ui sortable 플러그인을 사용합니다. 클라이언트는 목록에서 항목을 끌어다 놓아 순서를 변경할 수 있습니다.

다음 jQuery를 다시 사용하여 항목 목록을 반복하고 ID의 CSV 목록을 컴파일 한 다음 서버로 보냅니다.

var imageList; 

function init() { 
    imageList = $("#imagelist"); 

    if(imageList.length > 0) { 
     imageList.sortable({stop:onStopSorting}); 
    } 
} 

function onStopSorting() { 
    var datas = imageList.find("span.data"); 
    var result = new Array(); 
    for(var i = 0; i < datas.length; i++) { 
     result.push(datas.eq(i).html()); 
    } 
    $("#imageSort").val(result.join(",")); 
} 

와 서버

는 :

if(isset($_REQUEST["imageSort"]) && $_REQUEST["imageSort"] != "") { 
    $imageIdList = explode(",", $_REQUEST["imageSort"]); 

    for($i = 0; $i < count($imageIdList); $i++) { 
     $this->setImagePriority($imageIdList[$i], $i+1); 
    } 
} 

그것은 좋은 디자인 패턴보다 더 "빠른 앤 더러운"이 될 수도 있지만 작동합니다.

+0

약간 다른 방식으로 구현했지만 jquery UI sortable 플러그인을 사용했습니다. 고마워 :) –

4

예산이 부족한 경우 편집 또는 제어 할 수있는 필드를 사용자에게 제공합니다. 쉬운 방법은 값을 복제 할 수있는 정수 필드입니다. 숫자를 선택하고 필드에 수동으로 입력 할 수 있습니다. 분명히, 이것은 빠르고 지저분한 수정입니다 - 사용자가 큰 순서의 페이지를 설정 한 다음 특정 슬롯의 중간에 뭔가를 추가하려고하면 문제가 발생합니다. 우선 순위 값이 동일하므로 정렬해야합니다. 다른 것.

또 다른 가능성은 플로트 값을 사용하는 것입니다. 이 경우 사용자는 번호를 볼 수 없습니다. 사용자가 항목 A와 B 사이에 항목 C를 놓으려는 경우, 정밀도가 부족하기 전에 십진 정밀도로 인해 이러한 종류의 작업을 여러 번 (여러 번) 수행 할 수 있다는 것을 알고 있으므로 우선 순위를 C=(A+B)/2으로 설정합니다. 유지 관리 스크립트를 사용하여 데이터를 순서대로 가져오고 새 값을 할당 할 수 있습니다.이 스크립트는 한 달에 한 번 또는 일년에 한 번 실행할 수도 있습니다.

멋진 것은 아니지만 구현하기가 저렴합니다.

+2

jquery 정렬 플러그인을 사용하여 사용자가 관리자 패널에서 페이지를 드래그 앤 드롭 할 수 있으며 마우스로 페이지를 드래그 앤 드롭 할 때마다 데이터베이스에 새 페이지 순서를 저장하는 데 AJAX를 사용했습니다. . 내가 기대했던 것보다 쉬웠다. –

+0

오, 좋다! 나는 AJAX에 약하다. 그래서 나는 어렵다고 생각하는 경향이있다. 좋은 세상과 저렴한 세상의 장점을 모두 누릴 수 있습니다. 그것이 당신이 원하는 방식입니다. –

관련 문제