if 문 질문드립니다.
본문
쥐뿔 php 모르는데 어떻게 대충 검색해서 때워보려고 애쓰고 있는 좀 모지리 입니다.ㅎ
<?php
$f_name = basename($_SERVER['SCRIPT_NAME']);
if ($f_name != 'index.php') {
?>
<?php } ?>
<?php if($bo_table=='free') { ?>
<div class="img" style="height:200px;overflow:hidden;"><img src="<?php echo G5_THEME_URL ?>/img/free.jpg" alt="free"></div>
<?php } ?>
<?php if($f_name == 'sub.php') { ?>
<div class="img" style="height:200px;overflow:hidden;"><img src="<?php echo G5_THEME_URL ?>/img/sub.jpg" alt="sub"></div>
<?php } ?>
이게 index.php 에서는 튀어 나오지 말고,
아래 if문에 나온 게시판ID나 파일명일경우 div안에 이미지를 나오게 하는 건데요..
모지리인 제가 봐도 이게 최선이 아닌것 같은데 이렇게 하면 에러없이 동작은 합니다.
(1) 좀 소스를 정리하고싶고,
(제가 나름 시간을 좀 갖고 검색해서 뚜들겨 맞추다 너무 지쳐서 QA에 글을 씁니다.ㅠ)
(2) 이런게시판 혹은 저런 파일등 조건이 없을 경우의 수를 마지막에 추가하고 싶습니다.
조금만 지혜를 나눠주세요..ㅠㅠ
!-->
답변 4
<?php
$f_name = basename($_SERVER['SCRIPT_NAME']);
$img_filename = "";
$img_alt = "";
if ($f_name != 'index.php') {
if ($bo_table=='free') { $img_filename="free.jpg"; $img_alt="free"; }
if ($f_name == 'sub.php') { $img_filename="sub.jpg"; $img_alt="sub"; }
if ($img_filename != "" && $img_alt != "") {
echo '<div class="img" style="height:200px;overflow:hidden;"><img src="' . htmlspecialchars(G5_THEME_URL . '/img/'.$img_filename) . '" alt="'.htmlspecialchars($img_alt).'"></div>';
}
}
오타난 거 있을지도 모르지만... 암튼... 이렇게 한 후에
if ($bo_table=='') { $img_filename=""; $img_alt=""; } 나
if ($f_name == '') { $img_filename=""; $img_alt=""; } 만 필요한 대로 계속 추가하시면...
아무 조건도 없는 경우면
if ($img_filename != "" && $img_alt != "")
이 if문 아래에 else if { } 를 사용하거나,
if ($f_name != 'index.php')
이 if문 맨 아래에 esle를 사용하시면....
안 되는 건가요?
!-->
PHP 소스와 일반 html소스 자바스크립트 등이 혼재 되었을 경우에 재일 좋은 형태는
PHP 소스 자바스크립트 소스 일반 html소스 등으로 구분해서 사용하는 것이 관리상 편합니다
----------------------------------------------------------------------------------
<?php
이프문등 php에 관련된 소스와 변수 할당
$test_div = ''; // 변수 초기화
if($_SERVER['SCRIPT_NAME'] === '특정페이지명'){
$test_div = '<div>멍멍이는 야옹~</div>';
}else{
$test_div = '<div>고양이는 멍멍~</div>';
}
?>
----------------------------------------------------------------------------------
<script>
자바스크립트 소스
스크립트상 필요한 변수중 php가 필요한 변수는 처음의 php에서 되도록 지정
var test_var = '<?php echo $test_var;?>
</script>
----------------------------------------------------------------------------------
<body>
<div id="testid">
<?php echo $test_div;?>
</div>
----------------------------------------------------------------------------------
위와 같이 순서대로 흐름을 타는게 나중에 소스를 만들거나 고치거나 기획하는데 용이합니다
그렇다하여 필요한 곳에 php소스를 넣는다고 틀린것은 아닙니다
상황에 맞게 하되 형식을 갖고하면 좋다는 거죠
또한 이프문 같이 분기처리하는 것은
세너개 이상으로 처리가되는 형태라면
스위치문( switch )으로 대처해서 하는 것도 가독성 면에서 보기에 좋습니다
이프문을 쓰는 형식도 두세가지 형태가 있는데
하나는 이프문 다음에 엘스문으로 끝나는 전형적인 방법이고
다른 하나는 지정을 먼저 해주고 그 아래에 이프문을 지정해 주는 형태입니다
예 )
어느 공간에 문을 통해 들어오는 이가 남자, 여자, 동물이 있고
문을 통해 나온 대상을 사람인지 동물인지를 구분해줘야 하는 경우가 있다고 할 때
전형 적인 1번 방법
$output = '';
if($input=== '남자'){
$output = '사람';
}
else
if($input === '여자'){
$output = '사람';
}
else{
$output = '동물';
}
두번째 방법
$output = '동물';
if($input=== '남자'){
$output = '사람';
}
else
if($input === '여자'){
$output = '사람';
}
무조건 광범위한 대상 혹은 특정 안될 경우 디펄트로 보여야 할 대상등을 먼저 정의해 준 다음
그 아래에 특정 조건만 이프문으로 걸어서 해당 조건이 되면
$output의 내용을 변경해 주는 형태입니다
의외로 이방법을 소스를 줄이고 지정을 먼저하는 형식이라서 선호하고 많이들 쓰기도 합니다
질문하신 내용을 요약해서 처리하라고 한다면
저는 아래와 같이 할거 같습니다
<?php
$f_name = basename($_SERVER['SCRIPT_NAME']);
$view_type = 'no'; //기본 디펄트 div 태그 출력 없음
$view_img = 'no_img';//기본 디펄트 이미지 아무조건이없는
// 인덱스 페이지는 출력 제외
if ($f_name == 'index.php') {
$view_type = 'no';
$view_img = '';
}
else
if($f_name == 'sub.php') {//현재 페이지가 sub.php일 때 출력
$view_type = 'yes';
$view_img = 'sub';
// sub.php라는 페이지 안에서 게시판 호출이 있을수 있으므로 밖이 아닌 안에 넣음
// 게시판 아이디가 free 또는 guest일 경우 or 연산자로 계속 조건을 붙여서 사용
if($bo_table=='free' || $bo_table=='guest') {
$view_img = $bo_table;
}
}
else
if($f_name == 'new.php') {//현재 페이지가 new.php일 때 출력
$view_type = 'yes';
$view_img = 'new';
// new.php라는 페이지 안에서 게시판 호출이 있을수 있으므로 안에 넣음
// 게시판 아이디가 free 또는 guest일 경우 or 연산자로 계속 조건을 붙여서 사용
if($bo_table=='free' || $bo_table=='guest') {
$view_img = $bo_table;
}
}
?>
<?php if($view_type === 'yes'){ ?>
<div class="img" style="height:200px;overflow:hidden;"><img src="<?php echo G5_THEME_URL ?>/img/<?php echo $view_img?>.jpg" alt="<?php echo $view_img?>"></div>
<?php } ?>
조건문은 상황에 따라서 or 연산자를 이용해서 붙여 쓰거나 혹은
배열에 조건을 넣은 뒤
배열에 값이 있느냐 없느냐로 써칭해서 판별 사용하는등 여러 가지 방법이 있을수 있습니다
이프문을 어떻게 넣는게 좋을지에 대한 고민을 하시기에
페이지를 구분하는 이프문 안에 게시판 아이디를 다시 분기하는 형태로 넣었는데
직접 테스트하지 않아 결과가 어떻게 나올지는 모르겠습니다
상황에 따라서는 밖으로 빼서 크론이님이 하신대로 할수도 있을것 같습니다
그런데 제 생각에는
페이지와 게시판 아이디라는 두개의 전제 조건이 붙어 있고
페이지가 커다란 전제 조건이기에 페이지 안에 게시판 아이디가 들어가는게 맞을듯 합니다 ( and 조건 )
맞게 한거 같은데 어느부분이 동작이 안되나요?
$f_name = basename($_SERVER['SCRIPT_NAME']);
if ($f_name != 'index.php') {
이렇게 할 경우, 서브페이지의 index.php 파일일때도 해당되는 거라서.
그누보드에서는 index.php 파일 상단에 아래 변수를 선언하고,
define('_INDEX_', true);
아래와 같이 합니다.
if(defined('_INDEX_')) {
if($f_name == 'sub.php') 이 부분도 가능하면 경로까지 함께 비교하는게 좋습니다.
if($_SERVER['SCRIPT_NAME'] == '/bbs/sub.php')