2008년 3월 19일 수요일

[강좌] RSS,ATOM 생성 클래스 .. php에서 rss 새성하기

예전에 내가 급하게 만들었던 rss 만들기 클래스가 있었는데..
[강좌] php에서 rss 문서 만들기
간단하게 수정해서 쓸만하긴 하지만 먼가 어설퍼서  ㅋㅋ

feedcreator 라는 프로그램을 소개한다.~
http://www.bitfolge.de/rsscreator-en.html
RSS0.91, RSS1.0, RSS2.0, PIE0.1, MBOX, OPML, ATOM0.3, HTML, JS
다양한 포맷을 지원한다.

아래는 feedcreator.cass.php에 포함된 사용 예제..

include("feedcreator.class.php");

$rss = new UniversalFeedCreator();
$rss->useCached();

//타이틀
$rss->title = "PHP news";
//피드 설명
$rss->description = "daily news from the PHP scripting world";
//링크
$rss->link = "http://www.dailyphp.net/news";
//피드주소
$rss->feedURL = "http://www.dailyphp.net/".$PHP_SELF;

//이미지와 관련된것. 아마 이게 rss 2.0에 새로 생긴것같음..
// 글과 따로 이미지를 넣을수 있음
$image = new FeedImage();
$image->title = "dailyphp.net logo";
$image->url = "http://www.dailyphp.net/images/logo.gif";
$image->link = "http://www.dailyphp.net";
$image->description = "Feed provided by dailyphp.net. Click to visit.";

// 옵션
$image->descriptionTruncSize = 500;
$image->descriptionHtmlSyndicated = true;

$rss->image = $image;

// 대충 여기서 db 돌리고..
//mysql_select_db($dbHost, $dbUser, $dbPass);
//$res = mysql_query("SELECT * FROM news ORDER BY newsdate DESC");
//while ($data = mysql_fetch_object($res)) {
    $item = new FeedItem();

     //글 제목
    $item->title = "This is an the test title of an item";
    //글 주소
    $item->link = "http://localhost/item/";
    //글 내용
    $item->description = "<b>description in </b><br/>HTML";
   
    //피드 시간
    $item->date = time();
    $item->source = "http://www.dailyphp.net";
    $item->author = "John Doe";
    
    $rss->addItem($item);
//}

// 원하는 피드 형식을 정해주면 됨
// 피드 형식 :  RSS0.91, RSS1.0, RSS2.0, PIE0.1, MBOX, OPML, ATOM0.3, HTML, JS
echo $rss->saveFeed("RSS0.91", "feed.xml");
사용법 대충 보면 알겠지만 그다지 어렵지는 않다.

이거..강좌라고 해놓고 소개잖아 소개.. -_-;

[강좌] php용 강력하면서 쉬운 소켓(socket)클래스 , Snoopy

왜 그동안 삽질을 하고 있었던걸까? 
호스팅에서 사이트 긁어오기 (부제:로또 번호 긁어오기)
위에 글에서도 적었지만, 일반 호스팅에서는 외부에 있는 파일을 file,fopen으로 가져오는것을 막아 놨다. 그래서 꽁수로 python을 쓰면 된다고 흥분하며 말했다.

그.런.데. 당연히 안될거라 생각했던 fsocket은 된다. -_-;
난 왜 저걸 하고싶어서 파이썬 책을 두권이나 샀던걸까 ..

    /(
//\\
// )_.-"""-._,-""-.
\\ ^,'_\ /_\ )
`./ /O\| |/O\\ /
\ \_/| |\_/ \_/
\ .' _ `. /
.-. ( .:(_):. ) ,-.
( `._`._.-._,'_,' )
) (
( .-------------. ) hjw
`-' `-'



여튼 snoopy 라는 강력하면서 쉬운 php용 소켓 클래스를 소개한다.


마지막 버전은 http://snoopy.sourceforge.net/ 에서 구할수 있다.


하지만 .. 지금 현재 마지막 버전인 snoopy 1.2.3 는 구문 오류가 난다.



snoopy 1.2.3 버전 구문오류 해결법


722번째 줄에서 구문오류가 날것이다.
722번째 줄을 보면 아래와 같다
                            "?,
                            "?,
                            "?,
                            "?,
                            "?,
                            "?,
                            "?,



이걸 아래와 같이 바꿔주면 된다.

                            "?",
                            "?",
                            "?",
                            "?",
                            "?",
                            "?",
                            "?",




아마도 어떤 특수 문자들 같은데 한글 윈도우에서는 보이지 않거나 깨져버린것같다.

그래서 ? 로 바뀌어버리면서 구문오류가 난것같다. (이유는 정확하지 않음)

일단 다운 받아서 원하는 디렉토리에 스누피를 넣어두시고 아래와 같이 사용하면 된다

include "Snoopy.class.php";
$snoopy = new Snoopy;
$snoopy->fetchtext("http://www.php.net/");
print $snoopy->results;

아 놀라워라.. 너무 쉽다.


이런것도 가능하다.



$submit_url = "http://lnk.ispi.net/texis/scripts/msearch/netsearch.html";
   
$submit_vars["q"] = "amiga";
$submit_vars["submit"] = "Search!";
$submit_vars["searchhost"] = "Altavista";
        $snoopy->submit($submit_url,$submit_vars);
print $snoopy->results;

저 주소로 쿼리를 보내서 결과값을 값는것이다.

이외에도 여러가지 기능들이 많다.




  • 웹사이트 내용을 긁어오기

  • html 태그는 쏙빼고 내용만 긁어오기

  • 링크만 골라서 가져오기

  • 프록시서버 지원

  • 기본적인 로그인인증 지원

  • 사용정보, 레퍼러, 쿠키등 설정 지원 (아.. 이거 위험한데..)

  • 쉽게 폼데이타를 보내고 결과값 받기 (이거도 위험한데..)

  • 프레임 지원




자세한건 README 파일 참조 



세상엔 없는게 없는거같다.



프로그래머로써 너무 편해지고 있다.


집안일이 힘들것같아서 세탁기며 청소기며 집안에 들여놔줬더니 더 게을러지는 주부같다고나 할까? ㅋㅋ


그럼.. 파이썬은 안녕~ 다음에 언제 또 필요해질지 모르겟지만 이제는 나에게 무용해졌구나.. 그동안 고생했어.

[웹디자인] CSS 로 만들어진 다양한 네비게이션 메뉴들 대량 모음!!

출처 : CSSで作成されたサイトのメニューサンプル集(css로 작성된 사이트메뉴 샘플들 모음.)

サイトのデザインにとってメニュー部分は重要な箇所になってきます。そのメニュー部分のサンプル集。
多くのリソースから自分の作りたいサイトにあったナビゲーションを選んで使えますね。

사이트에 있어서 메뉴부분은 중요하지. 그 메뉴부분 샘플모음.
많은 리리즈에서 자기가 만드는 사이트에 맞게 네비게이션을 골라서 쓰삼~ 

  1. 11 CSS navigation menus
  2. 12 more CSS Navigation Menus.
  3. 14 Free Vertical CSS Menus
  4. 2-level horizontal navigation
  5. Absolute Lists
  6. Accessible Image-Tab Rollovers
  7. ADxMenu
  8. A drop-down theme
  9. Bookend Lists
  10. Bulletproof Slants
  11. Centered Tabs with CSS
  12. Clickable Link Backgrounds
  13. Create a Teaser Thumbnail List Using CSS
  14. Creating Indented Navigation Lists
  15. Creating Multicolumn Lists
  16. cssMenus - 4 Level Deep List Menu
  17. CSS and Round Corners
  18. CSS-Based Tabbed Menu
  19. CSS-based Navigation
  20. CSS
  21. CSS Mini Tabs (the UN-tab, tab)
  22. CSS only dropdown menu
  23. CSS only flyout menus
  24. CSS only flyout/dropdown menu
  25. CSS only flyout menu with transparency
  26. CSS only vertical sliding menu
  27. CSS Swag
  28. CSS Tabs
  29. CSS Tabs
  30. CSS tabs with Submenus
  31. dTree Navigation Menu
  32. Definition lists - misused or misunderstood?
  33. Do You Want To Do That With CSS? - Multiple Column Lists
  34. Drop-Down Menus, Horizontal Style
  35. Float Mini tabs
  36. Flowing a List Across Multiple Columns
  37. Free Menu Designs V 1.1
  38. FreeStyle Menus
  39. Hidden tab menu
  40. How to Style a Definition List with CSS

    더보기>>>

CSSベースなのも嬉しいですね。
css 베이스라서 좋구만.

나도 좋구만~~~ >.< b

자동 스케줄러 업로드 FTP 프로그램. FLING!! 니가 짱먹어라

자동 업로드 ftp 프로그램을 찾아서 삼만리..
온갖 자동 업로드 프로그램을 깔고 지우고 .. 비쥬얼베이직을 직접 짜보기도하고 ..했지만..
얼마전에 정말 우연히 찾게 된 FLING 이라는 프로그램을 만나고 모든 근심이 사라졌다.

더군다나.. 공짜다. 프로그램 소개에도 있지만 COMPLETRY FREE 라 이말이다.
http://www.nchsoftware.com/ftp/index.html

FLING
그냥 ftp 프로그램이 아니라. 스케줄러가 가미된 ftp 다
즉, 주기적으로 파일을 ftp로 전송해 주는 역활을 해준다.

원래는 auto ftp manager 라는 이름만 봐도 스케줄러 ftp 라고 말해주는 프로그램을 썼는데, 이건 단 1건만 등록 가능하다. 돈주고 사면 무한대로 가능하지만 국내에서 돈주고 사기가 쉽지가 않다. 더군다나.... 예기치 못한 버그들과 에러로 믿고 맞길수가 없다. 이놈의 쉴세없는 다운때문에 클라이언트에게 욕먹은거 생각하면.. T^T

fling 은 정말 대용량도 에러 한번 안뜨고 잘 보낸다.
특히나 기가막힌 기능은 .. 파일이 업데이트 되거나 폴더안에 새파일이 들어오면 자동감지해서 그냥 바로 ftp로 보내버린다는것이다.

화면에 보시다시피 mode 가 automatic 이면 자동감지해서 바로 바로 보낸다.

그외에도 일정한 시간 간격으로 보낼수도 있고 , 직접 수동으로 보낼수도 있다.


아.. 이런 프로그램이 공짜라니.. 믿을수가 없다.

호스팅에서 사이트 긁어오기 (부제:로또 번호 긁어오기)

직접 서버를 쓰지 않고 호스팅을 사용하게 되면 간혹 답답한 경우가 많다.

보안때문인지 서버 부하때문인지 알수없지만 꼭 썻으면 하는 기능을 막아 놓는다.
CRON 도 그렇고 , php에서는 file 이나 fsocket으로 다른 사이트의 내용을 가져 오는것도 안되는 경우가 많다.

이번에 http://bemlotto.com 이라는 허접한 개인 사이트를 만들었는데 , 로또 당첨번호를 자동으로 긁어 오고 싶었다. 하지만 내가 쓰는 호스팅에서는 file함수와 fopen함수가 안되는거다.

http://lot.kbstar.com/quics?page=A005345

그래서 위 사이트를 긁어 올수가 없었다.
 
그런데 웃긴건.. PYTHON(파이썬)을 쓰면 된다는거다.

그래서 긁어오는 부분만 파이썬을 이용하기로 했다. 파이썬에서 긁어오고 mysql에 집어 넣는거까지 하고 싶었지만 당췌 파이썬에서 mysql을 하는게 너무 어려워서 포기하고 파이썬은 그냥 긁어오고 그걸 php에서 받아서 디비에 넣는 어설픈 과정을 거치기로 했다.


먼저 아래는 파이썬 소스다.

#!/home/bin/python
import urllib,re,string,time,sys

url='http://lot.kbstar.com/quics?page=A005345'
tmp=''
text = urllib.urlopen(url).read()

p=re.compile(r"(<option value='\d{3}\' selected)")
m=p.findall(text)
kai=string.replace(m[0],"<option value='","")
kai=string.replace(kai,"' selected","")

p=re.compile(r'(class=\'lot_number\'[ a-z=\']*>\d{1,2}\</td>)')
m=p.findall(text)
lottoNum=[]
for x in range(len(m)):
    tmpText=string.replace(m[x],'class=\'lot_number\'','')
    tmpText=string.replace(tmpText,'</td>','')
    tmpText=string.replace(tmpText,' align=\'center\'>','')
    tmpText=string.replace(tmpText,'>','')

    lottoNum.insert(x,tmpText)

print kai+","+lottoNum[0]+","+lottoNum[1]+","+lottoNum[2]+","+lottoNum[3]+","+lottoNum[4]+","+lottoNum[5]+","+lottoNum[6]
너무 허접해서 보이기 싫은 내 몸처럼 소스가 무척 부끄럽다. 파이썬에 익숙치 않아서 코끼리 뒷다리 만지듯 google에 찾아보면서 만들었다.

여튼 정규식은 php보다 파이썬이 훨씬 쉽다는 기분이다.

위의 파일을 getLotto.py 라고 저장하고 실행 시켜 보면
235,21,22,26,27,31,37,08
이렇게 나온다.

이 텍스트를 php에서 받아서 사용하면된다.
php에서 받는 방법은 여러가지가 있겠지만 아래와 같이 exec 함수를 사용했다.

$tmp=exec("python getLotto.py");
echo $tmp;
이 이후는 그냥 $tmp 변수를 explode 해서 디비에 넣던지 화면에 뿌려주던지 알아서 하면 된다.

그런후 또 하나 중요한건 막아놓은 cron 기능을 대신해서 feedburner을 이용하는거다.
그것에 대해서는 아래글 참조~

feedburner 를 cron 대용으로 쓰기



설마 .. 이글보고 파이썬도 사이트 긁어오는거 막는건 아니겠지?


원하시는 사이트에서 원하는 내용만 긁어 드립니다.
파격적인 가격 !! 페이지당 5만원

원하시는 사이트에서 원하는 내용만 주기적으로 긁어서 db에 넣어드리거나 rss로 만들어 드립니다. FTP만 열어 주시면 됩니다.
작업기간은 사이트 난이도에 따라서 다르겠지만 하루는 안걸립니다.
원하시는 분은 [##_1L|1141509530.png|width="157" height="21" alt="사용자 삽입 이미지"|_##]


으로 메일 주세요~ ^^  좀 도와주십쇼

window iis 환경에서 주기적으로 php 실행시키기

리눅스를 쓰면  CRON 이라는게 있어서 주기적으로 어떤 php 프로그램 실행시키기가 참 쉽다.
물론 윈도우에도 스케줄러라는게 있긴 한데.. 거참.. 써먹기 부족한면이 많다.

iis 에서 php로 구축할 일이 있는데 주기적으로 데이타를 뽑아오는일때문에 구글을 탐험하다.. Solway's Task Scheduler 1.5 라는것을 발견했다.

프로그램을 깔아보면 "아.. 참 조잡하다" 라는 생각을 들게한다.
하지만 가볍고 쓰기 편하다. 물론 정확하게 1분,3분 이렇게 정할수는 없지만 그나마 5분 10분 30분 1시간 이정도로 세팅가능하다.

Solway's Task Scheduler 1.5 다운로드 받기
사용법은 깔아보면 .. 허무할정도로 쉽다. -_-; 설명하기 귀찮은게 아냐..

하지만..
막상 php를 실행시켜 볼려고 하면 맘대로 안될거라 생각된다.

스케줄러에 php 연결시키는 방법

1. 먼저 스케줄러에 php 파일을 등록한다.

File to open or excute 칸에 그냥 php 파일을 찾아서 넣습니다.
예) c:\test.php

2. 아무 폴더나 열어서 "도구>폴더옵션" 으로 간다.

3. 파일 형식을 선택한다.

4. 등록된 파일 형식에서 "PHP" 를 찾아서 변경을 눌러준다.

5. 찾아보기 에서 php.exe 를 찾아서 선택해준다.
이렇게 하면 php를 더블클릭하면 보토은 노트패드나 드림위즈 , 에디터 플러스 같은것이 실행되지만 , 위와 같이 설정하면 php.exe 가 실행되기 때문에 바로 php 프로그램이 작동하게 된다.

그럼 필요하셨던 분들은 한번씩 해보시고~~ 오늘도 즐거운 하루~


feedburner 를 cron 대용으로 쓰기


[강좌] php에서 rss 문서 만들기 라는 글을 새로 업데이트 하면서 다시금 피드버너(http://www.feedburner.com) 를 방문하게 되었는데..

가만 생각해보니까.. 피드버너를 cron 대용으로 써도 되겠다는 생각이 들었다.

보통 호스팅에 보면 cron을 지원해주지 않아서 주기적으로 실행시켜야할 프로그램을 실행시키지 못하는 경우가 있는데 , 이럴때 피드버너를 이용하는것이다.

피드버너는 rss 문서를 주기적으로 긁어가기 때문이다.

피드버너에서 긁어가기에 오류없을 정도만 대충 rss문서를 생성해둬도 되고,  아니면 이왕 rss 발행할꺼 사이에 끼워둬도 좋을것같다.

물론 정확하게 시간을 맞추거나 하진 못할지도 모르지만.. 일반 호스팅에서  cron 사용욕구를 어느정도 충족할수 있을것같은 생각이 든다.

젤 목말랐던 사람은 나다..

ps)아.. 아무리 생각해도 좋은 생각같다. -_-;;

[강좌] php에서 rss 문서 만들기

PHP XML Library, version 1.2b
를 이용해서 간단하게 rss 를 생성하는 클래스임다.

PHP XML Library, version 1.2b 사용법은 내가 쓴 간단한 강좌 를 봐주시고~

<?
/*
rss 생성 클래스
값들을 받아와서 배열로 넘겨와서 바로 rss 문서 생성함

*/


class rssMaker{

   var $xmlDir="rss";
   var $xmlFile="rss.xml";//rss 파일 입니다.    
   
   
   var $xmlDoc,$xml;
   
   // 뿌려줄 rss 리스트 수
   var $rssMax=5;
       

   function rssMaker($f=""){
   
       if($f!="") $this->xmlFile=$f;
       
   }
   
   /*
   rss 화일을 만든다
   $d 는 배열로 값들이 넘어온다
   ex) title, channel
   
   */
   function make($d){
   
       @$fp=fopen($this->xmlDir.'/'.$this->xmlFile,"w");

       $data['rss']['channel']=$d;
       
       $xmldata = XML_serialize($data);
       $xmldata=str_replace('<rss>','<rss version="2.0">',$xmldata);
      $xmldata=str_replace('&lt;','<',$xmldata);
      $xmldata=str_replace('&gt;','>',$xmldata);
       
       if(!fwrite($fp,$xmldata)){
           $d[error]="파일 기록에서 에러가 발생했습니다.";
           return false;
       }
       return true;
   
   
   }
   
   /*
   게시판글을 뽑아와서 rss만들기..
   */
   function getBoardData($boardName){
  
    // 여기부분은 각자 상황에 맞게 하시면 됩니다.
  $datas=.....;// 게시판 내용을 불러옵니다.

  // title,link descripttion 3가지만 생성해주면 됩니다.      
       
       $r['title']=iconv("EUC-KR","UTF-8","자유게시판 테스트글 ");
       $r['link']=URL;
       $r['description']="<![CDATA[".iconv("EUC-KR","UTF-8","오우오우")."]]";
       $r['language']="ko";
//iconv 없으면 mb_convert_encoding 함수 써도 됩니다.

       $i=0;
       foreach($datas as $d){//
       
           $r['item'][$i]['title']=iconv("EUC-KR","UTF-8",$d['subject']);
           $r['item'][$i]['link']=URL."/board/";
           $r['item'][$i]['description']="<![CDATA[".iconv("EUC-KR","UTF-8",$d['massage'])."]]";

           $i++;
       }        
       
       return $r;
   
   }

}

?>



너무 급조한감이 없지않지만 , 필요할때 이리 저리 수정해서 쓰시는데 문제는 없을것같습니다만..

그러면 즐거운 주말 되세요~

그외 php와 rss 관련 사이트들
http://www-128.ibm.com/developerworks/xml/library/x-phprss/?ca=dgr-lnxw01PHP-RSS

prototype 에서 table 에 Insertion 할때 IE에서 안되는것 해결법

제목이 너무 길군 --;

prototype에서 Insertion.bottom 을 쓸때 FF에서는 잘되는데 
IE에서는 추가가 안되는 문제가 있다.

이걸 해결하기 위해서는 ..

테이블 안에 <tbody></tbody>태그를 넣어주고 , id 를 tbody에 주면 문제가 해결된다.


<script>
   new Insertion.Bottom('mytable','<tr><td>1</td><td>김갑돌</td></tr>');
</script>

<table>
<tbody id="mytable">
   <tr>
       <th>번호</th>
       <th>이름</th>  
   </tr>
  </tbody>
</table>

한RSS의 새로운 페이징

난 페이징 만드는게 정말싫다.
<이전 [1][2][3] 다음>
바로 이거 말이다.

처음 PHP를 배우면 PHP의 꽃! 페이징 이라고 과찬하긴하지만 .. 난 정말 페이징 만드는게 귀찮다.
물론 class로 만들어 놓고 갖다 쓰면 되긴 하지만 .. 그래도 먼가 싫다. 특히 검색필드가 많을때 ... >.< 짜증난다. 나의 부주의함으로 인해 꼭 하나씩 변수를 빼먹기 때문이다.

그래서 후리자보드에서 쓰인 페이징 없는 게시판을 보고 감탄을 했던거였다. (후리자 보드에 대한 태그)

오늘 집에서 한RSS로 이런 저런 글들을 보다가 어제와는 먼가가 다르다는 느낌을 계속 받았다. 특별히 한RSS에 공지가 올라온것도 아닌것같은데 먼가가 어제와 달라졌다는 느낌을 지울수가 없었다

한참을 그렇게 쓰다가 방금 그 느낌의 실체를 알았다.
바로 내가 그렇게나 싫어하는 페이징이 사라졌다는것이다.

어제 까지만해도 [1][2][3][4].. 이런것이 있었는데 오늘 사라지고.. "다음10개"를 누르면 먼가가 빙글빙글 돌아가는거다.


1. 다음10개를 누른다
2. 로딩 아이콘이 뜬다
3. 이윽고 , 내용이 뜬다
4. 100개중 1-30100개중 1-40으로 바뀐다.




아아... 아이디어라는건 좋은거다.
이렇게 소소하게 쓰는 아작스 얼마나 좋은가!!!!

정말 개인적으로 개인화홈이라고 아작스떡칠을 하며 나의 400HZ 노트북을 힘들게 하는 야후 다음보다 솔솔한 한RSS의 깜찍한 아작스가 100배좋다.

여튼.. 머.. 후리자보드의 페이징도 좋고. 한RSS의 먼가 간단하면서 눈에 쏙들어오는 페이징도 좋다.~ ^^

ps) 한RSS 운영자님 짱드세요~ 0,.o b

[간단팁] 항상 페이지 맨마지막으로 이동하기

<script>
function ttt(){
   window.scrollTo(0,document.body.scrollHeight);
}
setInterval(ttt,10);
</script>

가끔 대량의 데이타를 입력하거나 출력할때 현재 얼마나 데이타 입력되었는지 볼때 편리하다. (말로 하기 왜 이렇게 어려운거야 >.<)

그러니까..

데이타 807 개 입력완료
데이타 808 개 입력완료
데이타 809 개 입력완료
데이타 810 개 입력완료
데이타 811 개 입력완료
데이타 812 개 입력완료
데이타 813 개 입력완료
데이타 814 개 입력완료
데이타 815 개 입력완료
데이타 816 개 입력완료
데이타 817 개 입력완료
데이타 818 개 입력완료
데이타 819 개 입력완료
데이타 820 개 입력완료
데이타 821 개 입력완료

이런식으로 화면에 뿌려지면 스크롤이 안내려가는데 위 스크립트를 페이지 맨위에 놓아두면 숫자가 올라갈때마다 맨 아래로 스크롤이 내려가기 때문에 보기 편하다 머. 그렇다는....



[강좌] ajax보드(후리자보드) 따라하기 2

만든사람은 ajax 보드라고 평범한 이름을 지었지만 , 내 마음대로 후리자 보드로 부르고 있는 보드를 흉내내보겠다.

후리자보드를 분석해볼려고 소스를 받아서 봤지만.. ajax의 가장큰 문제점인 난독성이 내눈을 어지럽혀 도중에 포기하고 말았다. 그래서 그냥 내맘대로 흉내를 내 보았는데..

후리자보드 따라하기 1 을 적을때 대충 이걸 응용하면 되겟다 싶었는데, 왠걸.. 직접 구현해 보니 이런 저런 걸리는 문제가 한두개가 아니었다. 다시금 후리자 만세 / >< /

여기서는 자세한 소스코드보단 나는 어떤식으로 구현했는지 아이디어만을 나열할예정이다.
내가 만든 코드를 다른 사람들도 쓸수 있게 컨버트하기가 무척이나 귀찮기 때문이다.
아이디어만 보고 이해가 되면 다행이고 이해가 안되면 내공을 더 쌓았으면 한다.

후리자보드는 iframe을 이용한것같다(말그대로 같다. 정확히 모르겠다)
하지만 난 후리자보드 따라하기 1 에서 생각했던 div 에서 style="overflow:auto" 를 이용해 보려고 한다.

구현하고자 하는 핵심은
리스트의 양에 따라 스크롤이 생기고 그 스크롤을 내리면 스크롤의 위치에 따라 리스트를 불러오는것이다.


이렇게 하면 좋은점은.. 그 구질구질하던 페이징을 안해도 된다는것과 사용자가 손쉽게 원하는 위치로 바로 바로 갈수 있다는것이다 . 여전히 이 방법에 회의를 가지고 옛것이 좋다며 페이징을 나누기를 고집하시는 분들도 있는데 그건 편할데로 하기 바란다.

사실 , 게시판처럼 글썼다 나왔다 하는 경우에는 좀 구현하지 귀찮은 면이 많은게 사실이지만 단순히 검색결과를 보여주거나 작은 화면에서 무한의 리스트를 보여줘야 할때 참으로 유용하다.


prototype 을 썼기때문에 prototype을 모르시는 분은 조금 이해하기 힘들겁니다.

prototype 간단한 설명
prototype 설명서


여튼 소스코드의 핵심은 아래와 같다.

<div id="scrollDiv__">
    <table width=100% height="100%">
           <tr>
               <td valign="top">
                   <dl id="scrollContents"></dl>
               </td>
               <td width=1 valign="top">
                   <div id="scrollHeight"></div>
               </td>
       </tr>
   </table>           
</div>


무시할지도 모른다. 하지만 내가 이걸 생각해낸다고 얼마나 고생했는지 .. T^T

다른건 둘째치고 <div id"scrollHeight"></div> 이부분이 가장 힘들었다.
이것의 역활은 스크롤의 길이를 정해주는 역활이다.

나는 단순히 overflow만 해주면 될것으로 생각했는데, 스크롤을 내려도 내려고 점점 스크롤이 늘어나면서 끝이 나지 않는거였다. 이부분은 직접해보면 어떤 현상인지 알수 있으니 궁금하면 해보라.


여튼 설명하자면,

$('scrollContents') 부분에 내용이 들어가게 되는데 옆에 스크롤때문에 리스트가 길게 있을꺼라고 착각을 할뿐 사실은 10줄밖에 없다.

$('scrollHeight')의 높이 값으로 인해 $('scrollDiv__') 에 스크롤이 생기는것이고 사실은 스크롤을 내린다고 해서 $('scrollContents') 의 내용이 내려가는게 아니라는거다.

별개의 것이다. 아작스로 눈속임을 하는거다.
머.. 아작스 태생 자체가 눈속임이라고 난 생각한다. 실시간인척하지만 사실은 눈속임이라는것..

$('scrollHeight') 에서 스크롤을 내리면 DB로 가서 내린위치에 대비된 내용을 10줄 긁어와 scrollContents에 뿌려주는거다.

Event.observe('scrollDiv__','scroll',getPosition,false);
는 prototype 함수로  스타크래프트의 옵저버 처럼 계속 먼가를 감시하게 하는 함수다.
풀어 말하면 "scrollDiv__" 에서 "scroll"이 일어 날때마다 "getPosition" 이라는 함수를 실행하라 이다.

getPositon 함수는 아래와 같다

function getPosition(){
  
  var curT=eval($('scrollDiv__').scrollTop)+500;
  var oset=parseInt(curT/50-10);//소수점 없앤다
  
   var rrr=(curT/50-10);

   var coffset=50*eval(rrr);
   $('scrollContents').style.paddingTop=coffset+"px";

   getData(oset);//데이타를 불러와서 화면에 뿌려준다.      
      
  var t=curT+','+rrr+','+oset+','+coffset;
  $('po').innerHTML=t;
}


굵게 칠한 숫자들을 적절히 조절하면 한페이지에 나올 줄수를 구할수 있다.
나는 한페이지에 5줄 나오게 설정한 상태다.

oset 은 넘어가서 mysql 에 쓰이게 되는데,
LIMIT oset,5
머 이런식으로 쿼리 붙게 된다.

getData 함수는 적절히 알아서 만들면 되겠다.
oset을 받아서 db에서 내용을 불러서 $('scrollContents')에 뿌려주면 된다.


마지막으로
getHeights();//초기 높이 정하기
가 필요하다.

이 함수도 서버로 아작스로 데이타를 리턴받아오게 되는데 받아온 값은
$('scrollHeight').style.height=받아온 높이값;
으로 쓰이게 된다.

높이는 내용이 보일 높이와 적절히 계산해서 하면될것같다.

허접한 강좌 끝가지 봐주셔서 대단히 감사합니다~ =,.=/

div 스크롤 위치 구하기 (후리자 보드 따라하기)

ajax 보드중에 가장 맘에 드는것
이라는 글에서 "후리자보드"를 소개한적이 있는데,
거기서 사용된 스크롤 위치를 구하는 방법이다.

물론 후리자 보드에서는 iframe 을 쓴것같지만 , div 로도 가능할것으로 생각된다.
prototype을 사용했다.

스크롤 위치만 알수 있다면, 게시판 글 번호등과 매치시켜서 리스트 뿌려주면 될것같다.

<style>
#scroll__{
   width:300px;
   height:200px;
   border:2px solid #999999;
   overflow:auto;
  
}
</style>
<script language="javascript" src="/prototype.js"></script>
<script>
   function getPosition(){
//스크롤 총 높이
       var t=$('scroll__').scrollHeight;
//현재 스크롤 위치
       t=t+','+$('scroll__').scrollTop;
//위치를 뿌려준다
       $('po').innerHTML=t;
   }

</script>
<div id="po"></div>
<div id="scroll__">테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 테스트 </div>

<script>
//이벤트 옵저버 : 스타크의 옵저버랑 비슷함 -_-;
   Event.observe('scroll__','scroll',getPosition,false);
</script>

[!] 현재 페이지의 스크롤 위치를 구할려면?
--> document.body.scrollTop

css 표현과 같은 javascript 함수 정리

CSS Proerties To JavaScript Reference Conversion

CSS Property JavaScript Reference
background background
background-attachment backgroundAttachment
background-color backgroundColor
background-image backgroundImage
background-position backgroundPosition
background-repeat backgroundRepeat
border border
border-bottom borderBottom
border-bottom-color borderBottomColor
border-bottom-style borderBottomStyle
border-bottom-width borderBottomWidth
border-color borderColor
border-left borderLeft
border-left-color borderLeftColor
border-left-style borderLeftStyle
border-left-width borderLeftWidth
border-right borderRight
border-right-color borderRightColor
border-right-style borderRightStyle
border-right-width borderRightWidth
border-style borderStyle
border-top borderTop
border-top-color borderTopColor
border-top-style borderTopStyle
border-top-width borderTopWidth
border-width borderWidth
clear clear
clip clip
color color
cursor cursor
display display
filter filter
font font
font-family fontFamily
font-size fontSize
font-variant fontVariant
font-weight fontWeight
height height
left left
letter-spacing letterSpacing
line-height lineHeight
list-style listStyle
list-style-image listStyleImage
list-style-position listStylePosition
list-style-type listStyleType
margin margin
margin-bottom marginBottom
margin-left marginLeft
margin-right marginRight
margin-top marginTop
overflow overflow
padding padding
padding-bottom paddingBottom
padding-left paddingLeft
padding-right paddingRight
padding-top paddingTop
page-break-after pageBreakAfter
page-break-before pageBreakBefore
position position
float styleFloat
text-align textAlign
text-decoration textDecoration
text-decoration: blink textDecorationBlink
text-decoration: line-through textDecorationLineThrough
text-decoration: none textDecorationNone
text-decoration: overline textDecorationOverline
text-decoration: underline textDecorationUnderline
text-indent textIndent
text-transform textTransform
top top
vertical-align verticalAlign
visibility visibility
width width
z-index zIndex

javascript 로 특정 id의 css 바꾸기

자바스크립트로 특정 id 를 가진 div 의 css 를 바꾸는 소스다

document.getElementById.className='newstyle';

이 얼마나 간단하고 유용한가!!! -_-;;;

아작스를 자꾸 쓰다보니까, css 와 javascript 의 놀랍고도 간결함에 php 소스의 양이 점점 줄고 있다.
그 동안 왜 나는 css 를 갈세하고 javascript 를 우습게 봤는가?

알면 알수록 신비롭고 끌리는 css와 javsscript를 위해 간빠~ ><


div 안에 div 중첩해서 올리기


<div style="position:relative;">
이미지

<div style="position:absolute;top:10px;left:50px">
1980.05.31
</div>
</div>

레이어 위에 레이어 올리기

이것도 별거도 아닌데, 막상 쓸려고 하면 기억안나고 , 찾기도 애매한 것중하나~

(+) 레이어 반투명 만들기
스타일 뒤에 붙여주면됨.

opacity: .5;
filter: alpha(opacity=50);

[javascript] 클릭한 li 에만 배경색 바꾸기

<script>
function bgChange(elm){
           
           var nodes = elm.parentNode.childNodes;//현재 노드의 상위 노드아래의 노드 모두 뽑아내기
                       
           var i = count = 0;
                       
           //노드 총갯수 구하기
           while(node=nodes.item(i++)){
               if( node.nodeType==1 ) {// 1: 노드 , 2: 속성 , 3: 텍스트
                   if(elm==node){
                       node.style.backgroundColor="#eeeeee";
                   }else{
                       node.style.backgroundColor="#ffffff";
                   }
               }
           }
           
           
           
       }

</script>


<ul>
<li  onClick="bgChange(this)">내용1</li>
<li  onClick="bgChange(this)">내용2</li>
<li  onClick="bgChange(this)">내용3</li>
</ul>



[강좌] ASP 에서 CLASS(클래스) 사용하기

php에만 심취하다가 새로온 회사에서 asp 위주라서 asp를 정말 몇년만에 접하게 되었다.
php에서 클래스 쓰는게 몸에 익어서 asp도 클래스를 써볼까 해서 asp 잘하시는분에게 asp에서 클래스는 어떻게 하면 되는지 물었다. 그런데. asp에는 클래스가 없다는거다!!!

헉.. 이런 췐장.. 그럼 함수로 인클루드 해서 다해야하는거야? 라고 낙담을 하다가.. 혹시나 해서 구글에서 열라 찾아봤다. 그러다 보니.. 클래스가 있었다. asp에도 클래스가 있는거다.

우리나라 asp 책 어디에도 나와있지 않은 클래스가 있는거다.
그래서.. 혹시나 asp는 클래스가 없다고 생각하시는분들을 위해서 강좌 아닌 소개수준의 글을 적어본다. 물론 기억력 나쁜 나에게도 대체 기억장치로 글을 남긴다.

그리고 본 글은 다른 언어에서 클래스를 접해 본 분들을 위해 간단한 소개 수준이라 클래스가 무엇인지? 라는 원론적인 이야기는 하지 않는다.

ASP에는 아쉽게도 상속이 되질 않는다. ASP.NET에 가면 지원된다고 들은것같기도 하지만 오리지날  ASP에는 지원되지 않는다. 이점도 유의 하시고..

ASP 클래스의 시작

CLASS TESTCLASS
  .....
END CLASS


일단 시작은 저렇게 시작하고 마친다. 보통의 SUB 나 FUNCTION이랑 비슷하다.

그리고 클래스의 시작과 마침에 자동으로 실행되는 함수를 넣어야 하는데 아래와 같다

Private Sub Class_Initialize()
... 클래스 생성될때 자동으로 실행
END SUB
Private Sub Class_Terminate()
... 클래스 닫힐때 자동으로 실행
END SUB


위는 보통 디비는 항상 열고 닫기 때문에  두 함수에 DB를 열고 닫는것을 넣어두면 편하다.
물론,, 디비접속과 아무관련이 없는 클래스의 경우 넣을 필요는 없다.

여튼 여기까지를 한번에 묶으면 ..


CLASS TESTCLASS

    private thisDbCon

    Private Sub Class_Initialize()
       '디비접속
        Set thisDbCon=Server.CreateObject("ADODB.Connection")
        StrDBConnect = "Provider=ORAOLEDB.ORACLE;Password=***;User ID=****;Data Source=****;Persist Security Info=True;"
        thisDbCon.Open StrDBConnect

    END SUB
    Private Sub Class_Terminate()
       '디비 끊기
        thisDbCon.Close
        thisDbCon=Noting
    END SUB
END CLASS


이게 기본 세트라고 할수 있다. 이 이후에는 클래스에 함수들을 하나씩 추가시키면 된다. 그러면 알흠다운 클래스가 만들어지게 되겠다.

그러면 만들어 놓은 클래스를 다른 페이지에서 불러서 사용하는 방법을 보겠다.

먼저 저 클래스를 CLASS.TEST.ASP 라는 이름으로 저장한다.
이름에 CALSS가 들어가는건 특별한 이유가 있는게 아니고 그냥 다른 파일들과 구분하기 위한것이니 이름은 원하는데로 해도 상관없다

<!--#include virtual="CLASS.TEST.ASP"-->


먼저 페이지 상단에 위와같이 클래스를 인클루드 시킨다.

SET CLASSTEST=NEW CLASSTEST


그런 다음 위와 같이 클래스를 생성한다.

클래스의 좋은 점은 함수와 달리 클래스를 생성하면 같은 함수들이 독립적으로 작동된다는것이다.

SET CLASS1=NEW CLASSTEST
SET CLASS2=NEW CLASSTEST
SET CLASS3=NEW CLASSTEST


이렇게 생성해서 사용해도 클래스안의 같은 이름의 변수나 함수들이 독립적으로 행동할수 있다는것이다. 그리고 그냥 인클루드로 함수들을 나열해서 인클루드 할때보다 정리가 쉽고 다른 사이트에 적용하기도 좋다

클래스가 왜 좋은지 사용하기 좋은지에 대한건 구글이나 네이버에 찾아봐주시고~

일단 생성된 클래스의 함수를 실행해 보겠다.

CLASS TEST
    Private Sub Class_Initialize()
    END SUB
   Private Sub Class_Terminate()
    END SUB
  'A+B 함수
    PUBLIC FUNCTION GETSUM(A,B)
       GETSUM=A+B
    END FUNCTION
END CLASS


SET T=NEWTEST
RESPONSE.WRITE T.GETSUM(10,20)

위의 간단한 합계 함수이다. 화면에는 30이 뿌려질테고..

저걸 좀더 바꿔보면..

CLASS TEST
   Private Sub Class_Initialize()
   END SUB
  Private Sub Class_Terminate()
   END SUB
 
    PUBLIC FUNCTION GETSUM(NUMARR)
       DIM I,RESULT
      FOR I=0 TO UBOUND(NUMARR)
        RESULT=RESULT+NUMARR(I)
     NEXT
       GETSUM=RESULT
    END FUNCTION
END CLASS

SET T=NEWTEST

DIM NUMBERS(4)
NUMBERS(0)=10
NUMBERS(1)=20
NUMBERS(2)=100
NUMBERS(3)=200
RESPONSE.WRITE T.GETSUM(NUMBERS)


머 이렇게 배열변수를 바로 넘겨서 사용할수도 있다.


PUBLIC & PRIVATE

PUBLIC 과 PRIVATE 는 다 알다시피 광역이냐 지역이냐 이다.
클래스 안에 쓰이는 변수들이나 함수앞에 PUBLIC 을 붙이면 클래스 밖에서도 사용가능하다. 위의 함수 GETSUM 도 앞에 PUBLIC 이 붙어 있기 때문에 클래스 밖에서 실행이 가능한것이다.

반대로 PRIVATE가 붙으면 클래스 내부에서만 실행된다. 외부에서 불러낼려치면 호출 오류가 뜰것이다.

이건 변수들도 마찬가지다.



추가 팁(?) 딕셔너리 주고 받기
PHP 에서는 배열 자체가 딕셔너리같은거라 주고 받기 편했는데.. ASP에서 이 방법을 찾는데 꽤나 고생했다. 혹시나 같은 고생하는 분이 있을까 해서 적어 본다

이걸 클래스와 연결해서 보면..

CLASS DICTEST

    PUBLIC FUNCTION GETDIC()

        Set D=CreateObject("Scripting.Dictionary")
        D.add "BANANA", "100"
        D.ADD "DDALGI","200"
        D.ADD "SO","300"

        SET GETDIC = D

    END FUNCTION
END CLASS

'사용하기

Set DICTEST=NEW DICTEST
SET DATA=DICTEST.GETDIC

RESPONSE.WRITE DATA("BANANA")


보낼때나 받을때나 SET 을 붙여주는게 포.인.트


대충 이정도로 강좌 아닌 소개를 마칠까 한다. 먼가 중요한 무언가를 빼먹은것같은 기분은 머지??


대충 찾은 클래스 소개 페이지들
http://blog.naver.com/yanione?Redirect=Log&logNo=70016736125
http://www.daniweb.com/tutorials/tutorial19997.html (아쉽게도 영어)





[강좌] php에 익숙한 사람을 위한 asp 강좌 #3 -파일 다루기

이번엔 텍스트 파일 다루는법을 배워 보겠다.

먼저 테스트 파일 읽는 방법이다.

php소스
$fp=file("test.txt");
while($tmp=each($fp)){
    $strLine.=$tmp[1];
}
echo $strLine;


asp소스
Set fs = Server.CreateObject("Scripting.FileSystemObject")
Set fp= fs.OpenTextFile("test.txt",ForReading)
dim strLine
Do While Not file.AtEndOfStream
    strLine=strLine&fp.ReadLine
Loop
response.write strLine
fp.Close

test.txt 파일을 한줄씩 읽어오는 간단한 소스다.
외울필요는 없고 그냥 가끔 쓸일있을때 가져가서 쓰면 될듯하다.

읽었으니 이제 써야지..

php소스
$rooDir=$_SERVER['DOCUMENT_ROO'];
$fp=fopen($rooDir."/test.txt","w");
fwrite($fp,"안녕하세요");
fclose($fp);

asp소스
dim rootDir
rootDir=Server.MapPath("\")
Set fp=fs.CreateTextFile(rootDir&"/test.txt")
fp.WriteLine "안녕하세요"
fp.Close

php랑  asp랑 거의 비슷하다. 그런데 내가 잘못한건지 몰라도 asp에서는 상대경로로 파일을 쓰니까 에러가 났다. 절대경로를 하니까 에러가 나지 않던데.. 위에 server.mapPath가 현재 디렉토리를 가져와준다.

아시다시피 php에서는 파일에 쓸려면 권한이 있어야 한다. 리눅스라면 chmod 777 주면 된다.
asp 는 보통 iis에서 돌아가는데 파일 하나에 권한을 줘봐야 소용이 없는것같다.

그래서 test.txt 파일이 들어있는 디렉토리 자체에다가 권한을 줘야지만 파일에 기록이 가능하다.


권한주는 방법

   1. 서버에서 권한을 줄 디렉토리를 찾는다.
   2. 디렉토리에서 오른쪽키를 누른다음 등록정보를 누른다.
   3. "보안"탭을 누른다.
   4. "인터넷게시트계정" 이라는게 있는데 거기에 권한을 "모든권한"을 준다.
   5. 그러면 그 디렉토리 안의 모든 파일은 아무나 쓰고 읽고가 된다. 왠만하면 텍스트 데이타용 디렉토리를 따로 만들어서 하는게 좋지않을까 싶다.


간단하게 나마 asp에서 파일 다루는 방법은 이쯤에서 끝..

[강좌] php에 익숙한 사람을 위한 asp 강좌 #2

앞 시간에 이어 php에 익숙한 사람을 위한 asp 강좌 두번째 시간이다.
이번시간엔 프로그램이 프로그램답게 하는  if,for,while같은것을 말해보겠다.

php소스
if($test=="aaa"){
    echo "111";
}else if($test=="bbb'){
    echo "222";
}else{
    echo "000";
}

asp소스
dim test
if test = "aaa" then
    response.write "111"
elseif test = "bbb" then
    response.write "222"
else
    response.write "000"
end if

먼저 if 문인데 , php에서는 같다는걸 == 을 쓰는데 asp는 그냥 = 를 쓴다.
{ } 가 없는것도 특징이다. {} 대신 then 이 붙는다.

php소스
for($i=0;$i<=10;$i++){
    echo $i."<br>";
}

asp소스
dim i
for i=0 to 10 step 1
    response.write i&"<br>"
next

for 문이다. 크게 어려움은 없다.

php소스
while($temp<=10){
    echo $temp."<br>";
}

asp소스
dim temp
do while temp<=10
    response.write temp&"<br>"
loop

while문은 두가지가 있는데 이것만 알아도 쓰는데 불편함이 없다.

이쯤하고, 함수에 대해서 알아보자


함수 사용법

php는 함수가 그냥 function 하나지만, asp는 sub와 function 두가지가 있다.
지금도 왜 두개가 필요한지 모르겠지만, 차이점은 sub는 결과값을 넘겨주지 않고 function은 결과값을 넘겨준다는 것이다. 다른 차이점 아시는분 알려주세용 ^^

php소스
function add($v1,$v2){
    return $v1+$v2;
}

asp소스
Function Add(v1,v2)
   Add=v1+v2
End Funtion

마지막에 } 대신에 end function으로 닫는다.
그리고 값을 돌려줄때 retrun 을 쓰지 않고 그 함수 이름을 사용한다.
다시 말해 위의 함수 이름이 Add 라서 넘겨둘때 Add 로 값을 주는것이다.

Sub Print(msg)
    Reponse.Write(msg)
End Sub

sub 는 함수랑 똑같은데 돌려주는 값이 없다.

이번 강좌는 이쯤에서.. 즐거운 하루 되시라~

[강좌] php에 익숙한 사람을 위한 asp 강좌 #1

이 글은 나처럼 php만 하던 프로그래머들을 위한 asp강좌다. asp를 해보면 php에서는 이렇게 했는데 왜 안되? 어떻게 하는거야? 라는 생각을 많이 하게 되는데 그런분을 위한 강좌다.
아마. php를 어느정도 하시면 본 강좌로 asp는 쉽게 마스터 할수 있지 않을까 한다. 기존 프로그램 지식없이 asp로 처음 프로그램을 배우려는 분들에게는 크게 도움이 안될것같다.

기본적인 사항

asp와 php의 가장 큰 차이점은 <? ?> 대신 <% %> 쓴다는것이다.
문장 끝에 ; 이 사라진다. 그리고 변수앞에 $가 없다.

그외에 몇가지 php에서 자주 쓰는 함수들을 asp로 매칭시켜보면 아래와 같다.

화면에 뿌려주기
echo                 -> response.write

프로그램 종료
exit                   -> response.end

글자 바꾸기
str_replace("hello","bye","hello man")          -> replace("hello man","hello","bye")

텍스트 붙이기
"aaa"."bbb"        -> "aaa"&"bbb"

주석.. php에서는 /* */ 로 여러줄 되지만 asp는 안되니까 여러줄은 노가다해야함
//                     -> '

문자열 분리해서 배열로 넣기
$tmp=explode("|","aaa|bbb|")      -> tmp=split("aaa|bbb","|")

날짜 만들기
date("Y/m/d",mktime()) -> Year(now())&"/"&month(now())&"/"&day(now())

이정도 하고 배열로 넘어간다.

배열


프로그램을 오래 하다보면 그냥 변수보다 배열변수에 익숙해지는것같다.
php에서는 배열이라고 부르면 asp에서 말하는 배열 와 딕셔너리를 모두 포함한다.
jsp에서는 해시테이블이라고 부르는것같기도 하더라...
여튼 php에서는 그런걸 몽땅 그냥 배열로 사용했었는데.. asp는 사용법이 다르다

일단 젤 기본 되는 배열은 아래와 같다.


php 소스
$test[0]="1';
$test[1]="2";

asp 소스
Dim test(2)
test(0)="1"
test(1)="2"

reDim test(4)
test(2)="3"
test(3)="4"


보면 알겠지만, 배열에 쓰는 괄호가 []가 아니라 ()다
그리고 php는 따로 선언안해줘도 되지만 asp는 선언을 꼭 해줘야 한다.
선언한 숫자보다 배열이 커지면 어김없이 에러다 주의 주의

중간에 배열크기가 달라질 경우 redim 이라는걸 사용해서 원하는만큼 늘려준 다음 사용해야한다. 귀찮은 작업이다..

php소스
$test['banana']="100";
$test['ddalgi']="200";

foreach($test as $k=>$v){
    echo $k."->".$v;
    echo "<br>";  
}

asp소스
Set test=CreateObject("Scripting.Dictionary");
test.add "banana","100"'이렇게 해도 되고..
test("ddalgi")="200"'이렇게 해도 되고..

For Each key In test
    response.write key&"->"&test(key)
    response.write "<br>"
next

이건 딕셔너리라는것을 사용하는 방법이다.
위에서 말했다시피 php는 그냥 배열로 사용하면 되는데 asp구분을 해준다.

Set test=CreateObject("Scripting.Dictionary");

그리고 사용전에 위와 같이 꼭 선언을 해줘야 한다.

이번강좌는 이쯤까지 하고 .. 다음번엔 for ,while,if ,함수 사용법 등을 알아 보겠다.

남홈페이지 일부분만 내홈페이지에 넣기

남 홈페이지중 일부분만 가져와서 내홈페이지 넣는 방법입니다.
꽁수중에 왕꽁수 입니다. 테스트해본결과 익스,파폭 다 잘 됩니다.

아이프레임과 div 를 이용한 꽁수인데 겉으로 보이기만 일부분만 보이는것이지 실제로는 홈페이지 두개를 불러내는거와 같습니다.

과도하게 많이 사용하면 페이지 로딩속도가 상당히 떨어질수 있습니다.

넣을 테스트 페이지는 http://dream.sajui.net 입니다.

넣고 난 결과(http://insidedream.net)는 아래와 같습니다.

깜쪽같지 않습니까? ㅋㅋ

물론 링크걸렸을때 페이지 안에서만 보인다는 단점이 있긴하지만 , 이런기능이 꼭 필요할분들이 분명이 있을거라 생각됩니다. ^^

소스는 아래와 같습니다. 응용해서 쓰세요

<div id="unse" style="position:relative;z-index:1;height:480px;">
<DIV style="position:absolute;overflow:hidden;width:550px;height:470px;top:8px;left:0px;">
    <DIV style="position:absolute;left:-230px;top:-280px;">
    <iframe src="**** 넣을 홈페이지 주소 **** " WIDTH=1010 HEIGHT=930></iframe>
    </div>
</div>
</div>

원리를 간단히 설명드리자면, (설명색과 같은 색인 소스를 보면 됩니다.)

1.아이프레임으로 홈페이지 통째로 넣고 ,
2. 보여질 부분위치를 조절한다음
3. 보이지 않아도 될부분을 짤라내고
4. 들어간 부분 다음 내용을 위해서 보여지는 부분만큼 공간을 줍니다.

소스에서 수정해야할부분은 **** 넣을 홈페이지 주소 **** 이부분과

각종(?) height,width,top,left 부분입니다.
해보시면 아시겠지만, 넣을때 하나하나 보면서 조절할필요가 있습니다. 
조금 노가다죠?
이걸 자동으로 해주는 함수나 클래스 만들어봤음 싶은데.. 시간이 나면~ ^^;

그럼..

 

리눅스 쓸데없는 파일,로그파일 주기적으로 삭제하기

의외로 리눅스를 쓰다보면 로그파일들이 많이 쌓입니다.

멀쩡히 돌아가던 서버들이 어느날 갑자기 뻣는경우가 생기는데 그럴때 보면 로그파일이나 쓸데없는 파일들이 쌓여서 하드가 풀이 나있을 가능성이 있습니다.

 

그래서 이런 문제를 해결할 한줄의 명령어를 올리니 crontab에 등록해서 쓰면 됩니다.

 

find /home/test -ctime +10 | xargs -n100 rm -f

/home/test 라는 디렉토리 안의 내용중에 10일이상된 파일을 삭제하는 명령어입니다.

 

약간 응용해서 10일이상된 파일중에 이름에 tmp 가 들언 파일만 골라서 삭제하는 명령어입니다.

find /home/test -ctime +10 | grep tmp | xargs -n100 rm -f

ajax 팝업의 완결 shdowbox.js

ajax 팝업들의 종류는 많다.

그중에서 소개할 팝업스크립트는 쉐도우박스다. 그림자상자라는 이름의 이 프로그램은 제목에도 써놨지만 팝업의 완결이다. 모든 종류의 팝업을 다 처리할수 있으며 사용법이 너무 쉽다.

SHADOWBOX(http://mjijackson.com/shadowbox/)

쉐도우박스를 쓰는 이유는 너무나도 간단한 사용법과 역동적인 화면, 그리고 이미지뿐만 아니라 페이지,동영상 ,flash, 기타 등등 필요한 모든 기능을 제공한다는 점이다. 그리고 너무 가볍다. (이 가볍다는것이 나에겐 아주 중요하다. 내가 dojo 를 쓰지 않는 이유가 너무 무겁다는것..)


물론 어떤 브로우저에서도 잘 작동한다.

특히 놀라운건 많은 자바스크립트 프레임웍을 지원한다는것이다.

개인적으로는 protorype.js 를 애용하기 때문에 사용상에 아무 문제가 없고 편하다.


 

실행을 시키면 왼쪽 그림처럼 화면이 까맣게 변하면서 클릭한 이미지가 역동적으로 뜬다.

자세한 사용법은 아래 설명하겠지만, 간단하게 설명하면..

<a href="이미지.jpg" rel="shadowbox" title="자동차이미지">이미지보기</a>

이렇게만 해주면 된다. 링크를 그냥 누르면 알아서 팝업으로 뜨게된다.

a 태그에 단지 rel="shadowbox" 이것만 추가해주면 되는것이다.


shadowbox.js 상세 사용법

사용법은 protorype.js 를 기준으로 설명합니다. 다른 프레임웍은 http://mjijackson.com/shadowbox/ 에서 봐주세요..


쉐도우박스를 사용하기 위해선 필수적으로 있어야할 스크립트들이 있다.

<script src="scriptaculous/lib/prototype.js"></script>
<script type="text/javascript" src="scriptaculous/src/effects.js"></script>
<script type="text/javascript" src="scriptaculous/src/builder.js"></script>
<script type="text/javascript" src="shadowbox-1.0b3/src/js/adapter/shadowbox-prototype.js"></script>
<script type="text/javascript" src="shadowbox-1.0b3/src/js/shadowbox.js"></script>
<link href="shadowbox-1.0b3/src/css/shadowbox.css" rel="stylesheet" type="text/css">

먼가 많아보이는데 생각보다 가벼운놈들이기 때문에 크게 걱정은 안해도 될듯하다.

  1. shadowbox 다운로드
  2. scriptaculous 다운로드
    최신버전의 scriptaculous 에서 오류가 난다면 하위버전으로 해보세요..

위의 코드의 경로를 정확히 설정해서 페이지 상단에 넣어주고,

<script>
Shadowbox.init();
</script>

이 코드를 페이지 젤 하단에 넣어주면 사전준비작업은 끝이다.

사전작업이 끝났으면 팝업을 열었으면 하는곳에 단지 링크만 걸면된다.

링크건파일이 이미지면 이미지가 뜰것이고 , 플래쉬면 플래쉬가 뜨고 그냥 웹페이지면 웹페이지가 뜬다. 물론 다른 사이트 링크도 가능하다.


  1. test.jpg 이미지 띄우기
    <a href="test.jpg" rel="shadowbox">이미지테스트</a>
  2. 가로크기 500px,창제목은 "팝업테스트" , 오픈할파일은 test.html
    <a href="test.html" rel="shadowbox;width=500" title="팝업테스트">팝업테스트</a>
    height를 설정하지 않으면 100%가 적용된다.
  3. http://toyobi.net/web 띄우기
    <a href=http://toyobi.net/web" rel="shadowbox" title="php를 들고 web2.0속을 헤매는 문디뚱">php를 들고 web2.0속을 헤매는 문디뚱</a> 
     

만약 익스 7에서 오작동(팝업이 화면중간에 안뜨고 아래로 밀려서 뜬다던지..)을 한다면..

페이지 상단에 아래 코드를 넣어봅니다.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"  "http://www.w3.org/TR/html4/strict.dtd">


그외 ajax 팝업 스크립트들 ...

  • MODALBOX (http://www.wildbit.com/labs/modalbox/)
    얼마전까지 사용하던 팝업스크립트인데, 화면중간이 아닌 상단에서 내려오는게 맘에 안들어서 사용하지 않고 있다. 페이지내에서 다른 페이지를 불러낼때 유용하다.  
  • POPBOX(http://www.c6software.com/Products/PopBox/Default.aspx)
    이미지를 바로 확대해서 볼수 있는 스크립트
  • LIGHTBOX2(http://www.huddletogether.com/projects/lightbox2/#example)
    이미지를 바로 확대해서 보거나 여러이미지를 슬라이드처럼 볼수 있게 해주는 너무나도 유명한 팝업 스크립트 . 이미지만 처리가 가능하기 때문에 페이지내에서 다른페이지를 불러내고 싶을때는 별로의 스크립트가 필요해서 불편하다.

xml+xsl 쓸때 firefox에서는 안그런데, ie에서 상단에 빈칸생기는거 해결법

파이어폭스에서는 안그런데, 익스에서 보면 상단에 빈칸이 생기는 경우가 있다. 아무리 봐도 문제가 없는데 빈칸이 생기는데 아주 환장한다. 디자이너들 이런 빈칸으로 인해 페이지가 흐트러지는거 정말 싫어한다. 

그래 오늘 몇시간동안 답을 찾는다고 고생좀 했다.  혹시나 이런 문제로 고통받고 괴로워하는 이가 있을것같아 , 해결법을 바로 올려본다.


증상

xsl 에서 "안녕하세요" 라고 하면 잘나오는데.

<div>안녕하세요</div> 하거나

<table><tr><td>안녕하세요</td></tr></table> 이라고 하면

어김없이 페이지 상단에 빈칸이 생겨서 페이지가 아래로 밀린다.


원인

정확인 원인은 알수 없으나, 구글에서 안되는 영어로 몇십페이지 굴러다녀본 결과 익스버그가 원인일것으로 추측됨


해결법

아무리 찾아봐도 증상에대해 절규만 있고, 해결책이 보이지 않고 익스에서는 doctype에 민감하니 정확히 하라는 말에 따라 이런 저런 doctype을 해봤지만 무용했다.

독자적인 연구 결과(?)  , 근본적인 해결책은 없고

<div style="position:absolute;"></div> 로 페이지를 둘러싸면 해결됨을 알아냈다.

<body>

<div style="position:absolute;">

<table><tr><td>안녕하세요</td></tr></table>

</div>

</body>


나랏말쌈이 익스와 달라 .... 
T^T 안녕 나의 소중한 몇시간아..

2008년 3월 17일 월요일

파이어준씨의 prototype, scriptAculous 강좌 링크

파이어준 씨의 블러그에 있는 강좌들입니다.

tag 목록에서 prototype 과 scriptAculous 를 가져왔습니다.
중복되는것도 있습니다.

http://firejune.com/index.php?stag=Prototype
http://firejune.com/index.php?stag=ScriptAculoUs


파이어준 만쉐이~ |0|

ajax 보드중에 가장 맘에 드는것

후지자닷컴에 있는 샘플 이다.

ajax 보드가 여럿 나왔지만, 모두 기존의 페이지로딩방식을 그냥 ajax 형식으로 바꾼것뿐 구지 ajajx를 써야할 이유를 못느끼게 했던 보드들이 대부분인데..

이 게시판은 그 귀찬고 짜증나던 page 를 아예 없애는 획기적인 아이디어를 내놓았다.

다른건 모르겠고, 스크롤에 따라 자동으로 페이지를 옮겨가며 내용을 뿌려주는 아이디어는 다른곳에도 충분히 쓰일 좋은 아이디어라고 생각한다.

후리자 만세~ |-_-|


rss 지원하지 않는 일반홈페이지의 내용을 rss로 만들기

일반 홈페이지를 rss 로 만드는 프로그램인 FEED43 이라는 사이트를 소개 합니다.

몇달 전에 수첩에 "일본 사이트 내용을 rss 로 뽑아낼수 있었으면 좋겠다" 라고 썼었는데, 내 입맛에 딱맞는 서비스가 이미 존재 하고 있었다니... >.< b  놀라워 놀라워

간단히 사용설명을 합니다. 제가 운영중인 "꿈속으로" 의 게시판 내용을 rss로 긁어보겠습니다.

1. Create own your feed 에 들어갑니다.
들어가면 알겠지만, 단계별로 내용을 넣기만하면 됩니다.

2.1단계에서는 사이트주소를 넣습니다. 게시판이 있는 주소를 넣으면 되겠죠?
http://insidedream.net/board/board.php?multi=dream

옆에 Encoding 에는 아무것도 안넣어도 되지만, 한글사이트는 대부분 euc-kr 이니 넣어 주세요

3. 2단계가 가장중요하고 애매하고 어려워 보이는 부분입니다.
사이트에서 긁어올 내용을 패턴으로 구분해서 생선 뼈를 발라 내듯이 내용을 발라 내는거죠..

{*} 이거랑 {%} 이거만 알면 됩니다.

{%} 는 실제로 긁어올 내용입니다.
{*} 는 쓸데없는 부분이라고나 할까? 그런 부분을 걸러낼때 사용합니다.


먼저 Global Search Pattern: 에는 {%} 를 넣습니다.
그리고 Item (repeatable) Search Pattern*: 에 뼈를 발라내 넣는거죠

http://insidedream.net/board/board.php?multi=dream 의 소스를 보면 , 게시판 부분에 반복되는 부분이 있습니다.

제목, 제목 링크 , 작성자, 히트수 .. 이런것들이죠
아래 순서로 변형해 주면 되겠습니다.

게시판 한줄의 원본 :
<tr onMouseOver=this.style.backgroundColor='#F5F5F5' onMouseOut=this.style.backgroundColor='' >
         <td width="30"><div align="center"><font size="2">
             5379              </font></div></td>
         <td><font size="2">
         <a href=board.php?bid=7116&multi=dream&page=&page2=&SHsubject=&SHcomment=&SHname=&SHword=&SHid=>반토막 게에게 물리는 꿈은</a><font size=1>[1]</font></font></td>

         <td width="90"><font size="2">
           <a href=board.php?multi=dream&page=0&page2=&SHsubject=&SHcomment=&SHname=&SHword=&SHid=holrim>천리향</a></font></td>
         <td width="30"><div align="center"><font size="1">
             06/27              </font></div></td>
         <td width="30"><div align="center"><font size="2">
             24              </font></div></td>
       </tr>


위 소스가 한줄이죠. 여기서 패턴을 찾아내는겁니다.

뼈발라내기 1단계 :
내용부분에 {%} 를 넣습니다.

<tr onMouseOver=this.style.backgroundColor='#F5F5F5' onMouseOut=this.style.backgroundColor='' >
         <td width="30"><div align="center"><font size="2">
             {%}            </font></div></td>
         <td><font size="2">
         <ahref={%}>{%}</a><font size=1>{%}</font></font></td>

         <td width="90"><font size="2">
           <ahref={%}>{%}</a></font></td>
         <td width="30"><div align="center"><font size="1">
           {%}             </font></div></td>
         <td width="30"><div align="center"><font size="2">
           {%}          </font></div></td>
       </tr>

뼈발라내기 2단계 :
쓸데없는 부분을 {*}로 바꿉니다.
주의 할점은 {%} 앞뒤로 소스내 다른곳에서는 찾아볼수 없는 특이한점은 남겨둬야 합니다.
그래야 , 정확하게 짤라내집니다.

<tr onMouseOver=this.style.backgroundColor='#F5F5F5' onMouseOut=this.style.backgroundColor='' >
       {*}<font size="2">
             {%}             </font>{*}
         <ahref={%}>{%}</a>{*}<ahref={%}>{%}</a>{*}<font size="1">
            {%}             </font>{*}<font size="2">
            {%}           </font>{*}
       </tr>



최종본 :
사실 rss 에서는 제목,링크,내용 이렇게 3개만 있어도 된다고 생각합니다.
그래서 쓸데없는건 또 줄입니다. 히트수나 날짜 머 이런건 필요없잖아요

<tr onMouseOver=this.style.backgroundColor='#F5F5F5' onMouseOut=this.style.backgroundColor='' >
{*}<font size="2">{%}</font>{*}
<a href="{%}">{%}</a>{*}
<a href="{%}">{%}</a>{*}</tr>


됬습니다. 이걸 Item (repeatable) Search Pattern*: 에 넣습니다.

4. 이제 마지막 3단계로 넘어 옵니다.
{%} 로 표시한부분은 순서대로 {%1} {%2} {%3} 이런식으로 값이 넘어오게 됩니다.

Item Title Template*: [?]

Item Link Template*: [?]

Item Content Template*: [?]


칸에 맞게 내용을 넣어줍니다.
여기서는 content 부분이 없기 때문에 생략합니다.

preview 한번 해보시고 정확하게 되면 완료 합니다.
생성 끝입니다. ^^


5. 4단계에서는 이 rss 피드의 이름을 바꾼다던지, 개인전용으로 만든다던지. .그런 기능을 추가할수 있습니다. ㅋㅋ

나온 주소를 insidedream 이라고 바꿔서
최종 주소는 http://feed43.com/insidedream.xml 이 되었습니다.

이걸 연모에서 "블러그 추가" 살짝 해주시면~ 되겠네요 ^^

흐흐흐.. 연모에 추가하고 싶었는데 못했던 카페와 사이트들 긁으로 갑니다요~



ps ) 일반 사이트 긁어 온거 모으고 있습니다. ^^ 댓글 남겨주세요~~~

ps ) 혹시 feed43에서 43이 무슨 의미인지 아시는분은 답글 부탁드림다~ ^^

참고 블러그 :
XML 비공개 이글루스 RSS 피드 만들기
피드 뽑아내는 설명 (영문)
RSS 뽑아내기 다른 설명 (영문)
XML 비공개 네이버 RSS 피드 만들기

qooXdoo.. 새로 발견한 javascript 프레임웍

Dojo의 강력한 기능이 부러웠지만, 속도때문에 과감히 멀리 떠나보내야 했던 내맘의 아쉬움이 가시기도 전에..
엄청난 놈을 만나버렸다.

qooXdoo 라는 이상한 이름의 넘인데.. 속도가 정말 dojo와는 비교가 안될정도로 빠르다.
특히 , 엑셀같은 그리드 리스트를 뿌려줌에 있어 1000줄이 되어서 칸을 늘리거나 줄이는데 타의 추종을 불허한다.(조금 오바..) 기능은 dojo 정도는 안될지라도 그에 준하는 정말 쓸모있는 기능들을 많이 가지고 있다.

Dojo에 잠시 묵념.. 쿠X두에 환호를~ >,<b

머.. 여전히 복잡한 기능에선 dojo 나 qooxdoo 나 처음 로딩할때 시간은 감당 불감당이긴 하지만.. 쩝
쿠x두 예제 페이지 에 가면 상당한 예제들이 있다. 쭉 훌텨 보시길~

소스는 qooxdoo 공식홈페이지에 있다.



-------------
몇번 사용후..
-------------

역시 dojo 만큼 부담된다. 초기에 불러내는 기본 스크립트인 qooxdoo.js 가 700kb 에 육박한다.
완전 올 아작스로 해서 페이지 변화가 전혀 없지 않는한..
매번 페이지 바뀔때마다 불러 내기엔 너무나도 부담스럽다.

안녕.. 쿠두..

xajax 사용법 정리

xajax 사용법 정리

사작스 강좌를 해놓은 다른 블러그 글입니다.
한페이지에 깔끔하게 설명해놨네요.

[강좌] xajax 강좌 #4

요즘 프로그램 하면서 xajax를 여기 저기 써보고 있다.

약간씩 생각지도 못했던 불편함들이 있지만 , php에서 쓰기에는 최상인것같다.
여기에  prototype 을 약간 버무려주면 더 좋다.

3강에서 끝낼려고 했는데 , 가만히 보니 가장중요한게 빠졌다

바로 form 에 있는 데이타를 넘겨받아서 처리하는 부분!!! 이 얼마나 중요한 부분인가!! -_-;;
의외로 쉽다.

그냥 싸작스 함수를 불러올때 xajax.getFormValues 해주면 된다
그리고 상단에 넣었던 function 에서 배열로 불러오면 된다.

예를 들어 아래 버튼을 누르면, 버튼이 포함된 form 안의 내용들이 배열이 되어서 test 함수로 넘어간다
<form action="" method="post">
<input type=text name=fd1>
<input type=text name=fd2>
<input type=button  onClick="xajax_test(xajax.getFormValues(this.form));" value="확인">
</form>
test 함수에서는 그냥 배열을 요리하면된다.
function test($arr){
.......  
//$arr['fd1'];
//$arr['fs2'];
....
}



xajax 만세~ |0|