'분류 전체보기'에 해당되는 글 36건
- 2009.01.06 info21c 12개월 결제시 1달 더 연장 받기.
- 2008.12.07 미라지폰 M480 관련 사이트
- 2008.10.06 Textarea박스에서 탭키 Tab 효과 주기
- 2008.07.31 strtotime 버그 인가? 이전달 구하기
- 2008.07.17 파일 다운로드 파일
- 2008.07.01 [입찰전문사이트 인포21] - 편리한 서류함 관리기능~!
- 2008.06.30 dispatchEvent, addEventListener 던지고 받기~
- 2008.06.27 Local DB - SQLite 예제
- 2008.06.27 페이징
- 2008.06.26 화면전환
- 2008.02.04 안시 144 산란 과정
- 2007.12.05 산메라 체착
- 2007.12.05 산메라 부화 후 스폰지로 이동
- 2007.11.30 디스커스 산메라 쌍 제착 3
- 2007.05.28 입찰정보 사이트 = 인포21c info21c
- 2007.02.22 Ajax로 달력 출력
웹서핑중 괜찬은 사이트 몇개 찾아 링크 겁니다.
빨리 써보고 싶네요 이놈의 병 다시 도진듯.. ㅠㅠ
http://thebetterday.tistory.com/437
http://blogit.blogkorea.net/11269275/http://playppc.co.kr/24
http://blogit.blogkorea.net/9879957/http://donghaerang.com/278
코리아인터넷닷컴에 예제를 응용하여 만들었습니다. -_-V
<HTML>
<HEAD>
<script src="http://prototypejs.org/javascripts/prototype.js" type="text/javascript"></script>
<SCRIPT>
function saveCurrentPos (objTextArea) {
if (objTextArea.createTextRange)
objTextArea.currentPos = document.selection.createRange().duplicate();
}
function tab_event(objTextArea){
var text=' ';
if(event.keyCode==9 && objTextArea.createTextRange){
var currentPos = objTextArea.currentPos;
currentPos.text = currentPos.text.charAt(currentPos.text.length - 1) == ' ' ? text + ' ' : text;
// Event.stop(event); //Prototype
/* tab Event 없애기 */
if(!window.Event){
var Event = new Object();
}
if(event.preventDefault){
event.preventDefault();
event.stopPropagation();
}else{
event.returnValue = false;
event.cancelBubble = true;
}
}
}
</SCRIPT>
</HEAD>
<BODY>
<FORM NAME="myForm">
<TEXTAREA NAME="myTextArea" ROWS="5" COLS="80" WRAP="soft"
ONSELECT="saveCurrentPos(this)"
ONCLICK="saveCurrentPos(this)"
ONKEYUP="saveCurrentPos(this)"
onkeydown="tab_event(this.form.myTextArea);"
>
이벤트 테스트~!!!!
</TEXTAREA>
</FORM>
</BODY>
</HTML>
원하는 이전달의 값은 2008-06-01이라고 한다면
아래와 같은경우
date('Y-m-01',strtotime('-1 month'));
는 2008-06-01이 나올거 같지만 2008-07-01이 나온다.. -_-;;
그래서 다시 한게 아래다.. 아래로 하면 착하게 원하는 값이 나온다 ^^
$time = time();
date("Y-m-d",mktime(0,0,0,date('m',$time)-1,1,date('Y',$time)));
header("Cache-Control: public");
header("Content-Description: File Transfer");
header('Content-disposition: attachment; filename='.basename($filename));
header("Content-Type: application/pdf");
header("Content-Transfer-Encoding: binary");
header('Content-Length: '. filesize($filename));
readfile($filename);
가장 빠르고 정확한 건설 입찰정보
http://info21c.net/
업계 점유율 25%를 차지하고 있는 info21c 사이트가 새로운 기능을 선보였네요.
기존의 개인서류함을 리뉴얼 하면서 새롭게 <나의폴더> 기능 추가했는데요.
진작에 필요한 기능이었는데 info21c가 젤 먼저 폴더개념을 도입해서 현명하게 풀어낸것 같습니다.
사실 하루에도 몇백건씩 공고가 쏟아지는데
매번 필요한 공고들을 찾아서 개인서류함에 저장을 한다 해도 한계가 있었죠.
원하는 폴더를 만들어서 필요한 공고를 얼마든지 나눠서 관리할 수 있다면 상당히 효율적인것 같습니다.
사이트에 있는 동영상 이용안내 링크 걸어둡니다.
궁금하신 분은 클릭해보삼!
dispatchEvent(new ListEvent(ListEvent.FILTER,sendData, true, false));
이런식으로 던져준다.. 앞에 상수, 뒤에 boolean 2개는 필수닷..
클래스 선언~(com.events.ListEvent)
package com.events
{
import flash.events.Event;
public class ListEvent extends Event
{
public static const FILTER:String = "filter";
public function ListEvent(type:String, data:Array=null, bubbles:Boolean=false, cancelable:Boolean=false){
super(type, bubbles, cancelable);
item = data;
}
public var item:Array;
}
}
받는 곳~
import com.events.ListEvent;
private function load():void{
connectDB();
Application.application.systemManager.addEventListener(com.events.ListEvent.FILTER, _filter);
}
private function _filter(e:com.events.ListEvent):void{
requestData = e.item;
selectData();
}
db파일위치때문에 한참 해멨다..
C:\Documents and Settings\BoKi\Application Data\sqlLife\Local Store/
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" applicationComplete="init()"
backgroundColor="0x003030" focusRect="false" layout="vertical">
<mx:Script>
<![CDATA[
import mx.effects.Fade;
import mx.controls.List;
import mx.controls.TextInput;
import mx.events.DataGridEvent;
import mx.collections.ArrayCollection;
import mx.utils.ArrayUtil;
import mx.controls.Alert;
import flash.data.SQLConnection;
import flash.data.SQLResult;
import flash.data.SQLStatement;
import flash.events.SQLErrorEvent;
import flash.events.SQLEvent;
import mx.events.ListEvent;
import flash.filesystem.File;
[Bindable]
private var resultData:Array;
private var conn:SQLConnection = new SQLConnection();
private var selectStmt:SQLStatement = new SQLStatement();
private function connectDB():void{
// 로컬 데이터베이스 존재 확인 그리고 열려져 있는지 또는 새 테이블 만들기
var dbFile:File = File.applicationStorageDirectory.resolvePath("aa.db");
trace(dbFile.nativePath);
if(dbFile.exists) {
conn.addEventListener(SQLEvent.OPEN, openHandler);
conn.open(dbFile);
}else {
conn.addEventListener(SQLEvent.OPEN, newDatabaseHandler);
conn.open(dbFile);
}
}
private function openHandler(event:SQLEvent):void{
// selectData();
trace("The database was opened");
}
// 데이터 가져오기
private function selectData():void{
selectStmt.sqlConnection = conn;
var sql:String = "SELECT * FROM employees";
selectStmt.text = sql;
selectStmt.addEventListener(SQLEvent.RESULT, selectHandler);
selectStmt.addEventListener(SQLErrorEvent.ERROR, errorHandler);
selectStmt.execute();
}
private function selectHandler(event:SQLEvent):void{
resultData = selectStmt.getResult().data;
}
// 새 테이블 생성하기
private function newDatabaseHandler(event:SQLEvent):void{
createTable();
trace("Table created");
}
private function createTable():void{
var createStmt:SQLStatement = new SQLStatement();
createStmt.sqlConnection = conn;
var sql:String =
"CREATE TABLE IF NOT EXISTS employees (" +
"empId INTEGER PRIMARY KEY AUTOINCREMENT, " +
"firstName TEXT, " +
"lastName TEXT, " +
"salary NUMERIC CHECK (salary > 0)" +
")";
createStmt.text = sql;
createStmt.addEventListener(SQLEvent.RESULT, createTableResult);
createStmt.addEventListener(SQLErrorEvent.ERROR, errorHandler);
createStmt.execute();
}
private function createTableResult(event:SQLEvent):void{
trace("Employees table created ");
}
//데이터 삽입
private function insertData():void{
var insertStmt:SQLStatement = new SQLStatement();
insertStmt.sqlConnection = conn;
var sql:String = "INSERT INTO employees (firstName, lastName, salary) VALUES ('Eric', 'Moon', 80000)";
insertStmt.text = sql;
insertStmt.addEventListener(SQLEvent.RESULT, insertHandler);
insertStmt.addEventListener(SQLErrorEvent.ERROR, errorHandler);
insertStmt.execute();
}
private function insertHandler(event:SQLEvent):void{
trace("INSERT statement succeeded");
selectData();
}
// 데이터 삭제
private function deleteData():void{
if (resultAC.length >0)
var empid:int = dg.selectedItem.empId;
var deleteStmt:SQLStatement = new SQLStatement();
deleteStmt.sqlConnection = conn;
var sql:String = "DELETE FROM employees WHERE empID="+empid;
deleteStmt.text = sql;
deleteStmt.addEventListener(SQLEvent.RESULT, deleteHandler);
deleteStmt.addEventListener(SQLErrorEvent.ERROR, errorHandler);
deleteStmt.execute();
resultAC.removeItemAt( dg.selectedIndex);
}
private function deleteHandler(event:SQLEvent):void{
trace("Delete statement succeeded");
selectData();
}
// 에러 처리
private function errorHandler(event:SQLErrorEvent):void{
var errMessage:String;
errMessage = "Error code: " + event.error.message + "\r";
errMessage += "Details : " + event.error.message ;
Alert.show(errMessage);
}
private function init():void{
//stage.displayState = StageDisplayState.FULL_SCREEN;
connectDB();
}
// 데이터 업데이트
private function updateData():void{
var updateStmt:SQLStatement = new SQLStatement();
updateStmt.sqlConnection = conn;
var sql:String = "UPDATE employees " +
"SET firstName = '" + dg.selectedItem.firstName + "', " +
"lastName = '" + dg.selectedItem.lastName + "', " +
"salary = '" + dg.selectedItem.salary + "' " +
"WHERE empID="+ dg.selectedItem.empId;
updateStmt.text = sql;
updateStmt.addEventListener(SQLEvent.RESULT, updateHandler);
updateStmt.addEventListener(SQLErrorEvent.ERROR, errorHandler);
updateStmt.execute();
}
private function updateHandler(event:SQLEvent):void{
trace("Update statement succeeded");
selectData();
}
]]>
</mx:Script>
<mx:ArrayCollection id="resultAC" source ="{ArrayUtil.toArray(resultData)}" />
<mx:VBox height="100%">
<mx:DataGrid id="dg" dataProvider="{resultAC}" editable="true" height="100%" width="100%">
<mx:columns>
<mx:DataGridColumn headerText="Emp ID" dataField="empId"/>
<mx:DataGridColumn headerText="Last Name" dataField="lastName"/>
<mx:DataGridColumn headerText="First Name" dataField="firstName"/>
<mx:DataGridColumn headerText="Salary" dataField="salary"/>
</mx:columns>
</mx:DataGrid>
<mx:HBox width="100%">
<mx:Button label="Create Table" click="createTable();"/>
<mx:Button label="Select" click="selectData();"/>
<mx:Button label="Insert" click="insertData()"/>
<mx:Button label="Update" click="updateData();"/>
<mx:Button label="Delete" click="deleteData();"/>
</mx:HBox>
</mx:VBox>
</mx:WindowedApplication>
출처 : http://cafe.naver.com/flexcomponent.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=5203
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="load()">
<mx:Style>
</mx:Style>
<mx:Script>
<![CDATA[
import mx.events.ItemClickEvent;
import mx.collections.ArrayCollection;
include "spXML_List.as";
import mx.controls.Alert;
import mx.collections.ArrayCollection;
import mx.controls.Button;
[Bindable]
public var nav:ArrayCollection = new ArrayCollection();
private function ClickPrev():void
{
var page:int = spXML_List.page;
if(page <= 1){
Alert.show('처음 페이지 입니다.');
}else{
page-=1;
spXML_List.page = page;
}
}
private function ClickNext():void
{
var page:int = spXML_List.page;
if(page >= spXML_List.total_page){
Alert.show("마지막 페이지 입니다.");
}else{
page+=1;
spXML_List.page = page;
}
}
private function load():void{
for(var i:Number = 2; i < 50; i++){
spXML_List.newElement = <item>
<num>{i}</num>
<constnm>민방위 경보시스템 교체,보강조달구매 설치 </constnm>
<itemcode>통신</itemcode>
<basic>32,000,000</basic>
<yega>31,970,640</yega>
<success>31,493,000</success>
<spb>98.4156</spb>
<ypb>-0.0917</ypb>
<sypb>12.1609</sypb>
<constdt>08.06.20</constdt>
</item>;
}
pageing(spXML_List.page);
}
private function pageing(page:Number):void{
var p_min:Number = spXML_List.p_min;
var p_max:Number = spXML_List.p_max;
var total_page:Number = spXML_List.total_page;
nav.removeAll();
if(p_min > 1){
nav.addItem({label:"이전", data:p_min-1, id:"pre"});
}
//Alert.show(page.toString());
for(var j:Number = p_min; j <= p_max; j++){
nav.addItem({label:j, data:j});
}
if(p_max < total_page){
nav.addItem({label:"다음", data:p_max+1});
}
spXML_List.page = page;
}
private function navigatePage(event:ItemClickEvent):void{
var lb:String = event.item.label;
if(lb.indexOf("다음") > -1){
spXML_List.p_min = event.item.data;
spXML_List.p_max = event.item.data + 4;
lb = event.item.data;
}else if(event.item.id == 'pre'){
spXML_List.p_min = event.item.data - 4;
spXML_List.p_max = event.item.data;
lb = event.item.data;
}
pageing(Number(lb));
}
private function N_page(min:int, max:int):void{
trace(min);
}
]]>
</mx:Script>
<mx:Canvas id='listBox' width="80%" borderStyle="solid" backgroundColor="blue" showEffect="Fade" hideEffect="Fade" x="35" y="29">
<mx:Panel layout="absolute" title="List" width="100%" x="0">
<mx:DataGrid width="100%" height="285"
rowCount="12"
id="ListGrid"
dataProvider="{spXML_List.item}"
horizontalCenter="0"
fontSize="12"
fontFamily="Arial"
>
<mx:columns>
<mx:DataGridColumn headerText="번호" dataField="num" width="35" />
<mx:DataGridColumn headerText="공고명" dataField="constnm" width="300"/>
<mx:DataGridColumn headerText="업종" dataField="itemcode"/>
<mx:DataGridColumn headerText="기초금액" dataField="basic"/>
<mx:DataGridColumn headerText="예정가격" dataField="yega"/>
<mx:DataGridColumn headerText="1순위 투찰금액" dataField="success"/>
<mx:DataGridColumn headerText="1순위 기초대비" dataField="spb"/>
<mx:DataGridColumn headerText="예가/기초" dataField="ypb"/>
<mx:DataGridColumn headerText="1순위사정율" dataField="sypb"/>
<mx:DataGridColumn headerText="입찰일" dataField="constdt"/>
</mx:columns>
</mx:DataGrid>
</mx:Panel>
</mx:Canvas>
<mx:Text text="Total: {spXML_List.total_page} Page:{spXML_List.page} / {spXML_List.total_page}" fontSize="10" y="35" x="73"/>
<mx:Button label="Previous" click="ClickPrev()" x="780" y="32"/><mx:Button label="Next" click="ClickNext()" x="865" y="32"/>
<mx:ToggleButtonBar id="PageNav" x="73" y="394" dataProvider="{nav}" itemClick="navigatePage(event)" horizontalGap="5"/>
</mx:Application>
-----------------------------------------------------------------------------------------------
as파일
// ActionScript file
[Bindable]
public var spXML_List:XML =
<rr>
<total_num>49</total_num>
<total_page>10</total_page>
<page>1</page>
<p_min>1</p_min>
<p_max>5</p_max>
<item>
<num>1</num>
<constnm>민방위 경보시스템 교체,보강조달구매 설치 </constnm>
<itemcode>통신</itemcode>
<basic>32,000,000</basic>
<yega>31,970,640</yega>
<success>31,493,000</success>
<spb>98.4156</spb>
<ypb>-0.0917</ypb>
<sypb>12.1609</sypb>
<constdt>08.06.20</constdt>
</item>
</rr>;
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
>
<mx:states>
<mx:State name="w" >
<mx:SetProperty target="{left}" name="width" value="400"/>
</mx:State>
</mx:states>
<mx:transitions>
<mx:Transition fromState="*" toState="*">
<mx:Resize duration="100" target="{left}"/>
</mx:Transition>
</mx:transitions>
<mx:Canvas width="100%" height="100%"
backgroundColor="#eeeeee"
>
<mx:VBox width="40" height="100%" id="left" backgroundColor="#ffffff">
</mx:VBox>
<mx:Button x="{left.x+left.width}"
click="{
currentState = currentState==null ? 'w' : null;
trace(currentState);
}" />
</mx:Canvas>
</mx:Application>
중간중간 몇마리씩 죽어나가다 어느정도 되니 하루에 한마리씩 죽어나갑니다...
개체가 약한건지 수질이 아직 안좋은지는 잘 모르겠는데 이젠 밥도 잘먹고 잘 적응하고있는듯..
※ 이미지 퍼가실땐 출처를 남겨주세요.. : )
이미지를 클릭하셔서 보세요.. 확대됩니다.. ^^
산메라 쌍입니다.
부화 후 스폰지로 모두 옮겨놨네요.. 암놈이 보살필려고 하는데
숫놈이 자기혼자 보살필려고 계속 막는데 안스럽네요... ㅠ
'07.10.1 AM 12:50 산메라 입수 (1:30분 물맞댐)
'07.10.23 1차 알붙임 몇일 후 다 따먹음
'07.10.29 2차 알붙임
'07.10.31 알 수정되어서 검해짐
'07.11.01 부화 후 이동시킴 30수정도
'07.11.04 새벽에 체착
'07.11.05 체착 후 적응하지 못한 치어 죽음 대략 15~20수 체착중...
아직 암놈 사이즈가 작고 적응기간중이라서 알을 얼마 못붙여 체착까지 간 치어수도
적어 요번 산란은 포기... ㅠ
다음을 기약하며...
티스토리에서 달력 이벤트를 하여 아래 사진을 공모전에 응모 합니다. ^^
가장 빠르고 정확한 건설 입찰정보 http://info21c.net/
업계 점유율 25%를 차지하고 있는 info21c 사이트가 새로운 기능을 선보였네요.
기존의 개인서류함을 리뉴얼 하면서 새롭게 <나의폴더> 기능 추가했는데요.
진작에 필요한 기능이었는데 info21c가 젤 먼저 폴더개념을 도입해서 현명하게 풀어낸것 같습니다.
사실 하루에도 몇백건씩 공고가 쏟아지는데
매번 필요한 공고들을 찾아서 개인서류함에 저장을 한다 해도 한계가 있었죠.
원하는 폴더를 만들어서 필요한 공고를 얼마든지 나눠서 관리할 수 있다면 상당히 효율적인것 같습니다.
사이트에 있는 동영상 이용안내 링크 걸어둡니다.
궁금하신 분은 클릭해보삼!
가장 빠르고 정확한 건설 입찰정보
http://info21c.net/
입찰정보 사이트중 업계에서 인지도가 1위인 info21c 사이트가 요번에 리뉴얼이 되네요...
위의 사항이 업데이트 된다고 하는데 기대 됩니다~! ^^
총 4개의 파일로 되어 있습니다.
출력파일, css파일, js파일, php실행파일
달력출력파일에 css,js,php파일을 호출하여 사용하면 됩니다. : )
달력 출력 파일
<form name='x_calendar'>
<input type='hidden' name='xyear' value='<?=date(Y);?>'>
<input type='hidden' name='xmonth' value='<?=date(m);?>'>
</form>
<?
echo "<table border='0' cellpadding='5' cellspacing='0' id='t_calendar'>";
echo "<caption><a href='#' onclick=\"change_calendar('prev',document.x_calendar.xyear.value, document.x_calendar.xmonth.value)\"><</a> <span id='l_year'></span> 년 / <span id='l_month'></span> 월 <a href='#' onclick=\"change_calendar('next',document.x_calendar.xyear.value, document.x_calendar.xmonth.value)\">></a></caption>";
echo "<tr><td>Sunday</td><td>Monday</td><td>Tuesday</td><td>Wednesday</td><td>Thursday</td><td>Friday</td><td>Saturday</td></tr>";
echo "</table>";
?>
<script>
function change_calendar(division, xyear, xmonth)
{
AJAX.create();
AJAX.openXML('POST','statistics_exec.php', true);
AJAX.setStatusSuccessHandler(calendar_loadData);
AJAX.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
AJAX.send("division="+division+"&year="+xyear+"&month="+xmonth);
}
AJAX.create();
AJAX.openXML('POST','statistics_exec.php', true);
AJAX.setStatusSuccessHandler(calendar_loadData);
AJAX.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
AJAX.send(null);
</script>
css 파일
#t_calendar {
border-collapse:collapse;
font-size:9pt;
margin-left: 10px;
}
#t_calendar th { border:1px solid #E6E6E6; background:#D2D2D2; width: 96px;}
#t_calendar td { border:1px solid #E6E6E6; width: 96px;}
JS파일
var list = new Array();
function calendar_loadData(doc){
list['start_week'] = doc.getElementsByTagName("start_week");
list['last_day'] = doc.getElementsByTagName("last_day");
list['year'] = doc.getElementsByTagName("year");
list['month'] = doc.getElementsByTagName("month");
var table = document.getElementById('t_calendar');
var start_week = list['start_week'][0].firstChild.nodeValue;
var last_day = list['last_day'][0].firstChild.nodeValue;
var year = list['year'][0].firstChild.nodeValue;
var month = list['month'][0].firstChild.nodeValue;
var ju = 1;
document.getElementById('l_year').innerHTML = year;
document.getElementById('l_month').innerHTML = month;
document.x_calendar.xyear.value = year;
document.x_calendar.xmonth.value = month;
// 열삭제
for(var i = table.rows.length-1; i > 0; i--){
table.deleteRow(i);
}
// 열 생성
//빈셀 생성
var row = table.insertRow(1);
for( var i = 0; i < start_week; i++)
{
var cell = row.insertCell(i);
cell.innerHTML = " ";
}
//셀 생성
for(var days = 1; days <= last_day; days++)
{
if(i%7==0){
i = 0;
ju++;
var row = table.insertRow(ju);
}
var cell = row.insertCell(i);
cell.innerHTML = "<sup>"+days+"</sup>";
i++;
if(i%7==1)cell.style.color='red';
if(i%7==0)cell.style.color='blue';
}
//빈셀 생성
while(1){
if(i%7==0) break;
var cell = row.insertCell(i);
cell.innerHTML = " ";
i++;
if(i%7==0) break;
}
}
php파일
<?PHP
if($division=='prev'){
$date = date("Y-m-d",mktime(0,0,0,$month-1,1,$year));
}else if($division=='next'){
$date = date("Y-m-d",mktime(0,0,0,$month+1,1,$year));
}else{
$date = date(Y.'-'.m.'-'.d);
}
if( eregi("^[0-9]{4}\-[0-9]{2}\-[0-9]{2}$",$date) ){
$t = explode("-",$date);
$year =$t[0];
$month =$t[1];
$day =$t[2];
}else{
$year = date("Y");
$month = date("m");
$day = date("d");
}
$timestemp = mktime(0,0,0,$month,1,$year);
$start_week = date("w",$timestemp);
$last_day = date("t",$timestemp);
header('Content-Type: text/xml');
echo '<?xml version="1.0" encoding="utf-8"?>';
echo'<calendar>';
echo'<start_week>'.$start_week.'</start_week>';
echo'<last_day>'.$last_day.'</last_day>';
echo'<year>'.$year.'</year>';
echo'<month>'.$month.'</month>';
while($ob = mysql_fetch_object($res)){
echo'<sum_day>'.$ob->dates.'</sum_day>';
echo'<sum_ct>'.$ob->ct.'</sum_ct>';
}
echo'</calendar>';
?>