@socialskyo님의 게시글을 보고 저도 출석부를 사이드로 빼볼까하고 위젯을 만들어봤습니다.

https://xetown.com/rxe_tip/761319

 

오늘 이상하게 잠이 오지않아서 코드, 디자인을 좀 다듬어서 배포합니다.

어두운 배경의 홈페이지에서 디자인 했기때문에 흰색 배경에 잘 어울릴지는 모르겠습니다.

 

 

간단 출석부 위젯 0.5

pr_take_roll_v0.5_repack.zip

 

default스킨 수정본

default.zip

배포된 위젯에 포함된 기본 스킨 입니다. url생성에 문제가 발된되어서 수정 했습니다.

widgets/pr_take_roll/skins폴더 아래에 압축 풀어서 사용하시면 됩니다.

그냥 수정해서 사용하실 분든은 default.html열어서 41, 46라인 두곳에서 {getUrl('mid','attendance')} 를 찾아서

{getUrl('','mid','attendance')}로 수정해서 사용하시면 됩니다.

 

 

변경사항

  • 출석 리스트 가져오기 쿼리가 변경되었습니다.
  • 능동적인 캐시 운영을 위해 캐시 관리 방식이 변경되었습니다.
  • 프로필 이미지 출력 스타일에 width를 지정 해서 레이아웃 통일성을 보강했습니다.
  • 출석 버튼에 나의 랭킹 출력 방식을 선택할 수 있습니다. (등수만 표시 / **명중 *등으로 표시)

 


 

 

 

 

간단 출석부 위젯 0.4

pr_take_roll_v0.4.zip

변경사항

출석 완료후에는 정보가 표시된 버튼 클릭시 출석부로 합니다.

최고 관리자에게 기본 제공되던 추가 정보를 선택 가능하도록  변경 했습니다.

 


 

 

 

 

간단 출석부 위젯 0.3

pr_take_roll_v0.3.zip

 

변경사항

  1. 몇가지 CSS 수정.
  2. 디자인 통일성을 위해서 이미지 프로필이 없는 사용자는 기본 프로필 이미지로 대체 합니다.
  3. 하단의 페이지 이동버튼이 항상 중앙에 오도록 수정.
  4. 오브젝트 캐시 사용 옵션 추가. (XE에서 기본으로 제공되는 위젯 캐시 기능은 사용하지 마세요. 위젯이 오동작 합니다.)
  5. 버튼 색깔 추가. (제공되는 버튼 색이 새로 고침마다 변경되는 '랜덤'도 선택 가능 합니다.)
  6. 랜덤 인사말 남기기 추가. (출석부 모듈의 설정에 인사말을 등록한 경우에만 작동 합니다.)
  7. 출석 권한을 제한 할 수 있도록 옵션 추가.
  8. 출석자 목록 출력 선택 옵션 추가 (출력 안함, 로그인 사용자, 출석한 사용자, 모두에게)
  9. 목록 상세 설정 추가 (기본(등수 + 프로필이미지 + 닉네임 + 획득포인트)정보 이외에 연속 출석일, 총 출석일, 인사말의 출력을 선택 할 수 있습니다. 선택시 출력 순서는 인사말, 연속 출석일, 총 출석일 순 입니다.)

pr_take_roll_0.3_config.png

 

 

 

 

간단 출석부 위젯 0.2

pr_take_roll_v0.2.zip

 

pr_take_roll_config_0.2.png

 

변경사항

  • 비 로그인 사용자에게도 출석 독려 버튼 노출 (클릭시 로그인 페이지로 이동)
  • 기본 스킨에 컬러셋 추가 (어두운 바탕용, 흰색 바탕용)
  • 나의 출석 순위 표시기능 추가
  • 출석자 목록 출력기능 추가 (출석자 목록은 로그인 사용자에게만 제공)

페이지 매기기에 pagination.js v2.0.8을 사용했으며 이 라이브러리의 라이센스는 아래와 같습니다.

Released under the MIT license.
https://github.com/superRaytin/paginationjs

 

pr_take_roll_nlogin_0.2.png

 

pr_take_roll_0.2.png

 


 

 

 

간단 출석부 위젯 0.1

pr_take_roll_v0.1.zip

 

pr_take_roll_config.png

위젯에 출석 버튼만 노출되며 버튼 클릭시 두가지 동작을 지원합니다.

- 바로 출석 : 위젯의 출석 버튼을 클릭하면 바로 출석을 시도합니다.

- 출석부로 이동 : 위젯의 출석 버튼을 클릭하면 출석부 페이지로 이동합니다.

버튼 색깔 : 3가지의 색상을 지원합니다.

 

pr_take_roll.png

출석부 위젯은 하단부 버튼 출력 부분입니다.

 

pr_take_roll_admin.png

관리자의 경우에는 버튼 하단에 추가 정보가 표시되며 아래의 순서 입니다.

오늘 출석 체크한 회원 수 / 오늘 로그인한 회원 수 / 사이트의 총 회원 수

디자인에 Font Awesome을 사용하였으나 위젯에서 따로 로드하지 않습니다. 레이아웃등에서 따로 로드해 주셔야 합니다.

출석 이전에는 출석 독려 메시지가 출력되며 출석 후에는 연속 출석일수와 총 출석일수가 표시됩니다.

 

 

pr_take_roll_btns.png

출석시간 제한기능을 사용하고 있을때 지각의 경우나 관리자 출석을 제한했을때에도 대응합니다.

 

  • ?
    멋지네요 ..
  • profile
    헉!!! 이런 멋진 위젯을!! 매번 정말 감사합니다ㅠㅠ
  • profile
    출석부 최신 버전만 호환 되나요? 업데이트 안했더니 까만 줄로 연속 일수만 나오네요ㅋ 그래도 좋습니다. 모바일 메인에 빼놨어요!
  • profile profile
    위에 있는 프로필부분은 다른 위젯인것 같아요!
  • profile profile
    아항! 감사합니다!
  • profile profile
    출석부 위젯은 출석 버튼만 출력해줘요 ^^;
    위쪽 로그인 폼(프로필 출력) 부분은 레이아웃에 코딩한 겁니다.
    위젯 버튼 부분만 스샷해보니 안이뻐보여서 할수없이(?) 프로필 출력 부분까지 포함 했어요 ㅎㅎㅎ
  • profile profile
    출첵 독려로 최고입니다! 진짜 감사해요!
  • profile
    헐 ! 완전 예뻐요!
  • ?
    와~~~대박~~~~~~~~~~~~~~~~~~~~~
  • profile
    감쏴합니다.~~
  • ?

    오! 멋져요... 

  • ?
    와우!!! 감시합니다
  • profile
    +ㅁ+
  • ?
    가능하다면 오늘 나의 등수가 나오면 좋겠습니다. ^^
  • ? profile
    넵, 나의 등수와 출석자 리스트를 표시할 수 있도록 수정 해 볼께요.
  • profile profile
    오 출석자는 없지만 갇고싶은 위젯입니다 ㅎㅎㅎㅎ
  • profile
    훌륭한 자료 공유해주셔서 감사합니다.
  • ?
    한가지 궁금한게 출석이 가능한 상태인데, '내일은 꼭 출석 도장 찍고 포인트 받으세요' 이런 문구가 뜨는거죠?
  • ? profile
    출석부 모듈의 설정에 들어가서 저장 버튼을 다시한번 눌러보세요.
    그대로 이상이 있으면 출석부 모듈의 '시간제한 여부'설정을 어떻게 하셨는지 알려주시겠어요?
  • profile ?
    시간제한여부는 '아니오'라고 설정되어 있고 저장버튼 눌러도 같은 메세지가 뜹니다. 저 말고 다른 분의 본 위젯이 설치된 사이트에 가도 같은 메세지가 뜨네요...
  • ? profile
    그렇다면... pr_take_roll.class.php 파일을 열어서 if($is_available === false) 부분을 찾아서 if(!$is_available)로 변경해서 테스트 해 보세요.
  • profile ?
    와~ 되네요! ㅎ 이제 미출첵상태에서 출첵독려 메세지가 뜨네요 ㅎ 감사합니당 ^^
  • ? profile

    아마 출석부 ver 7.0.1(2015-07-01) 버전 이하를 사용하시나 보네요.
    살펴보니 7.0.1까지는 availableCheck()가 리턴하는 값이 0 or 1 이었는데 이후 버전부터는 true or false 로 변경되었네요. 그래서 오작동 했던거 같습니다.
    다음 버전의 위젯에서는 조건문을 수정해서 호환성을 높여야겠네요. ㅎㅎㅎ

    그리고 @람보님께서 출석부 성능을 많이 향상 시키셨으니 특별한 문제가 아니라면 최신버전을 사용해 보세요.

  • profile ?
    넵! 감사합니다 ㅎㅎ
  • profile
    너무 감사합니다 !!
  • ?
    좋은 자료 공유해주셔서 감사드립니다!
  • ?
    XE타운에도 이걸 적용해주면 좋겠어요...
    출석 까먹는 사람이 많으니 ㅎㅎ
  • profile
    사실 제 사이트는 연령대가 40대 50대가 주방문객이라 필요없을 것같은 위젯인데...이뻐서 자꾸 넣어볼까 계속 고민하게 만드는 위젯이네요 ^_________^ 결국 이러다가 넣는다는...^^;
  • ?
    잘쓰겠습니다 !!!!
  • profile
    흰색 바탕에도 엄청 잘어울려요! 진짜 감사합니다! 회원들도 좋아하네요!
  • ?
    위젯폴더 안에 설치하면되나요?
  • ? profile
    네 위젯폴더 아래에 설치하시면 됩니다. 출석부 모듈에 의존적이기때문에 출석부 모듈도 설치되어 있어야 합니다.
  • ?

    너무 멋저요!!!   옵션이 너무 좋아졌군요. 캐시도 그렇고요. = 그때 그떄 보여주고 싶으면 기존처럼

    오브젝트 캐시도 굳이 안써도 되죠? 

     

    그나저나 아래 부분이 필요 없는 경우에도 옵션 처리가 되면 좋겠습니다. 이걸 안쓰면 캐시 설정이 의미 없어지는 거라면 같이 disable 되면 더욱 좋구요

     

    2017-10-19 09 07 56.png

     

    감사합니다. ^^

     

  • ? profile
    네 옵션처리 해 볼께요. 캐시는 출석자 리스트와 스샷해주신 운영자용 정보 두부분에 적용되어 있습니다. 캐시 사용하지않으면 매번 db에 쿼리 날려서 최신정보를 가져오구요.
  • profile ?
    네넹. 감사합니다~
  • ? profile
    업데이트 했습니다.
  • profile ?
    감사합니다. ^^ 그나저나 기분이 랜덤 색상이 동작 안하는 기분입니다. 저는 캐시를 0으로 사용하거든요.
  • ? profile

    제 테스트서버에서는 잘 되길래 그냥 shuffle()을 사용했는데 그게 시스템을 타는것일까요? 

     

    if($widget_info->btn_color == 'random')
    {
    $btn_array = array('orange', 'blue', 'lred', 'red', 'green', 'dgrey', 'lpurple', 'purple');
    shuffle($btn_array);
    $widget_info->btn_color = $btn_array[0];
    }

     

    위의 코드 부분을 아래 처럼 변경 해 보세요.

     

    if($widget_info->btn_color == 'random')
    {
    $btn_array = array('orange', 'blue', 'lred', 'red', 'green', 'dgrey', 'lpurple', 'purple');
    $widget_info->btn_color = $btn_array[mt_rand(0, count($btn_array) - 1)];
    }

     

     

    이렇게 변경해서 잘 된다면 

    //인사말설정
    if($args->greeting == 'rand' && $config->greeting_list)
    {
    $greeting_list = explode("\r\n", $config->greeting_list);
    shuffle($greeting_list);
    $widget_info->greeting_name = $greeting_list[0];
    }

     

    랜덤 인사말 부분도 찾아서 아래처럼 변경 해 주세요.

     

    //인사말설정
    if($args->greeting == 'rand' && $config->greeting_list)
    {
    $greeting_list = explode("\r\n", $config->greeting_list);
    $widget_info->greeting_name = $greeting_list[mt_rand(0, count($greeting_list) - 1)];
    }

     

  • profile ?
    흠...안되는군요^^. 혹시 화이트 스킨이라서 그런걸까요?
    일단 그냥 써도 될것 같긴한데.... 시간나실때라도 나중에 봐주시면 고맙겠습니다.

    찔끔 찔끔 이야기 드리는 것 같아 죄송하지만

    현재
    나의 랭킹 xx위

    보다는 (xe타운에서 보니, "위" xx"등"으로 표시한 등수놀이에 익숙한듯합니다.)

    해서 저는
    나는 xx등 으로 수정해서 사용 중입니다.

    그리고 가능하다면 현재 admin에게만 주어진 해당 정보를 활용하여

    admin만이 아니라 유저에게 보이는 버튼에도
    xx중(총출석수)에 나는 xx등 이렇게 표현이 가능해도 좋겠습니다. (총가입수/총회원수는 좀 민감한 부분이라...필요 없고요..)
  • ? profile
    컬러셋과는 상관없는 부분입니다. 컬러를 'random'으로 선택하시고 if($widget_info->btn_color == 'random') 이 조건문 안에 debugPrint();로 if문 안에 매번 들어오는지 확인 해 보세요.
    아니라면... 다른 캐시가 관여하고 있을지도 모르겠습니다.!?

    '?등'이 더 입에 붙기는 하네요.. ㅎㅎㅎ
    회원에게 제공할 추가 정보 부분도 괜찮아보이네요... 다음번에 적용 하겠습니다.

    아이디어는 언제든지 환영 입니다 ^^
  • profile
    오브젝트 캐시를 따로 만드셨네요.

    출석부 스킨에 있는 방식 그대로 쓰기를 권장합니다.

    언제한번 정리해서... 드릴께요.
  • profile profile
    네, XE에서 위젯에 기본 제공되는 캐시를 사용하면 오동작 한다는 리포트가 있어서
    위젯에서 따로 쿼리날리는 부분만 오브젝트 캐시를 사용했습니다. 캐시 구현부분은 람보님 출석부 모듈보고 따라서 했습니다 ㅎㅎㅎ
    물론 대부분의 정보는 출석부 모듈에서 가져옵니다.
  • profile profile
    어차피 출석 데이터를 출력하는데 오브젝트 캐시를 사용한다면 오히려 ㅠ 출석부에 있는 모듈 핸들러를 가져오는것이 더 나을지도 몰라요 ㅎㅎ 이 부분은 제가 볼께요 :)
  • profile profile

    https://github.com/bjrambo/pr_take_roll 여기에서 캐시부분 설정하는 부분 건드렸고요 출석부에서 출석시 캐시 삭제해주는 기능도 추가할께요 :)

    코드리뷰 해보세요 -> https://github.com/bjrambo/pr_take_roll/commit/780980406cdc4c298865b1823507c4f2c1bf455d

     

  • profile profile
    캐시 유효기간을 하루로 잡으셨네요? 그럼 유저 출석때나 특정 시점에 출석자 리스트를 업데이트 해야할텐데 출석부 특성상 특정 시간대에 이용이 많이 몰리는데 그때마다 캐시 갱신하기보다는 그냥 유효 시간을 30~60초 정도로 사용해서 리스트를 갱신해서 사용하는게 좋지 않을까요?

    그리고 'widgets.pr_take_roll.getAllAttendanceList' 쿼리 날릴때 정렬 옵션값 상관없이 'asc'로 쿼리하고 나중에 따로 옵션값에따라 정렬 해준건... 오름차순으로 불러와야 배열의 키값을 바로 해당 사용자의 출석 순위로 사용하기 편해서 그렇게 했는데...
    이렇게 옵션에 따라 쿼리 정렬 방식이 달라진다면 출석자 목록 순위 구하는 로직도 따로 추가해야 할꺼 같습니다.
  • profile profile

    그리고... 출석시 등수를 테이블에 기록하는것을 적극 건의합니다~~~ ^^;
    유저들이 자신의 등수에 관심이 많으신거 같으니 그날의 등수를 테이블에 기록하는것도 괜찮을꺼 같습니다.

  • profile profile
    1. 캐시시간.
    캐시 시간은 어차피 마지막에 보시면 아시겠지만 출석시 캐시파일을 해당 위젯이 있을경우 같이 재생성하도록 출석부 모듈에 반영예정입니다. 그래서 1일의 시간을 설정하도록 하는것이고, 30초~ 60초의 사이는 사실 방문자가 많지 않은 사이트들도 많이 있어서 해당 사이트들의 입장에서는 있으나 마나한 옵션이 될 것입니다. 그래서 더 세분화해서 캐시를 하도록 하여 해당 사용자들에게도 안정적인 서비스를 제공하기 위함이에요.

    2. 아 순위 부분도 문제가 있겠군요. 아래 등수 테이블 기록을 좀 고민해보고 반영할지 안할지 고민해볼게요..

    이게출석부데이터가 많은 사이트들이 넘쳐서..(타운에만 데이터가 몇만개 될 수 있다고 생각해서..)
  • profile profile
    출석부 모듈에서 직접 처리를 해준다면야 금상첨화죠... +.+

    출석 등수 처리는... 기존 데이터 처리가 문제긴 하겠네요.
    다만 제일 만만한 attendance_total 테이블에 rank필드를 추가하고 기록하는것도 괜찮을꺼 같다는 의견 입니다.
  • profile profile
    어떤테이블에 넣기에도 애매합니다..ㅠ
  • profile profile
    동감입니다. attendance_total에 추가하는것도 당일 등수만 쉽게 불러올수있고 다른 날짜는 또 기존 방식대로 계산을 해야 하니까요...
    등수 기록을 위해 새 테이블을 만들자니 낭비같고... @.@
    db건드리는건... 애매할때는 안하는게 좋습니다 ㅎㅎㅎ
  • profile
    댓글들 지켜보니 저도 덩달아 흥분됩니다 8ㅁ8 여러 의견들이 하나로 합쳐지면서 뭔가 굉장한 것으로 점점 업그레이드 되는걸 지켜보는 기분이네요 ㅋㅋ
  • ?
    순위부분이 어떻게 출력되는 건지 궁금합니다! 그날 당일 출석의 선착순으로 출력이 되나요?
  • ? profile
    출석하면 출석 시간이 함께 기록됨니다. 위젯에서 출석 시간순으로 정렬해서 목록을 만들어서 순위를 출력합니다.
  • profile
    진짜 너무 감사합니다! 좋은 위젯 감사히 쓰겠습니다!
  • ?
    멋있어요 간편한 출석 위젯 찾고있었는데... 감사히 잘쓰겠습니다!
  • ?
    오늘 적용해봤는데 너무 좋아요! 정말 좋은 자료 감사합니다. 잘쓰겠습니다!!
  • ?
    오늘 처음 xe타운 가입해봤는데 좋은 자료가 많네요. 항상 xe공홈만 이용했었는데.. 잘사용하겠습니다!
  • ?
    적용해도 아무것도 안뜨네요 ㅠ
  • ?
    죄송합니다, 잘됩니다, default 스킨 넣을때 경로를 잘못 했네요 ㅜㅜ 죄송합니다.
  • profile
    줗은자료 감사합니다.
  • profile
    감사합니다!
  • profile
    잘사용하겠습니다.