포럼
page_full_width" class="col-xs-12" |cond="$__Context->page_full_width">
신 템플릿 문법에서 조건문 cond에 조건A && 조건B를 동시에 넣는것
2011.08.26 20:48
신 템플릿 문법에서 조건큰 cond에 조건A, 조건B를 동시에 넣는것
Manual에 보면
<p cond="!조건A && !조건B">조건A, 조건B를 동시에 만족하지 못하면 이 문장을 출력합니다.</p>
라고 되어있는데요.
&& (and) 말고 || (or)는 지원하지 않는건가요? ㅠㅠ
Manual에 보면
<p cond="!조건A && !조건B">조건A, 조건B를 동시에 만족하지 못하면 이 문장을 출력합니다.</p>
라고 되어있는데요.
&& (and) 말고 || (or)는 지원하지 않는건가요? ㅠㅠ
댓글 21
-
hika1
2011.08.31 00:33
-
씨지
2011.08.31 12:41
감사합니다.
{@ $a=1; $b=2; $c=3; } <!--@if( $a==1 || $b==2)--><!--@if( $a==1 || $b==2)--><div>참이다.구 템플릿 문법.당연히 작동함</div><!--@end--> <div cond="$a==1 || $b==2">참이다. 작동안함</div> <div cond="!$a==1 && !$b==2">참이다.작동함</div> <div cond="!$a==1 || !$b==2">참이다.작동함</div> <div cond="!$a==1 || !$b==2 || !$b==3">참이다.작동함</div> <div cond="!$a==1 || !$b==2 || !$b==3">참이다.작동함</div> <div cond="!$a==2 || (!$b==2 && !$c==3)">참이다.작동함</div>
이렇게 심플하게 테스트 해보니까 되는군요.
문제는 복수조건 앞에 '!'를 붙인다는것 때문에 검사조건이 false 인것을 적을 때
<div cond="!$_now_cat=='man_list'&&!!stripos($document->getTitle(), 'pig')" style="float:right">*</div>
이런식으로 '!!' 두번 붙이면 될것이라 예상했던것이 오류였던거 같구요.
그렇게 느낌표를 2번 쓰지 않고
<div cond="!$_only_jobs&&!stripos($document->getTitle(), 'pig')==false" style="float:right">*</div> <div cond="!$_only_jobs&&!stripos($document->getTitle(), 'pig')===false" style="float:right">*</div> <div cond="!$_only_jobs&&!stripos($document->getTitle(), 'pig')!==true" style="float:right">*</div>
이런식으로 풀어봐도 안되는듯 하네요.위 조건문 상으로는제목에 pig가 안들어간 녀석만 통과해야하는데어떻게 해도 pig가 들어간 녀석이 통과됩니다.
즉, 위와같은 경우 False 검증이 안되는게 아닌가 하는 추측을 해봅니다.
-
burster
2011.08.31 13:12
항상 느끼는건데 cond를 쓰면서 자꾸 생각나는게 고등학교 1학년때 수학입니다. -
난다날아
2011.09.01 14:50
논리식 사용 자체가 잘못된 것 같네요. 아래를 참고 해 보세요.
a == b : 같다
a != b : 같지 않다
a > b : a가 b보다 크다
a >= b : a가 b와 같거나 크다
a < b : a가 b보다 작다
a <= b : a가 b와 같거나 작다
! : not. 다음 나온 식의 참/거짓을 반전합니다.
검사를 !$_now_cat=='man_list' 와 같이 하셨는데. 아마 $_now_cat의 not이기 때문에 $_now_cat에 어떤 문자가 있다고 하면 참/거짓으로만 보면 참입니다. !에 의해 거짓이 될 것입니다. 그럼. 거짓 == 'man_list' 가 되죠.
다음은 'man_list' 또한 참\거짓을 따지면 참이므로 거짓 == 참이 되어 무조건 결과는 거짓이 될 것입니다.
원하는 대로 하시려면 $_now_cat != 'man_list'로 하세요. -
씨지
2011.09.01 16:28
음... PHP조건문을 모르는건 아닌데 스킨 매뉴얼이 햇갈리게 만드는것 같습니다.
제가 !를 붙인거는 그런 not이라는 의도가 아니구요.
스킨매뉴얼에
<p cond="!조건A && !조건B">라고 되어있어서
신문법 cond에서 복수조건을 넣을때는 앞에 무조건 !가 들어가야된다는걸로 이해했습니다.
매뉴얼을 읽었을 때
"저 느낌표는 각각의 조건앞에 'not'의 의미의 !가 아니라 '복수조건중 하나다'라는 의미의 !란 말이구나." 라고 읽히는데..^^;;;
그냥
<p cond="조건A && 조건B">라고 하면 될텐데 왜 느낌표를 굳이 적도록 문법정했을까 하고 이유가 궁금했다는..
각각의 조건앞에 '복수조건중 하나다'라는 의미의 !가 없는<div cond=
"$a==1 || $b==2"
>참이다. 작동안함</div>
다시한번 테스트 해보겠습니다.ㅠㅠ
이게 제대로 작동 안했던걸로 기억하는데...
-
Garon
2011.09.01 21:27
<p cond="!조건A && !조건B">조건A, 조건B를 동시에 만족하지 못하면 이 문장을 출력합니다.</p>
이렇게 설명되어 있습니다.(본의아니게 실수로 글을 잘못 수정했네요) -
씨지
2011.09.01 22:27
저자의 의도는 그냥 <p cond="조건A && 조건B"> 이거였던건가요? ㅠㅠ
여튼 xe 1.4.5.9 에서 아래 '난나날님께 검토부탁한' 테스트코드를 봐서는 제가 읽은게 맞는게 아닐까 하는 생각이 들면서도 뭔가 개발자의 의도든 사용자의 의도든 그 의도데로 작동을 안하고있는거 같습니다. -
Garon
2011.09.01 22:47
위의 예시에 답변 달았습니다....;; 죄송... 제가 실수로 이전글에 붙여넣기를 했네요. -
씨지
2011.09.01 18:23
난다날아님 다시해봐도 안되는데 아래 코드한번 검토해봐주세요.
{@ $a=1; $b=2; $c=3; } a = {$a} / b = {$b} / c = {$c}<br /> <!--@if( $a==1 || $b==2)--><div>구 템플릿 문법.당연히 작동함</div><!--@end--> <div cond="$a==1">$a==1 작동안함 - 이건 왜안되지?</div> <div cond="$a=='1'">$a=='1' 작동안함 - 혹시나했지만 이래도 안되네.</div> <div cond="$a==1&&$b==2">$a==1 && $b==2 작동안함</div> <div cond="$a==1||$b==2">$a==1 || $b==2 작동안함</div> <div cond="!$a==1&&!$b==2">!$a==1 && !$b==2 작동함</div> <div cond="!$a==1||!$b==2">!$a==1 || !$b==2 작동함</div> <div cond="!$a==1||!$b==2||!$b==3">!$a==1||!$b==2||!$b==3 작동함</div> <div cond="!$a==1||!$b==2||!$b==3">!$a==1||!$b==2||!$b==3 작동함</div> <div cond="!$a==2||(!$b==2&&!$c==3)">!$a==2||(!$b==2&&!$c==3) 작동함</div>
* 작동함이라고 적힌것은 cond 조건을 통과해서 결과가 표시되는 구문이구요.
* 작동안함 이라고 적힌것은 조건을 통과 못해서 결과가 표시 안되는 구문입니다.
뭔가 이상하지 않나요?
제가 뭘 잘못한것일까요? ㅠㅠ
아~~ 코드하이라이터 미치겠네요. 드림위버에서 수동코딩했습니다.ㅠㅠ -
백성찬
2011.09.01 23:31
{@ $ab=1; $b=2; } <div cond="$ab==1 || $b==2"> || 를 사용하면 작동하지 않는다고 했는데 작동할걸요.</div>
-
Garon
2011.09.01 23:37
다음에서 테스트 해봤는데 3번째 문장 말고 다른건 다 작동합니다. http://novbe.com/test00121665798421kk7878899 -
Garon
2011.09.01 23:54
소스는 다음입니다.
{@$a =1;$b =2;$c =3;}기본값 a=1 , b=2, c=3 </br><p> 9문장 출력 </p>1: <div cond="$a==1"> $a==1 작동안함 - 이건 왜안되지? </div> </br>2: <div cond="$a=='1'"> $a=='1' 작동안함 - 이래도 안되네. </div> </br>3: <div cond="$a==1&&$b==2"> $a==1 && $b==2 작동안함 </div> </br>4: <div cond="$a==1||$b==2"> $a==1 || $b==2 작동안함 </div> </br>5: <div cond="!$a==1&&!$b==2"> !$a==1 && !$b==2 작동함 </div> </br>6: <div cond="!$a==1||!$b==2"> !$a==1 || !$b==2 작동함 </div> </br>7: <div cond="!$a==1||!$b==2||!$b==3"> !$a==1||!$b==2||!$b==3 작동함 </div> </br>8: <div cond="!$a==1||!$b==2||!$b==3"> !$a==1||!$b==2||!$b==3 작동함 </div> </br>9: <div cond="!$a==2||(!$b==2&&!$c==3)"> $a==2||(!$b==2&&!$c==3) 작동함 </div> </br>========================================================================================================== -
씨지
2011.09.02 14:17
모두들 SVN 쓰시는듯...ㅋ~~
저도 방금 배포된 XE 1.4.5.10 을 설치하고 해보니 저도 3번째 구문 3: $a==1&&$b==2 외에는 모두 출력이 되네요. -
씨지
2011.09.02 11:24
@백성찬님 @Garon님 XE버젼을 얼마쓰시나요?
백성찬님은 SVN의 최신버젼 쓰실듯하고..^^
위에 언급했지만 전 xe 1.4.5.9 입니다.
혹시 SVN에서 받은 최신버젼에서는 해결된건지...
운영하는 2개의 사이트에서 테스트해봤지만 저는 여전히 같은 증상이네요. (둘다 xe 1.4.5.9임){@$a =1;$b =2;$c =3;}기본값 a=1 , b=2, c=3 </br><p> 9문장 출력 </p>1: $a==1 ----- <span cond="$a==1"> [불통] - 이건 왜안되지? </span> </br>2: $a=='1' ----- <span cond="$a=='1'"> [불통] - 이래도 안되네. </span> </br>3: $a==1&&$b==2 ----- <span cond="$a==1&&$b==2"> [불통] </span> </br>4: $a==1||$b==2 ----- <span cond="$a==1||$b==2"> [불통] </span> </br>5: !$a==1&&!$b==2 ----- <span cond="!$a==1&&!$b==2">[통과]</span> </br>6: !$a==1||!$b==2 ----- <span cond="!$a==1||!$b==2">[통과]</span> </br>7: !$a==1||!$b==2||!$b==3 ----- <span cond="!$a==1||!$b==2||!$b==3">[통과]</span> </br>8: !$a==1||!$b==2||!$b==3 ----- <span cond="!$a==1||!$b==2||!$b==3">[통과]</span> </br>9: $a==2||(!$b==2&&!$c==3) ----- <span cond="!$a==2||(!$b==2&&!$c==3)">[통과]</span> </br><div cond="$a==1 || $b==2"> ! || ! 를 사용하면 작동하지 않는다고 했는데 작동할걸요. [불통]</div>
일단 스킨매뉴얼에서 복수조건시 붙여둔 !에관한 개발팀 원래의도가 궁금하다는... 오타였을지...^^ -
백성찬
2011.09.02 11:54
1.5.0 사용합니다.
오늘 1.4.5.10 으로 업데이트 되었습니다. -
송동우
2011.09.02 11:39
저도 예전부터 신문법을 좀 써 볼려고 해도 도데체가 안되더군요
이 글에서 나온 예제 첫번째 것만 가지고 얘기를 하자면
{@
$a = 1;
$b = 2;
$c = 3;
}
<div cond="$a==1">a = {$a}</div>
이렇게 하면 안나옵니다... 논리적으로 나와야 하는데 .....
그런데
<div cond="$a!=1">a = {$a}</div> 혹은 <div cond="!$a==1">a = {$a}</div>
이렇게 하면 나옵니다.......논리적으로 안나와야 하는데........
로컬에서 그리고 호스팅 받는 곳에서 모두 다 해봐도 똑같더군요.....
어떤 조건하에서 신문법이 먹히는지 모르겠네요........
그래서 저는 옛날문법 사용합니다........ -
백성찬
2011.09.02 11:55
{@
$abc= 1;
$b = 2;
$c = 3;
}
<div cond="$abc==1">abc = {$abc}</div>
혹은
{@
$a = 1;
$b = 2;
$c = 3;
}
<div cond="$b==2">b = {$b}</div> -
송동우
2011.09.02 12:03
아하...
변수길이가 최소 두자리는 되어야 되는 군요... -
씨지
2011.09.02 12:49
또하나의 몰랐던 문법 이슈군요.
밑줄 쫙 그어놔야겠는데요. 다음번 매뉴얼 업데이트에 이런게 추가되줘야할듯..
* 변수명이 한자리 글자이면 안된다.!! -
씨지
2011.09.02 17:52
cond 조건문 테스트 2차 정리
오늘 XE Core 1.4.5.10로 업그레이드 한 후에 다시 테스트해봤습니다.
================================소스=====================================<p>신 템플릿 문법 테스트 : 환경 XE Core 1.4.5.10</p>{@$a =1;$b =2;$c =3;}<p>기본값 : $a={$a} , $b={$b}, $c={$c}</p>●단일조건 테스트</br>01: $a==1 ----- [<span cond="$a==1">통과</span>]</br>02: $a=='1' ----- [<span cond="$a=='1'">통과</span>]</br>03: $a!=1 ----- [<span cond="$a!=1">불통</span>] - 정상작동</br>04: !$a==1 ----- [<span cond="!$a==1">통과</span>] - 불통이 되야하는거 아닌지..</br>04-1: !$a==1 ----- [<!--@if(!$a==1)-->불통<!--@end-->] - 구 템플릿문법은 정상적으로 '불통' </br></br>●두 조건 모두 참인경우 + ! 안썼을 때</br>05: $a==1&&$b==2 ----- [<span cond="$a==1&&$b==2">불통</span>] - 이건 왜 안되지? 둘다 참은 아니다?</br>06: $a==1||$b==2 ----- [<span cond="$a==1||$b==2">통과</span>] - 5번이 안되는데 이게 되는게 이상함,둘중 어느게 참?</br></br>●두 조건 모두 참인경우 + ! 썼을 때</br>07: !$a==1&&!$b==2 ----- [<span cond="!$a==1&&!$b==2">통과</span>] - 이 결과만 보면 ! 가 not의 의미가 아니라는?</br>08: !$a==1||!$b==2 ----- [<span cond="!$a==1||!$b==2">통과</span>] - 역시 마찬가지</br></br>●두 조건 중 하나만 참인경우 + ! 안썼을 때</br>09: $a==1&&$b==3 ----- [<span cond="$a==1&&$b==3">불통</span>] - 이건 어떻게 해석해야할지..ㅠㅠ</br>10: $a==1||$b==3 ----- [<span cond="$a==1||$b==3">통과</span>]</br></br>●두 조건 중 하나만 참인경우 + ! 썼을 때</br>11: !$a==1&&!$b==3 ----- [<span cond="!$a==1&&!$b==3">통과</span>] - 이건 어떻게 해석해야할지..ㅠㅠ</br>12: !$a==1||!$b==3 ----- [<span cond="!$a==1||!$b==3">통과</span>]</br></br>●3중 조건 테스트 - 이부분 테스트는 아직 디테일하게 안들어갔음^^</br>13: !$a==1||!$b==2||!$b==3 ----- [<span cond="!$a==1||!$b==2||!$b==3">통과</span>]</br>14: !$a==1||!$b==2||!$b==3 ----- [<span cond="!$a==1||!$b==2||!$b==3">통과</span>]</br>15: $a==2||(!$b==2&&!$c==3) ----- [<span cond="!$a==2||(!$b==2&&!$c==3)">통과</span>] - 괄호를 쓰는경우</br>==========================================================================
결과만 보면신 템플릿 문법 테스트 : 환경 XE Core 1.4.5.10
기본값 : $a=1 , $b=2, $c=3
●단일조건 테스트
01: $a==1 ----- [통과]
02: $a=='1' ----- [통과]
03: $a!=1 ----- [] - 정상작동
04: !$a==1 ----- [통과] - 불통이 되야하는거 아닌지..
04-1: !$a==1 ----- [] - 구 템플릿문법은 정상적으로 '불통'
●두 조건 모두 참인경우 + ! 안썼을 때
05: $a==1&&$b==2 ----- [] - 이건 왜 안되지? 둘다 참은 아니다?
06: $a==1||$b==2 ----- [통과] - 5번이 안되는데 이게 되는게 이상함,둘중 어느게 참?
●두 조건 모두 참인경우 + ! 썼을 때
07: !$a==1&&!$b==2 ----- [통과] - 이 결과만 보면 ! 가 not의 의미가 아니라는?
08: !$a==1||!$b==2 ----- [통과] - 역시 마찬가지
●두 조건 중 하나만 참인경우 + ! 안썼을 때
09: $a==1&&$b==3 ----- [] - 이건 어떻게 해석해야할지..ㅠㅠ
10: $a==1||$b==3 ----- [통과]
●두 조건 중 하나만 참인경우 + ! 썼을 때
11: !$a==1&&!$b==3 ----- [통과] - 이건 어떻게 해석해야할지..ㅠㅠ
12: !$a==1||!$b==3 ----- [통과]
●3중 조건 테스트 - 이부분 테스트는 아직 디테일하게 안들어갔음^^
13: !$a==1||!$b==2||!$b==3 ----- [통과]
14: !$a==1||!$b==2||!$b==3 ----- [통과]
15: $a==2||(!$b==2&&!$c==3) ----- [통과] - 괄호를 쓰는경우
이슈 등록 다시했습니다.^^
http://code.google.com/p/xe-core/issues/detail?id=146 -
Cody
2011.09.14 18:24
아..복잡하군요.
그런데 프레임웍 조건문에 참, 거짓이라는 개념을 붙여서 설명하는 것이 가능할지요? 더 헷갈리는 것 같아요.
그냥 프레임웍에서 표현을 위해 차용하여 사용하는 기호일 뿐 그 이상의 의미는 없는 것 같은데요.
새버전에서 신문법 오류 수정했다길래 기뻐서(?) 프로젝트 홈에 갔다가, 이슈에 올리셨길래 링크 따라 왔습니다~