뽀라닷컴
Loading...




웹디자인,포토샵,그누보드,제로보드,동영상제작 관련 메모 >>


전체(437)인터넷,컴퓨터 (94) | 웹디자인tip (182) | CG,그래픽tip (70) | BBS_Tip (74) | 영상tip (17) |
하나의 게시판에서 여러스킨을 적용하는 법 2008-04-28 04:07:59
홈페이지홈페이지

 

하나의 게시판에 여러스킨을 적용할수 있는 방법입니다.

보러가기

하나의 스킨으로 여러가지 스타일을 보여주는게 아니라.. 말그대로 여러가지 스킨을 하나의 게시판에 적용해서 접속자가 원하는 스타일로 볼수 있도록 하는 기능이지요.

4
우선 기다리시는 분들이 많은것 같아서..
자신이 원하는 게시판에 여러가지 종류의 스킨을 적용하는 방법을 알려드리겠습니다.
그리고 하루빨리 정리가 되는데로 위에 샘플게시판에서 제가 사용한 제로5스타일의 게시판, 겔러리, 웹진, 블로그 스타일의 스킨세트를 올리겠습니다. (여러 스킨을 다양하게 적용할수 있긴하지만.. 이왕이면 테마가 있어야 할것 같아서 제로5스타일로 여러가지 스킨을 제작한것입니다.)

자~

사실...굉장한 팁 같아 보이지만... 이론적으로...그리고 소스의 분량적으로는 굉장히 별거 아닙니다.

1. 작동원리

제로보드에서 모든 게시판은 게시판에 설정된 스킨의 이름과 기타 설정을 db의 게시판 설정 테이블에서 받아옵니다.
그 받아온 값들을 기준으로 스킨을 적용하고... 그러는데요,
이 기능을 하는 부분이 바로 lib.php 의  

 // 게시판 설정을 읽어옴
 function get_table_attrib($id) { ... } 함수입니다...

이 함수는 게시판이 구동되는 과정에서 적절히 $id 값과 함께 실행되는데요... 이 함수를 수정해서 원하는 설정부분을 실시간으로 원하는 값으로 대체 해주는 원리입니다. 이때 원하는 값은 쿠키를 이용해서 저장하기 때문에 페이지 이동시에도 모든변화가 유지되는 것이구요.  (원리까지는 설명할 필요가 없었을까용? ^^)

2. 설치법 (lib.php 만 수정해주면 됩니다.)

우선.. 게시판 상단에 스킨체인지 버튼들을 넣어줘야 겠죠?

 //  초기 헤더를 뿌려주는 부분;;;;
 function head($body="",$scriptfile="") { ... } 함수를 찾아서...

내부에 있는..

   <?
   if($group[header_url]) { @include $group[header_url]; }
   if($setup[header_url]) { @include $setup[header_url]; }
   if($group[header]) echo stripslashes($group[header]);
   if($setup[header]) echo stripslashes($setup[header]);
   ?>

의 하단에 다음 내용을 추가해줍니다.

<script>
 function setCookie(name,value,expiredays)
 {
  var todayDate = new Date();
  todayDate.setDate(todayDate.getDate() + expiredays);
  document.cookie = name + "=" + escape(value) + "; path=/; expires=" + todayDate.toGMTString() + ";"
 }
 function changeTheme(newStyle, no) {
  var newhref = document.location.href.replace(/(#.+)/,'');
  setCookie('<?=$id?>_viewStyle', newStyle, 365);
  setCookie('<?=$id?>_currentStyle', no, 365);
  document.location.href = newhref;
 }
</script>
 
<style>
 .skinChanger {
  cursor: pointer;
  font-size:8pt;
  font-family: 돋움, verdana;
  color: #7C7769;
 }
 .underBorder {
  border-bottom: solid 2px #E08600;
  padding-bottom:2px;
 }
</style>

<iframe name="guest_chk" id="guest_chk" frameborder=0 width=0 height=0></iframe>

<div style="width:90%; text-align:left; padding:8px;">
 <span class="skinChanger" id="sChanger1" onclick="changeTheme('',1); return false;">게시판형</span> 
 <span class="skinChanger" id="sChanger2" onclick="changeTheme('zb5_style_webzine',2); return false;">웹진형</span>
 <span class="skinChanger" id="sChanger3" onclick="changeTheme('zb5_style_gallery',3); return false;">겔러리형</span> 
 <span class="skinChanger" id="sChanger4" onclick="changeTheme('zb5_style_blog',4); return false;"><img src="images/typeB.gif" align=absmiddle border=0 />블로그형</span>
</div>

<?php
  $cookieName = $id.'_currentStyle';
  if(isset($_COOKIE[$cookieName]) && $_COOKIE[$cookieName] != '') {
  $newSkinNo = $_COOKIE[$cookieName];
?>

<script>
 try {
  document.getElementById('sChanger<?=$newSkinNo?>').className = "skinChanger underBorder";
 } catch(e) {}
</script>

<?} else {?>

<script>
 try {
  document.getElementById('sChanger1').className = "skinChanger underBorder";
 } catch(e) {}
</script>

<?}?>

설명을 드리면...

<span class="skinChanger" id="sChanger순서번호" onclick="changeTheme('스킨이름',순서번호); return false;">게시판형</span>

의 형식입니다. 순서번호는 1부터 순차적으로 증가하는 형식으로 해주시구요...

'스킨이름' 부분에 적용할 스킨의 이름을 넣어주시면 됩니다.

처음에 있는 changeTheme('',1);  는 관리자페이지에서 설정한 게시판의 스킨과 설정을 적용함을 의미합니다.

특정게시판에만 적용하시려면.. 위에 추가된 전체 내용을

<?php if ($id=='게시판 아이디') {?>

....

....

<?}?>

와 같은 if 구문으로 감싸주시면 됩니다.
여러아이디를 적용할시에는 ..  if 구문의 조건을...
if ($id=='게시판 아이디' || $id=='게시판 아이디1') 의 형식으로 추가해주시면 되구요.


자 이제~ 중요부분인 설정을 바꿔주는 부분입니다.

lib.php 에서 function get_table_attrib($id) { ... }  함수를 아래 내용으로 교체합니다.
수정하시고 스킨체인지를 하지 않아도 기본기능에는 절대적으로 변화가 오거나 오류가 나지 않으니 안심하시길....

 // 게시판 설정을 읽어옴
 function get_table_attrib($id) {

  global $connect, $admin_table;

  $data=mysql_fetch_array(mysql_query("select * from $admin_table where name='$id'",$connect));

  if($data[table_width]<=100) $data[table_width]=$data[table_width]."%";

  // 원래는 IP를 보여주는 기능인데, DB 변경을 피하기 위해서 이미지 박스 사용 권한으로 변경하여 사용
  if(!$data[use_showip]) $data[use_showip] = 1;
  $data[grant_imagebox] = $data[use_showip];

  $cookieName = $id.'_viewStyle';
  if(isset($_COOKIE[$cookieName]) && $_COOKIE[$cookieName] != '') {
   $newSkin = $_COOKIE[$cookieName];
   $data[skinname] = $newSkin;
////
   if($newSkin == 'zb5_style_blog') {
    $data[memo_num] = 2;
    $data[use_alllist] = '1';
    $data[only_board] = '';
   }
   if($newSkin == 'zb5_style_webzine') {
    $data[memo_num] = 10;
   }
   if($newSkin == 'zb5_style_gallery') {
    $data[memo_num] = 15;
   }
////
  }

  return $data;
 }



잘 보시면...

////
   if($newSkin == 'zb5_style_blog') {
    $data[memo_num] = 2;
    $data[use_alllist] = '1';
    $data[only_board] = '';
   }
   if($newSkin == 'zb5_style_webzine') {
    $data[memo_num] = 10;
   }
   if($newSkin == 'zb5_style_webzine1') {
    $data[memo_num] = 10;
   }
   if($newSkin == 'zb5_style_gallery') {
    $data[memo_num] = 15;
   }
////

이부분은 꼭 필요한 부분은 아닌데요... 스킨별로 기타 건드려주고 싶은게시판 설정을 수정할수 있는 부분입니다.

예를 들어...

   if($newSkin == 'zb5_style_gallery') {
    $data[memo_num] = 15;
   }

는 스킨이 'zb5_style_gallery' 이라면... 한화면에 보여줄 게시물수를 15개로 해라~ 이런거구요...

   if($newSkin == 'zb5_style_blog') {
    $data[memo_num] = 2;
    $data[use_alllist] = '1';
    $data[only_board] = '';
   }

는 스킨이 'zb5_style_blog' 이라면... 한화면에 보여줄 게시물수를 2개로 하고 하단에 목록표시를 하는 형식에 방명록스타일로 지정하라는 것이지요.

관리자 페이지의 게시판 설정에서 설정하는 모든 항목들을 저런식으로 수정할수 있습니다.

잘 응용 하시길!!!

(only_board, memo_num 이런 변수의 이름은 admin 폴더의 admin_add_board.php 를 보시면 input 의 name 이라는걸 아실수 있을겁니다.)

 

2

 

p.s: 스킨에 따로 적용된 팁이 있다면.. 사용된 각각의 스킨에 다 적용해주셔야 하는 괴로움이...ㅡ.ㅡ
예를 들어 멀티로 5개 스킨 적용한상태에서... 뭔가 스킨에 기능추가하려면.. 5개 스킨에 다 해줘야 별탈없다는 불편함이 있다는거죠~

 

 





    



목록보기 삭제하기