Extra Form
PHP PHP 7.2
CMS XpressEngine

지름 하려는 것이 클릭 할때 마다 클릭한 회원의 회원번호를 담으려고 합니다.

$exvars = unserialize($tmp_output->data->extra_vars);

$exvars->click = Context::get('member_srl');
$args->extra_vars = serialize($exvars);

 

 

이렇게 하면 문제는 click 이 같기 때문에 나중에 클릭한 회원번호 하나만 저장이 됩니다.

 

제가 하고 싶은것은 

 

click에 (회원번호1,회원번호2,회원번호3) 이렇게 클릭될때 마다 배열형태로 값을 가지게 하고 싶은데요.

어찌 해야 할지 조언 부탁드립니다.

 

 

  • profile

    $exvars->click[] = Context::get('member_srl');

     

    여기서 주의할 점은

    1. 배열이 아닌 것이 이미 들어가 있을 경우 에러가 날 수 있음... 이미 값이 있는 경우 배열로 변환해 주어야 함

    2. Context::get('member_srl') 값을 신뢰할 수 있는가?

    입니다.

  • profile profile

    여전히 O:8:"stdClass":1:{s:5:"click";s:1:"4";}

    이렇게 마지막 회원번호만 들어가네요.

     

    $args = new stdClass;
        $args->document_srl = Context::get('document_srl');
        $tmp_output = executeQuery('addons.clickcheck.getDocumentExtra', $args);
        $exvars = unserialize($tmp_output->data->extra_vars);
        $exvars->click[] = Context::get('member_srl');
        $args->extra_vars = serialize($exvars);
            // 확장 변수에 등록 처리
        $tmpout = executeQuery('addons.clickcheck.updateDocumentExtra', $args);

    click을 임의로 다른 값으로 바꾸면 물론 새로운 값으로 들어갑니다. 배열이 아니죠.

  • profile profile
    배열이 아닌 것이 이미 들어가 있으면 에러가 날 수 있습니다. (새 값이 제대로 안 들어갈 수 있습니다.)
    member_srl을 추가하는 줄 바로 위에 추가해 보세요.

    if($exvars->click && !in_array($exvars->click)) $exvars->click = array($exvars->click);
  • profile profile
    네. 이미 들어간 값 없는 상태에서 테스트 하고 있어요.

    잠시 후 이 댓글 내용 반영해 테스트 해보겠습니다.
  • profile profile
    와.. 이제 배열로 들어가는 것 같습니다. 하루 종일 삽질은 한번에 정리해 주셨네요. 너무 감사합니다.

    한가지 더 도움을 요청드려봅니다.
    $exvars->click 배열에 담긴 항목 숫자를 카운트 하고 싶습니다.

    (회원번호1,회원번호2,회원번호3) 일경우 3의 결과를 확인하고 싶어서요.
  • profile profile
    count($exvars->click)
  • profile profile
    감사함니다!
  • profile profile

    꼬리물기 질문드려 죄송합니다.

    if(in_array((string)Context::get('member_srl') ,$exvars->click)) return;

    위와 같이 로그인한 회원이 이미 클릭한 회원일 경우 리턴 시키려 하는데 그냥 통과가 되네요.

     

    회원번호 4번인 회원이 3번 클릭해 보았습니다.

    O:8:"stdClass":1:{s:5:"click";a:2:{i:0;a:2:{i:0;a:1:{i:0;s:1:"4";}i:1;s:1:"4";}i:1;s:1:"4";}}

    이렇게 저정이 되면 배열로 잘 된건지 모르겠네요.

    $exvars->click 값이 혹시 (회원번호1,2,3) 의 형태가 아닌가요??? 물론 윗줄에 말씀해 주신 코드는 들어가 있습니다.

     

     

        if(count($exvars->click) >= 3) {     echo "<script>alert(\"확인!\");</script>";     }

     

    요 코드로 확인해봐도 알림이 뜨지 않는거로 보아 카운트도 맞지 않는게 뭐가 잘못된거 같네요..  ㅡㅡ;

  • profile profile
    배열 안에 배열이 또 들어가면서 전체적으로 뭔가 좀 꼬인 것 같습니다 ㅠㅠ

    이제 보니 위에서 알려드린 코드에 오타가 있네요. in_array가 아니라 is_array인데
    공교롭게도 in_array 역시 존재하는 함수이다 보니 에러를 뿜지 않고 넘어가버린 것 같습니다.
  • profile profile
    if($exvars->click && !is_array($exvars->click)) $exvars->click = array($exvars->click);
    로 테스트를 해보면 될까요??
  • profile profile
    네. 기존에 잘못 들어간 것은 날려버리든지 해야겠네요.
  • profile profile
    감사합니다. 이제 완벽하게 되네요.

    도움 주셔서 정말 괜찮은 기능 구현할 수 있게 되었습니다.

    1번만 신고(의견반영) 할 수 있고 , 신고 횟수에 따라 이후 코드를 넣어 원하는 액션을 할 수있게 되었습니다.
    이후 사용자정의 값을 변경하는 코드를 넣어 해당 게시글의 사용정의 값을 자동으로 변경하는 코드를 추가할 예정입니다.

    사용자정의 값이 radio 선택값인데 그냥 값을 직접 넣어도 되는지는 한번 테스트 해보고 안되면 질문이 또 올라갈 것 같습니다. ㅋ