간단하지만 유용한 배너관리 시스템 > 개발자팁

개발자팁

개발과 관련된 유용한 정보를 공유하세요.
질문은 QA에서 해주시기 바랍니다.

간단하지만 유용한 배너관리 시스템 정보

Flash 간단하지만 유용한 배너관리 시스템

본문

모양은 다듬지 않아 형편없습니다만

내용은 쓸만 할 것입니다.

관리자 인증같은 것을 걸지 않았으므로

사용하실때는 관리자 인증 같은 것을 걸거나

그누보드와 연동하여 사용하시기 바랍니다.

특징 한가지를 더 말하자면

배너 정보 파일이 갱신될때

일단위로 백업을 받아두어서

최소 하루 이전에 수정전 배너를 복원할수 있습니다

샘플페이지로 걸기위해 한페이지로 만들어서 소스가 좀 지저분하게 보일수도 있습니다.

이하 소스입니다.


<?php

/*제작자 : 유창화
사용제한 : 사용은 자유롭습니다. 단, 강의나 책의 내용으로서 사용될 경우 허락을 받으셔야 합니다.*/



//정보가 저장될 디렉토리를 지정하세요, 퍼미션은 웹서버가 읽고 쓸수 있어야 합니다.
$Ypath_array_files = './temp/banner_arrays';


//해당 디렉토리가 없으면 생성
if (!is_dir($Ypath_array_files)) {

  mkdir($Ypath_array_files);
  chmod ($Ypath_array_files, 0777);
}



//사용된 함수
function Yget_array_from_file($path_file, $array_name){

  $$array_name = Array();

  if (is_file($path_file)){

    @include $path_file;
  }

  return $$array_name;
}

function Yecho_banner($pos){

  global $Ypath_array_files;

  $Ypath_file = $Ypath_array_files . '/' . $pos . '.php';
  $Ybanner = Yget_array_from_file($Ypath_file, 'Ybanner');

  //등록된 배너일 경우에만
  if (is_array($Ybanner)){

    $rand_key = array_rand ($Ybanner);
    echo base64_decode($Ybanner[$rand_key]);
  }
}



if (empty($_GET['Ymode'])) {//전체보기

  echo "
  [배너 등록]
  <br><br>
  <form method='GET'><input type=hidden name='Ymode' value='view'>배너위치 <input type='text' name='Ypos'> 공백없이 영문과 특수문자만 사용하세요.<br><br>
  <input type='submit' value='배너 등록 및 수정하기'></form>

  <br><br>
  [등록된 배너 리스트]
  <br>
  ";

  $d = dir($Ypath_array_files);
  while (false !== ($entry = $d->read())) {
   
    if (is_file($Ypath_array_files . '/' . $entry) && preg_match("`\.php$`i", $entry)) {

      $temp_Ypos = preg_replace("`\.php`", "", $entry);
      echo "<a href='" . $_SERVER['PHP_SELF'] . "?Ymode=view&Ypos=" . $temp_Ypos . "'>" . $temp_Ypos . "</a><br>";
    }
    else{

      continue;
    }
  }
  $d->close();

  echo "
  <br><br>
  [배너 출력 방법 소개]
  <br>
  자신의 페이지에서 원하는 부분에 다음 함수를 호출 하면 됩니다
  <br>
  &lt;?=Yecho_banner('자기가 등록한 배너 포스');?&gt;

  <br><br>
  [예제]
  <br>
  main_right 출력
  <br>
  ";

  Yecho_banner('main_right');
}
else if (!empty($_POST['Ymode']) && $_POST['Ymode'] == 'update' ){//배너 처리

  $Ypos = $_POST['Ypos'];
  $Ypath_file = $Ypath_array_files . '/' . $Ypos . '.php';
  $temp_text = '';

  if (isset($Ybanner) && is_array($Ybanner)){

    $loop = count($Ybanner);
    for($i = 0; $i <= $loop; $i++){

      if (empty($Ybanner[$i])) continue;
      $temp_text .= "\$Ybanner[] = \"" . base64_encode(stripslashes($Ybanner[$i])) . "\";\n";
    }
  }

  $temp_text = "<?\n\n\n\n" . $temp_text . "\n\n\n?>";

 
  if (is_file($Ypath_file)) @copy($Ypath_file, $Ypath_file . '.' . date('Ymd'));

  $fp = @fopen ($Ypath_file, "w");
@fwrite($fp, $temp_text);//락을 걸 필요는 없음, 관리자에 의해 간간이 업데이트 되기 때문
@fclose($fp);
@chmod ($save_file, 0777);

  echo "<script>alert('\\n\\n성공적으로 수정\\n\\n');location.href='" . $_SERVER['PHP_SELF'] . "?Ymode=view&Ypos=$Ypos';</script>";
  exit;
}
else if ($_GET['Ymode'] == 'view' && !empty($_GET['Ypos'])){//배너 등록 수정 폼

  $Ypos = $_GET['Ypos'];
  $Ypath_file = $Ypath_array_files . '/' . $Ypos . '.php';
  $Ybanner = Yget_array_from_file($Ypath_file, 'Ybanner');
  $temp_list = '';
  $temp_text = '';
  if (isset($Ybanner) && is_array($Ybanner)){

    $loop = count($Ybanner);
    for($i = 0; $i <= $loop; $i++){

      $temp = (empty($Ybanner[$i])) ? '' : base64_decode($Ybanner[$i]);
      $temp_list .= "
      <tr height=34 bgcolor=white>   
        <td align=left width=150 bgcolor=#FFC9AC> &nbsp;&nbsp;&nbsp;&nbsp;태그 </td>
        <td>
          <br>
          &nbsp;
          &nbsp;<textarea name=\"Ybanner[" . $i . "]\" cols=72 rows=4>" . $temp . "</textarea><br><br>
        </td>
      </tr>
      ";
      $temp_text .= (empty($Ybanner[$i])) ? '' : base64_decode($Ybanner[$i]) . '<br>';
    }
  }
  else{

    $i = 0;
    $temp_list = "
      <tr height=34 bgcolor=white>   
        <td align=left width=150 bgcolor=#FFC9AC> &nbsp;&nbsp;&nbsp;&nbsp;태그 </td>
        <td>
          <br>
          &nbsp;
          &nbsp;<textarea name=\"" . Ybanner . "[" . $i . "]\" cols=72 rows=4></textarea><br><br>
        </td>
      </tr> 
    ";
    $temp_text = '등록된 배너가 없습니다.';
  }

?>

<BR>
<table border=0 cellpadding=0 cellspacing=1 width=700 align=center bgcolor=black>
  <form name=registform method=POST>
  <tr height=30>   
    <td colspan=2 align=cente bgcolor=#C6E3F2>
      :::::: 배너관리 - <?=$Ypos?> :::::::
    </td>
  </tr>
<?=$temp_list?>
  <tr height=40>   
    <td align=center colspan=2 bgcolor=white>
      <input type=button value=수정 onfocus=this.blur() onclick="con_input()">
      <input type=button value=목록 onfocus=this.blur() onclick="location.href='<?=$_SERVER['PHP_SELF']?>'">
      <input type=hidden name=Ymode value=update>
      <input type=hidden name=Ypos value=<?=$Ypos?>>
      <input type=hidden name=name value=<?=$Ybanner?>>
    </td>
  </tr>
  </form>
</table>
<script language=javascript>

function init(){

  window.document.title += " : <?=$Ypos?>";
}

window.onload = init;

function con_input() {

  var form = document.registform;

  if (confirm('\n\n정말로 수정하시겠습니까?\n\n')) {

    form.submit();
  }
  return;
}

</script>
<br>
현재 랜덤 배너 내용
<br>
---------------------
<br>

<?php

echo $temp_text;

?>

<br>
<br>
---------------------
<br>
<?
}

?>


http://82da.com/Ybbs/sample/Ybanner.php<div class='small'>[이 게시물은 관리자님에 의해 2011-10-31 17:12:10 PHP & HTML에서 이동 됨]</div>
추천
0

댓글 35개

조금 소스를 살펴보시면

데이타를 배열로서 파일에 저장하는 방식에 대해

조금 이해가 되지 싶습니다.

이것은 디비 쿼리수를 줄일 때 사용하면 좋은 방법입니다

http://sir.co.kr/bbs/board.php?bo_table=g4_qa&wr_id=25240

이글의 제 코멘트와 함께 보면 좋을것 같습니다

나중에 밑천 다 떨어지면 어떻하죠?

누가 저좀 먹여 살려주실분?
밑천 떨어지기 직전 질답게시판이나 자유게시판에서,
좀 더 발전적인 방향의 질문을 참조하신다면,
새로운 아이템을 생산하는데는 그다지 큰 어려움은 없으리라 여겨집니다.

잘만 찾으면 이보다 더 좋은 아이디어 취득공간은 없다고 봅니다.
감사합니다.
스트링 $$ 에서 바로 걸렸습니다.
찬물로 머리부터 감고 차근차근 보겠습니다.^^

밑천에서 "천"이 아마 "마르지 않는 샘"이 아닐까요? ~~**
세수하러 갑니다. ~~~~~ ㅇㅕ>
디비를 거칠 필요가 없으니..
처리속도면에선 적어도 스킨화한 코드와는  비교되지 않겠네요...

좋은 밀알 감사드립니다...
네. 코멘트 달아 주셔서 감사합니다.

그누보드는 너무 스킨 의존적이라

편하긴 하지만 많이 무거워지기도 하지요.

그런 것의 대안으로 사용될수 있는 부분입니다
감사합니다.
  유창화님 팁&테크 전수자로 지정해주세요!!~~**

이해는 엄두도 못내고 우선 테스트해봅니다.

개인적으로 게시판업로드+최신글 형태에서 막혁던 플래시 배너도 깔끔하게 올라오는군요.
http://www.gnusr.com/Ysample/Ybanner.php

게시판 뷰페이지에서 갖다붙인 스크립트는 안 먹히는군요?!
doc_write도 그누보드 내부함수인가요? ㅎㅎ 별짓을 다해봅니다.(-.-)
<script>doc_write(flash_movie('http://montessori.pe.kr/g4/gnusr/images/grinbi62_bann.swf', '_g4_1', '180', '50', 'transparent'));</script>

그누와 연동시 초보적인 질문으로
라이브러리에 넣어 사용하는 것과 해당 페이지에 인클루드 시키는 것 아무래도 후자쪽이 낫겠죠??

멋진 휴일 되세요~!

ps)
배너 추가 및 설정 부분을 분리하고 테스트로 붙여보았습니다.
http://gnusr.com/

혼나지 않을까 무섭지만,
이렇게 무식하게 뚝 잘라서 Ybanner_ad.php로 저장하고 테스트해도 되네요.
<?
//유창화님 파일타입 배너관리 시스템 2006년 7월 23일 일요일

/*제작자 : 유창화
사용제한 : 사용은 자유롭습니다. 단, 강의나 책의 내용으로서 사용될 경우 허락을 받으셔야 합니다.*/

$g4_path = "../..";
include_once("$g4_path/common.php");

if ($is_admin != "super")
    alert("최고관리자만 접근 가능합니다.", $g4[path]);

include_once './Ybanner.php';


if (empty($_GET['Ymode'])) {//전체보기

  echo "
  [배너 등록]
  <br><br>

~~
네 그런식으로 사용하시면 됩니다.

원래 여러파일로 관리하던 것을 하나로 묵어놔서리......

함수부분과 환경설정 부분을 따로 파일로 하나 만드시고
배너를 뿌리고자 하는 곳에 인클루드 해서 사용하시면 되겟지요

등록이나 리스트 보는 페이지는 관리자에 메뉴로 하나 추가하면 될것이구요
등록된 특정 배너의 삭제는

그냥 등록 수정폼에서 해당 칸을 비우고 저장하면 됩니다.

전체 부분의 배너를 없앨경우에는

저장디렉토리에서 해당 배너에 해당하는 파일하나 삭제해주면 됩니다.
<?=Yecho_banner('자기가 등록한 배너 포스');?>


 '자기가 등록한 배너 포스'란에

등록된 배너 리스트가 "main_right"면 요걸 써주나요?

 <?=Yecho_banner('main_right');?><==요렇게요

요렇게 넣었는데 에러가 나서요^^
네 그렇게 사용하는 것이 맞습니다.

그런데 제가 보기엔

그것을 사용하는 페이지에

환경설정 부분이랑 함수부분을 안넣어주신것 같군요

그부분을 해당페이지 상단에 넣거나

따로 파일로 만들어서 인클루드 하세요




//정보가 저장될 디렉토리를 지정하세요, 퍼미션은 웹서버가 읽고 쓸수 있어야 합니다.
$Ypath_array_files = './temp/banner_arrays';



//사용된 함수
function Yget_array_from_file($path_file, $array_name){

  $$array_name = Array();

  if (is_file($path_file)){

    @include $path_file;
  }

  return $$array_name;
}

function Yecho_banner($pos){

  global $Ypath_array_files;

  $Ypath_file = $Ypath_array_files . '/' . $pos . '.php';
  $Ybanner = Yget_array_from_file($Ypath_file, 'Ybanner');

  //등록된 배너일 경우에만
  if (is_array($Ybanner)){

    $rand_key = array_rand ($Ybanner);
    echo base64_decode($Ybanner[$rand_key]);
  }
}
꼭 이것을 배너관리에만 쓸수 있는 것은 아닙니다.

하나의 위치에 하나의 칸만 등록할경우

한개만 나오지요. 랜덤이 아니구요

그래서

이런것도 가능합니다

이벤트 페이지 같은 것을 통째로 넣고 사용하고, 수정도 하는 용도로 사용해도 됩니다.

그럼 일일이 ftp로 업로드 시켜주지 않아도 되고 편한점이 있습니다.

모든 데이타를 인코딩 하기때문에

다른 프로그램에서 발생하는 " ' 로 인한 에러는 발생하지 않습니다.
http://artpia.net/art/index1.php  상단에 include_once("$g4[path]/Ybanner2.php");을 불러오고

Ybanner2.php 아래내용 입니다.
<?
if (!defined("_GNUBOARD_")) exit; // 개별페이지 접근불가
//정보가 저장될 디렉토리를 지정하세요, 퍼미션은 웹서버가 읽고 쓸수 있어야 합니다.
$Ypath_array_files = './temp/banner_arrays';

function Yecho_banner($pos){

  global $Ypath_array_files;

  $Ypath_file = $Ypath_array_files . '/' . $pos . '.php';
  $Ybanner = Yget_array_from_file($Ypath_file, 'Ybanner');

  //등록된 배너일 경우에만
  if (is_array($Ybanner)){

    $rand_key = array_rand ($Ybanner);
    echo base64_decode($Ybanner[$rand_key]);
  }
}
?>

에러가 납니다...우앙~

한번 실패하면 수렁에 빠져 아예 뭘하는지 모르는 7쟁이...꼴통^^
안녕하세요

잘 하셧는데요

제가 위에 함수 한개만 넣어놧다고

함수 한개만 넣으셧네요?

함수 두개다 넣어주세요
유창화님 말씀하신 대로 다양한 응용이 가능한점이 너무 마음에 듭니다.
이번 기회에 짭짤한 광고업체도 소개좀 해주세요.ㅎㅎ

배너 관리페이지를 팝업으로 띄울경우 상단에 필요한 스크립트 놓고 갑니다.~~**
if ($is_admin != "super")
  echo "<script>alert('\\n\\n최고관리자만 접근 가능합니다.\\n\\n');location.href='javascript:self.close()';</script>";
//팝업으로 관리페이지를 링크할 경우 경로로 돌리지 않고 경고후 창을 닫아버립니다.
위같이 할경우

반드시 exit;를 넣어주시기 바랍니다.

스크립트를 꺼버리고 접근할수 있기때문에

모두 실행됩니다.

아래와 같이요

if ($is_admin != "super") {

  echo "<script>alert('\\n\\n최고관리자만 접근 가능합니다.\\n\\n');location.href='javascript:self.close()';</script>";
  exit;
}
사실은 이 배너 관리 시스템은 제가 예전에 php책 쓸려고 했을때

Ysummary와 같이 집필하려고 했던 것이었는데

그 때 출판사 기획자 분께서 이해를 잘 못하셨는지

제가 설명을 잘 못 했는지........

"에이 이런 간단한것 말고 중고급용 예제로 해주세요"

해서 뺀찌 먹었던 겁니다.



그런데 전 이런 식의 방법을 2000년도 부터 만들어서 사용하고 있고

제가 여러가지 프로그램에서 응용해서 사용하던 괜찬은 내용이거든요.

Ysummary도 이것의 활용 측면에서 만들어진 것이고

위에 링크에 걸어둔 제 코멘트도

이것의 활용차원에서 만들어진 것들입니다.

별로 길지도 않고 어렵지 않은 코드이지만,

어떻게 받아들이고 어떻게 사용하느냐 따라

아주 좋은 결과물을 만들수 있습니다.
뺀찌 나왔습니다.ㅎㅎ
지금 여기도 "그누보드 원본을 수정해야 한다"면 대략 "뺀찌" 분위기 되기 쉽다는 생각을 해봅니다.
되돌리기 귀찮아서 테스트 해볼 생각을 안 할수도 있고,
잦은 업데이트에 대한 부담때문에도 그렇고,

아무튼 원본에 손대지 않는 선에서 적용가능한 소스나 팁이 인기가 있는것은 사실인듯 합니다.

이 팁은 디비를 거치지 않아도 되는 특정 블럭에 응용한다면 속도문제등 여러 면에서 매우 유익할듯 합니다.
지금도 어디를 갈아엎나 두리번 거리고 있답니다.^^

코멘트 30이 눈앞에 보이네요~~**
감사합니다.

눈으로 찜 해 두었다가 이제서야 가지고 갑니다....

외부의 링크를 끌어오는 부분에 연결해 보려 합니다....^^
전체 64
개발자팁 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT