그룹용 오늘본 상품 보여주기

· 2008-11-15 (토) 12:12:03 · 5029 · 13
여전히 크롬에서 글작성이 자연스럽지 못하네요..

그누보드 `그룹용 오늘본 상품` 보여주는 겁니다.
원하시는분이 계셔서 게시판용을 몇자 고쳐서 올립니다.

        <?php

        $token = md5(uniqid(rand(), true));
        set_session("ss_token", $token);

        $tv_grid = "toe";// 그룹지정

        if ($gr_id == $tv_grid)// 지정된 그룹일때만 세션생성
        {
          $saved = false;
          $tv_idx = (int)get_session("ss_tv_idx");
          if ($tv_idx > 0) {
            for ($i=1; $i<=$tv_idx; $i++)
            {
              if (get_session("ss_tv[$i]") == $tv_grid."|".$bo_table."|".$wr_id)
              {
                $saved = true;
                break;
              }
            }
          }

          if (!$saved && $gr_id && $bo_table && $wr_id)
          {
            $tv_idx++;
            set_session("ss_tv_idx", $tv_idx);
            set_session("ss_tv[$tv_idx]", $tv_grid."|".$bo_table."|".$wr_id);
          }
        }

        //print_r2($_SESSION);
        $tv_idx = get_session("ss_tv_idx");
        $tv_div[top] = 0;
        $tv_div[img_length] = 5; // 보여줄 이미지갯수
        ?>

        <style type="text/css">
        #divTodayHidden { position:relative; top:<?=$tv_div[top]?>;display:none; }
        /* #divToday { ie 스크립트 에러로 인라인코딩 } */
        #divToday .top { margin:0; padding:0; background: url(<?=$g4[shop_path]?>/img/todayview01.gif) no-repeat; width:91px; height:31px; }
        #divToday #todayviewcount { position:absolute; top:9px; right:10px; color:#555; }
        #divToday #topBtn { margin:0; padding:0; background: url(<?=$g4[shop_path]?>/img/todayview02.gif) no-repeat; width:90px; height:12px; cursor:pointer; }
        #divToday #botBtn { margin:0; padding:0; background: url(<?=$g4[shop_path]?>/img/todayview05.gif) no-repeat; width:90px; height:10px; cursor:pointer; }
        #divToday #pList { margin:0 auto; padding:0; text-align:center; background: url(<?=$g4[shop_path]?>/img/todayview03.gif) repeat-y; width:90px; height:auto; }
        #divToday #noList { margin:0; padding:0; background: url(<?=$g4[shop_path]?>/img/todayview04.gif) no-repeat; width:90px; height:21px; }
        #divToday #hidBtn { margin:0; padding:0; background: url(<?=$g4[shop_path]?>/img/todayview06.gif) no-repeat; width:90px; height:23px; cursor:pointer; }
        </style>

        <div id='divTodayHidden'><a href='javascript:todayview_visible();' title="오늘본 제품 보기">
          <img src='<?=$g4[shop_path]?>/img/todayview.gif' border=0></a>
        </div>

        <div id='divToday' style="position:relative; top:0; margin:0 auto; width:auto; height:auto;">
          <div class="top">
            <div id='todayviewcount'></div>
          </div>

          <?
          if ($tv_idx)
          {
            // 상단 버튼
            if ($tv_idx > $tv_div[img_length])
            {
              echo "<div id='topBtn' onclick=\"javascript:todayview_up();\" title=\"다음제품\"></div>\n";
            }
            // 제품 이미지 출력
            echo "<div id='pList'>\n";

            for ($i=1; $i<=$tv_div[img_length]; $i++)
            {
              echo "           <div id='todayview_{$i}'></div>\n";
            }

            echo "          </div>\n";

            // 하단 버튼
            if ($tv_idx > $tv_div[img_length])
            {
              echo "<div id='botBtn' onclick=\"javascript:todayview_dn();\" title=\"이전제품\"></div>\n";
            }
          }
          else
          {
             echo "<div id='noList'></div>\n";
          }
          ?>

          <div id='hidBtn' onclick="javascript:todayview_hidden();"></div>

        </div>

        <script type="text/javascript">
        var goods_link = new Array();
        <?php
        echo "var goods_max = ".(int)$tv_idx.";\n";
        echo "        var goods_length = ".(int)$tv_div[img_length].";\n";
        echo "        var goods_current = goods_max;\n";
        echo "\n";

        for ($i=1; $i<=$tv_idx; $i++)
        {
          $tv_it_id = get_session("ss_tv[$i]");
          list($ss_grid, $ss_board, $ss_wr_id) = explode('|', $tv_it_id);
          if ($ss_grid == $tv_grid)
          {
            $row = sql_fetch(" select * from $g4[board_file_table] where bo_table = '$ss_board' and wr_id = '$ss_wr_id' ");
            $it_name = get_text(addslashes($row['bf_file']));
            $thumb = $g4[path]."/data/file/".$ss_board."/thumb/".$it_name;
            $size = getimagesize($thumb);
            $tw = $size[0] /2;
            $th = $size[1]/2;
            $img = "<a href='".$g4[bbs_path]."/board.php?bo_table=".$ss_board."&wr_id=".$ss_wr_id."'><img src='$thumb' width='".$tw."' height='".$th."' style='padding:1px 0; border:none;'/></a>";
            echo "        goods_link[$i] = \"{$img}<br/>\";\n";//<span class=small>".cut_str($it_name,10,"")."</span>
          }
        }
        ?>

        var divSave = null;

        function todayview_visible()
        {
          set_cookie('ck_tvhidden', '', 1);
          document.getElementById('divToday').innerHTML = divSave;
        }

        function todayview_hidden()
        {
          divSave = document.getElementById('divToday').innerHTML;
          set_cookie('ck_tvhidden', '1', 1);
          document.getElementById('divToday').innerHTML = document.getElementById('divTodayHidden').innerHTML;
        }

        function todayview_move(current)
        {
          k = 0;
          for (i=goods_current; i>0 ; i--)
          {
            k++;
            if (k > goods_length)
              break;
            document.getElementById('todayview_'+k).innerHTML = goods_link[i];
          }
        }

        function todayview_up()
        {
          if (goods_current + 1 > goods_max)
            alert("오늘 본 마지막 제품입니다.");
          else
            todayview_move(goods_current++);
        }

        function todayview_dn()
        {
          if (goods_current - goods_length == 0)
            alert("오늘 본 처음 제품입니다.");
          else
            todayview_move(goods_current--);
        }

        <?php
        $k=0;
        for ($i=$tv_idx; $i>0; $i--)
        {
          $k++;
          if ($k > $tv_div[img_length])
            break;

          $tv_it_id = get_session("ss_tv[$i]");
          list($ss_grid, $ss_board, $ss_wr_id) = explode('|', $tv_it_id);
          if ($ss_grid == $tv_grid)
          {
            echo "document.getElementById('todayview_{$k}').innerHTML = goods_link[$i];\n";
          }
        }

        if ($tv_idx)
        {
          echo "document.getElementById('todayviewcount').innerHTML = '$tv_idx';\n";
        }

        ?>

        function CheckUIElements()
        {
          var yMenuFrom, yMenuTo, yButtonFrom, yButtonTo, yOffset, timeoutNextCheck;

          yMenuFrom   = parseInt (document.getElementById('divToday').style.top, 10);
          if ( g4_is_gecko )
            yMenuTo = top.pageYOffset + <?=$tv_div[top]?>;
          else if ( g4_is_ie )
            yMenuTo = document.body.scrollTop + parseInt('<?=$tv_div[top]?>');

          timeoutNextCheck = 500;

          if ( Math.abs (yButtonFrom - (yMenuTo + 152)) < 6 && yButtonTo < yButtonFrom )
          {
            setTimeout ("CheckUIElements()", timeoutNextCheck);
            return;
          }

          if ( yMenuFrom != yMenuTo )
          {
            yOffset = Math.ceil( Math.abs( yMenuTo - yMenuFrom ) / 10 );
            if ( yMenuTo < yMenuFrom )
              yOffset = -yOffset;

            document.getElementById('divToday').style.top = parseInt(document.getElementById('divToday').style.top) + yOffset;

            timeoutNextCheck = 10;
          }

          setTimeout ("CheckUIElements()", timeoutNextCheck);
        }

        function OnLoad() {
          var y;

          if ( top.frames.length )
            document.getElementById('divToday').style.display = '';

          CheckUIElements();
          return true;
        }

        OnLoad();

        <?php
        if ($_COOKIE['ck_tvhidden'])
           echo "todayview_hidden();";
        ?>

        </script>

덧);
저는 프로그래머가 아니기 때문에 어려운거 물어보시면 답변 못해드립니다.^^
연구 보강해서 쓰세요.
|

댓글 13개

2008-11-17 (월) 18:28:03
정말 고맙습니다.
2008-11-20 (목) 17:38:01
오늘본상품 제가 찾던것인데 감사합니다.


잘쓰겠습니다.
오호 감사합니다.
2008-11-24 (월) 09:51:28
바쁘실텐데... 한가지만 질문드려도 될까요?
설치해보니 이미지 사이즈가 너무 작게 보여서여..
혹시 크게할 수있는 방법은 없을까 해서요?

공개하여 주셔서 감사드림니다.
여기서는 실제 썸네일사이즈의 반으로 설정되어있습니다.
$size = getimagesize($thumb);
$tw = $size[0] /2;
$th = $size[1]/2;
그냥 아래처럼 하면 생성된 썸네일 사이즈대로 나올겁니다.
$size = getimagesize($thumb);
$tw = $size[0];
$th = $size[1];
컴퓨터기술자님^^

위 내용을 today_view.php로 루트에 올렸다고 가정할때...

<div id="아무아이디">

<?
// 오늘본 제품
include_once ($g4['path']."/today_view.php");
?>

</div>
스크롤링을 해야한다면 위 코드 바로아래에 아래 스크립트도 추가합니다.
<!-- 스크롤링을 위한 스크립트 -->
<script type="text/javascript">initMoving(document.getElementById("아무아이디"), 66, 66, 250);</script>

--------------------------------------------------------

그리고 아래내용도 별도 js파일로 저장해서 헤더에 링크하세요.

// 웹표준을 고려한 우측 고정 메뉴
// http://hyeonseok.com/pmwiki/index.php/Javascript/SmoothMovingLayer 신현석님
// IE6, IE7, FF2, Opera9, Safari3
function initMoving(target, position, topLimit, btmLimit)
{
if (!target)
return false;

var obj = target;
obj.initTop = position;
obj.topLimit = topLimit;
obj.bottomLimit = document.documentElement.scrollHeight - btmLimit;

obj.style.position = "absolute";
obj.top = obj.initTop;
obj.left = obj.initLeft;

if (typeof(window.pageYOffset) == "number")
{
obj.getTop = function()
{
return window.pageYOffset;
}
}
else if (typeof(document.documentElement.scrollTop) == "number")
{
obj.getTop = function()
{
return document.documentElement.scrollTop;
}
}
else
{
obj.getTop = function()
{
return 0;
}
}

if (self.innerHeight)
{
obj.getHeight = function()
{
return self.innerHeight;
}
}
else if(document.documentElement.clientHeight)
{
obj.getHeight = function()
{
return document.documentElement.clientHeight;
}
}
else
{
obj.getHeight = function()
{
return 500;
}
}

obj.move = setInterval(function()
{
if (obj.initTop > 0)
{
pos = obj.getTop() + obj.initTop;
}
else
{
pos = obj.getTop() + obj.getHeight() + obj.initTop;
//pos = obj.getTop() + obj.getHeight() / 2 - 15;
}

if (pos > obj.bottomLimit)
pos = obj.bottomLimit;
if (pos < obj.topLimit)
pos = obj.topLimit;

interval = obj.top - pos;
obj.top = obj.top - interval / 3;
obj.style.top = obj.top + "px";
}, 30)
}
2008-11-24 (월) 20:12:16
답변감사합니다. 좋은저녁되세요.
2008-11-25 (화) 12:23:10
알려주신데로 해보니 잘되네요.^^
로그인해야 이미지가 나타나고, png 파일은 안보이네요...

감사히 잘 쓰겠습니다.

P,S)
염치없지만 로그인 안된상태에서 나타하고싶어요^^;;;
부탁드립니다.
제가 그누보드 최신 utf-8 버전에서 테스트 한걸로는 png파일도 가져옵니다.
다른 설정부분을 검토해보세요.

세션은 로그인 여부와 관계없이 생성되며 상품목록도 보여줍니다.
로그아웃하면 삭제되구요.

즉 로그인 이전에 본제품은 로그인해도 계속 보이지만 일단 로그아웃하면 모두 사라지는게 정상입니다.

세션생성시 아이디와 제품정보까지 생성하고 디비에 넣는 방식으로 응용한다면 다시 로그인했을때에도 그날본 제품을 보여줄수 있을것 같긴 하네요.
2008-11-25 (화) 17:48:59
생각데로 안되네여...
포기했어여^^'

답변주셔서 감사합니다.
수고하세요...
아.....적용하는 방법을 모르겠어요...
2009-09-02 (수) 18:54:13
감사합니다.
2009-11-24 (화) 02:19:09
좋은 팁 감사합니다.
댓글을 작성하시려면 로그인이 필요합니다.

그누4 팁자료실

3,309건

그누보드4와 관련된 팁을 여러분들과 함께 공유하세요. 나누면 즐거움이 커집니다.

+
제목 글쓴이 날짜 조회
08-12-10 조회 2.1만
08-01-06 조회 7,748
07-11-28 조회 6,670
08-12-09 조회 3,987
08-12-07 조회 3,671
08-12-07 조회 4,238
08-12-06 조회 2,282
08-12-05 조회 9,003
08-12-03 조회 5,789
08-12-02 조회 4,476
08-12-02 조회 3,072
08-12-01 조회 2,407
08-11-27 조회 5,342
08-11-25 조회 4,216
08-11-24 조회 3,452
08-11-21 조회 6,049
08-11-20 조회 1.6만
08-11-18 조회 4,264
08-11-15 조회 5,030
08-11-14 조회 3,866