묻고답하기
이 조건문에서 뭐가 잘못된 걸까요?
2008.09.10 10:17
제가 설명을 이해하기 어렵게 적었다는 지적에 따라 간략히 줄이겠습니다. 제가 적은 댓글이 바로 요약분이기도 합니다.
원래의 글은 회색으로 아래에 놔두겠습니다.
<!--@if(!$logged_info->is_admin=="Y" && !$oDocument->get('member_srl'))-->({$oDocument->getIpaddress()})<!--@end-->
라는 문장이 있습니다.
이 문장은 제가 다른 문장을 참조해서 만든 것인데, 저는 이 문장을,
"만약 현재 유저가 최고관리자가 아니고 (=아닐 경우에도) 현재글이 비회원글이라면 아이피노출"이라는 의미로 생각을 했는데, 그게 아니라
"현재 유저가 최고관리자가 아니어야 하고 현재글이 비회원글이어야 아이피 노출"이 되어버리는 것이라는 달빛늑대님의 답변이 있군요.
&&가 들어갔기 때문에 이로 인해 두 조건이 다 참이어야 하므로 달빛늑대님의 답변이 확실히 이해가 됩니다.
그렇다면
원래 제가 생각했던 의미의 문구, 즉, "만약 현재 유저가 최고관리자가 아니고 (=아닐 경우에도) 현재글이 비회원글이라면 아이피노출"이라는 문구는 어떻게 만들어야 하는 것인지요?
기존 올라와 있는 팁(원글의 주소 : http://www.zeroboard.com/17069718)에 따라 최고관리자에게만 IP주소가 보이게 한 상태입니다.
참고로 제가 만드는 홈페이지는 로그인하지 않은 사람도 글을 쓸 수 있게 해 두었습니다.
그리고 아이피주소가 공개될 때는 네 자리가 모두 다 공개되게 해 두었습니다.
그런데 로그인하지 않은 사람은 아이피주소가 공개되고, 로그인한 사람은 아이피주소가 보이지 않게 하는 조건문을 만들어봤더니 성공적으로 적용이 되네요.
아래의 두 조건문 중에서
위의 것은 원래 나와있던 팁을 적용한 거고
아래 것은 제가 만든 조건문으로, 회원번호가 없다면 아이피주소를 공개하라는 겁니다. (= 로그인하지 않은 사람의 글은 모두 아이피주소 공개)
<!--@if($logged_info->is_admin=="Y")-->({$oDocument->getIpaddress()})<!--@end--> 이를 편의상 A라 합니다.
<!--@if(!$oDocument->get('member_srl'))-->({$oDocument->getIpaddress()})<!--@end--> 이를 편의상 B라 합니다.
그러자 무슨 문제가 생겼냐 하면 (큰 문제는 아닙니다만)
비회원의 글을 관리자가 볼 때는 아이피주소가 두 번이나 나온다는 겁니다.
생각해 보니 위의 조건문들을 충실히 반영한 결과네요. 두 개의 조건문에 의해 두 번이나 아이피주소가 찍히는 겁니다.
오직 관리자가 볼 때만 그런 것이니 관리자만 좀 보기 싫은 것을 참으면 되지만
그래도 완벽욕구가 생기고 학문적 호기심이 발동을 해서 후자를 좀 가다듬어 봤습니다.
<!--@if(!$logged_info->is_admin=="Y" && !$oDocument->get('member_srl'))-->({$oDocument->getIpaddress()})<!--@end-->
이를 편의상 C라 합니다.
&&를 통해 두 개의 조건을 열거해 본 겁니다. 글을 보는 사람은 최고관리자가 아닐 때 그 글이 비회원의 글이면 아이피주소가 나오게끔 적용하겠다는 의도로 만든 것입니다.
그런데 이 조건문은 적용이 안되어버리네요. 즉 조건문이 없는 것과 같은 결과가 되어버립니다.
어떤 문제가 있는 것일까요?
이 문제의 해결방법(예를 들어 관리자에게 중복된 두 개의 아이피가 뜨면 하나만 뜨게 하라는 새로운 조건식 등)보다 위 조건문의 오류가 무엇인지가 더 궁금합니다.
댓글 3
-
달빛늑대
2008.09.10 16:57
-
블루파티
2008.09.10 18:05
답변 감사합니다.
<!--@if(!$logged_info->is_admin=="Y" && !$oDocument->get('member_srl'))-->({$oDocument->getIpaddress()})<!--@end-->
라는 문장을 저는
"만약 현재 유저가 최고관리자가 아니고 현재글이 비회원글이라면 아이피노출"이라는 의미로 생각을 했었는데, 그게 아니라
"현재 유저가 최고관리자가 아니어야 하고 현재글이 비회원글이어야 아이피 노출"이 되어버리는 거군요.
생각해 보니 &&가 들어갔기 때문에 이로 인해 두 조건이 다 참이어야 하므로 확실히 이해가 됩니다.
제가 착각한 이유는 if라는 용어 때문이었습니다.
그렇다면
"만약 현재유저가 최고관리자가 아닐 경우에도 비회원글은 아이피노출"이 되게끔 하려면
어떻게 문장을 만들어야 하는 것인지요? -
달빛늑대
2008.09.12 19:15
말씀하신 경우 현재 유저가 최고관리자가 아닐경우를 굳이 가려낼 필요가 있을까요?
로그인 되었느냐 안되었느냐로 회원과 비회원을 가려낼 수 있겠고, 로그인 한 회원의 경우 관리자냐 아니냐를 따져서 관리자인 경우만 가려낼 필요가 있는데, 관리자가 아닐경우는 그냥 회원이기만 하면...과 같은 거죠.
따라서 로그인 했다면... 이라는 상황이 관리자가 이거나... 아니거나...와 같은 상황이 되는 거죠.
말씀하신 것을 그대로 하자면..
<!--@if($is_logged && ($logged_info->is_admin=="Y") || (!$logged_info->is_admin=="Y") && !$oDocument->get('member_srl'))-->({$oDocument->getIpaddress()})<!--@end-->
(일단 로그인한 회원이어야 하고 그리고...로그인 한 유저가 관리자이거나.. 또는 관리자가 아니거나.. 일 경우 비회원글이라면 IP 주소를 보여준다.)
이 소스는 결국... 아래의 소스와 같은 결과를 보여줍니다.(처음 댓글의 세번째 항목이죠)
<!--@if($is_logged && !$oDocument->get('member_srl'))-->({$oDocument->getIpaddress()})<!--@end-->
(유저가 로그인 되었는가...그리고 글이 비회원의 글인가... 그럼 IP 주소를 보여준다.)
같은 결과일 경우 더 간결한 소스를 지향해 주어야 코드가 가벼워 지겠습니다.
관리자이거나 아니거나를 굳이 계산하는 것은 좌회전 네번과 같습니다. 방향이 원래와 같게 되는거죠.
굳이 계산하지 않아도 된다는 것이죠.
도움이 되시길...
위의 내용은 비회원이 작성한 글의 경우 무조건 IP가 노출되게 되고....(관리자의 경우 두번 나오게 되고..)
아래 붙이시려는 걸 보면 그 IP를 관리자만 안본다~ 가 되거든요.
비회원의 글의 IP 주소는 관리자만 본다....
<!--@if($logged_info->is_admin=="Y" && !$oDocument->get('member_srl'))-->({$oDocument->getIpaddress()})<!--@end-->
(위에 붙이셨다는 부분의 앞부분 ! (not)을 제거한 상태구요. 이것을 제거 안하면 관리자만 안본다~ 입니다.)
비회원의 글의 IP 주소는 누구나 다 본다...
<!--@if(!$oDocument->get('member_srl'))-->({$oDocument->getIpaddress()})<!--@end-->
(굳이 관리자용을 하나 더 넣을 필요가 없겠구요)
비회원의 글의 IP 주소는 비회원만 빼고 다 본다...
<!--@if($is_logged && !$oDocument->get('member_srl'))-->({$oDocument->getIpaddress()})<!--@end-->
도움이 되시길...