Professional Documents
Culture Documents
6
實做網站程式系列課程
Class No. 8
2008/12/27
Mr. 6 實做網站程式系列課程
2008 年 12 月 27 日
第 1頁
今日安裝
今日安裝:
安裝:
第一步:
第一步:設定今日需要環境
設定今日需要環境
1. 請將本堂課所有檔案先下載到自己的電腦的「Mr.6」資料夾裡的新子資料夾
「class8」裡。這些檔案可至「\\pc1\Temp\mr6\class8」取得,或至
http://mr6online.com/class/class8 裡下載 class8.zip 並解壓縮即可。
2. 將下載後的「class8」裡的「class8_code」裡面所有檔案複製到
「D:\public_html\class7」。
4. 按下螢幕左下方的「開始」
,選「執行」,然後敲入「cmd」,叫出 dos 視窗
5. 敲入「D:」然後按 enter,會轉換到「D」槽去。
6. 敲入「cd public_html/class8」
7. 在 DOS 視窗內執行下列指令
8. 再到 D:\public_html\jstest 裡,設立一個新的檔案夾「uploads」
,來存放等一下使用
的檔案。
Mr. 6
實做網站程式系列課程
2008 年 12 月 27 日
第 2頁
今日題目
今日題目:
題目:JavaScript (加
加 AJAX 與插件)
課程摘要
在前面的三堂課中,我們已經將伺服機端的程式碼的最重要的幾個骨幹依稀學會了。
我們學了 FORM,可以向使用者要求資料,並回饋一些內容。我們也學了資料庫,可
以將使用者的資料送到資料庫去儲存放好、需要時叫出。我們還學了會員系統,可以
在未來讓使用者回來,登入後即知道他是誰,處理他自己的資料。在這堂課中,我們
再學了 JavaScript,便可以將現代網站開發技術的拼圖大概的拼了完整了。
需要環境
本堂課假設學員已經過第一堂、第二堂課、第三堂課,因此已經完成了以下設置:
PHP+APACHE 的環境
FileZilla
EditPlus 程式編輯器
Mr. 6 實做網站程式系列課程
2008 年 12 月 27 日
第 3頁
MySQL
Navicat
PHP PEAR
本堂課沒有新的安裝。全部跟著程式碼。
基本教學
基本教學
JavaScript 語言簡介
第 4頁
JavaScript 基礎語
基礎語法
<html>
<script language="JavaScript">
var name = “電腦仔”;
alert("大家好,這是我的第一個 JS 程式!我的名字是" + name);
var new_name = prompt("你的名字呢?”, name);
name = new_name;
document.writeln("<b>你的名字是:</b>");
document.writeln(name);
</script>
</html>
在以上的程式中,看到幾個東西:JavaScript 就和所有程式語言一樣,大量的使用變
數,你可以為任何的資料設定變數「variable」來暫時儲存資料,留待等一下計算的時
候運用。在這個範例裡,我們使用了 name 和 new_name 兩個變數。這兩個變數裡面
裝的東西都是「字串」。
我們也示範了如何處理字串的「組合」。字串的組合是用「+」符號,當執行 a+b,而
a 與 b 都不是數字而是字串時,最後 a+b 會變成兩個字串連在一起,a 在前面,b 在後
面。
第 5頁
如果你的年齡是小於二十一歲,而且
而且你正打算喝酒的話,那就請在螢幕上顯示:
而且 「你
不能買酒!」
如果你的姓氏是「黃」,或你的姓氏是「王」
,那就請在螢幕上顯示:「請再確定一下
是否有聽錯,是姓王還是黃?」
接下來我們想示範的是「迴圈」的語法,也就是讓你可以執行同一個指令很多次,一
次又一次再一次的:
var s = ‘開始:’;
while (s.length < 30)
{
s = s + ‘哈’ ;
}
document.writeln(s);
Mr. 6 實做網站程式系列課程
2008 年 12 月 27 日
第 6頁
var s = ‘開始:’;
for(i=0; i<30; i++)
{
s = s + ‘,’ + i ;
}
document.writeln(s);
JavaScript 有一個很重要的功能,那就是它可以在使用者做完一件事情,不必回到伺
服機去操煩 PHP 程式,JavaScript 可以直接被「叫醒」
,在瀏覽器上面就直接執行。這
部份的功能稱為「 「event handling」
」。:
<html>
<a href="#" onClick="alert('耶,成功了!');">按我一下!</a>
<a href="#" onMouseOver="alert('讚啦!');">不必按我,只要滑鼠掃過我!</a>
<img src="a.gif" name="the_image">
<a href="#" onClick="document.the_image.src='b.gif';">換照片!</a>
<a href="#" onClick=’window.open
("http://google.com",window_name","location,menubar");’>按我就可以開一個新視窗!</a>
Mr. 6
實做網站程式系列課程
2008 年 12 月 27 日
第 7頁
接下來,示範一下「陣列」(array)的功能。陣列是一種特別的變數,裡面可以一次存
好幾筆的資料,然後以一個數字(稱為 index)來存取:
我們也來示範一下自定函數。在 JavaScript,可以自己定義自己的函數,這樣一來,
可以重覆的使用這些功能。
<head>
function announceTime(message)
{
//get the date, the hour, minutes, and seconds
var the_date = new Date();
var the_hour = the_date.getHours();
var the_minute = the_date.getMinutes();
var the_second = the_date.getSeconds();
</body>
Mr. 6
實做網站程式系列課程
2008 年 12 月 27 日
第 8頁
</html>
簡易教學
AJAX簡易教學
這個溝通的過程中,如圖所示,分為四個階段:
Mr. 6 實做網站程式系列課程
2008 年 12 月 27 日
第 9頁
一、啟動
啟動:
啟動:首先,在 HTML 中,一定有一個地方讓使用者可以「啟動」整個 AJAX
的事件。當然,有的是定時固定啟動的。以以下案例來看,當使用者按下「刪除」
的超連結,即呼叫一個「sendDeleteRequest( )」的 JavaScript 函數。
二、送出
送出:
送出:當使用者按下去後,sendDeleteRequest 即會被呼叫,該函數的定義在「head」
區中:
function sendDeleteRequest(id) {
new Ajax.Request("index.php",
{
method: 'post',
postBody: 'post_id=' + id + '&delete_post=1',
onComplete: showResponse
});
}
三、收到
收到:
收到:當伺服機真的完成了,並傳回來之後,它會自動呼叫 showResponse,這個
函數的定義如下:
function showResponse(req){
Mr. 6 實做網站程式系列課程
2008 年 12 月 27 日
第10頁
四、改變外觀
改變外觀:
改變外觀:取得這個資訊後,我們可以繼續跑 JavaScript,讓現在這個 HTML 頁
面出現一些反應,在以上的範例碼中,我們使用 Effect.toggle( )來讓其中一個 DIV
變不見。另一個常用的語法則是「innerHTML」 ,若和「getElementById」一起使
用,可以將任何一個 HTML 的 tag 裡面的文字給換掉,換成另一個東西,這樣一
來,我們可以輕鬆的改變 HTML 頁面裡的外觀。
譬如,以下程式碼可將「天氣到底如何」,瞬間換成「天氣晴」。
document.getElementById('boldStuff').innerHTML = '天氣晴!’;
<b id='boldStuff'>天氣到底如何?</b>
「插件」
插件」(widgets)簡易教學
簡易教學
所謂「插件」
,即為一段簡單的程式碼,可以讓使用者「貼」在他們自己的網站裡,
譬如貼在部落格的邊欄,然後每次使用者 load 這一頁,它會自動到你的伺服機,去抓
取需要的資訊,拿過來顯示在使用者的網站頁面。
前言:
前言:其他插件的比較
以這樣的定義來看,如果我們在一個叫「index.html」這樣寫,也算是插件:
<img src=’http://mr6.cc/logo.jpg’>
Mr. 6 實做網站程式系列課程
2008 年 12 月 27 日
第11頁
另外,還有幾種插件可行,其中一種就是「iframe」插件,這樣的插件其實很容易,
就是請使用者在他的頁面裡置入一個「iframe」,如下:
<iframe width=280 height=300
src=’http://blackwhiteweb.com/cover.php?id=2334&name=hello’>
另外,我們常看到用 Flash(SWF)來做的插件,則是讓使用者以類似以下的語法,貼在
網站上面:
Flash 插件的好處是相當強大,且不會受瀏覽器影響太大,但缺點是插件本身必須以
Flash 寫成,許多插件本身是某個網站的延伸,順便做個插件,若試著以 Flash 插件的
方式來提供原本在網站上的服務,則幾乎所有程式都得重寫,有的工程師不會寫 flash
的,更是為了一個小插件而必須再請來一個人,不合效益。
Mr. 6 實做網站程式系列課程
2008 年 12 月 27 日
第12頁
JavaScript 插件
因此,目前業界認為最好用,且最乾淨、最有彈性的插件的寫法。JavaScript 插件在
美觀上面尤其佔優勢,可以完全的融入對方的網站之中,使用它所預設的字體等等(當
然若想自訂 CSS 依然可以),不會有 scroll bar 的干擾。不過,JavaScript 也有一個缺
點,那就是使用者頁面會等到你的 JavaScript 整個 load 完才會繼續畫出頁面其他的部
份,若你的 JavaScript 出現 bug,或者伺服機當掉,那所有嵌了你的插件的使用者的
頁面也都會全部悉數掛掉!之前發生 Sitemeter 當機,以致於全美國許多大部落格都
紛紛當機一整天,就是因為大家都嵌 Sitemeter 的 JavaScript 插件的緣故。不過,這樣
的情形並不多見,且 JavaScript 插件的好處實在太多,因此建議以後可盡量學習以
JavaScript 來製作插件。
<style type="text/css">
.customCSSclass a{text-decoration:none;}
</style>
<script type="text/javascript" src="server.php"></script>
主要「插入」的程式碼,是藏在「server.php」裡面。換句話說,我們利用 JavaScript
的<script>語法,這個語法平常若指示「src」,應該是要到遠端去抓一個「.js」檔案過
來(譬如我們這堂課有抓「prototype.js」等檔案) ,然後這個「.js」檔案裡面寫的就是
平常的 JavaScript 碼,只是包成一個「.js」檔案比較好抓下來而已。但在 JavaScript
插件裡,我們將這個「.js」檔換成一個「.php」的程式擋,也就是去呼叫遠端的 PHP
程式,讓它「生成」一堆 JavaScript 語法。
這些 JavaScript 語法,就是插件主要要呈現在頁面上的內容。這個語法大部份都是重
覆著 :
document.write(‘<h1>這是插件生成的新內容</h1>);
Mr. 6 實做網站程式系列課程
2008 年 12 月 27 日
13頁
第
<?php
$data = $_GET[‘name’];
$result = mysql_query("select * from posts where name = $data”);
if (!$result) {
die($message);
}
$row = mysql_fetch_assoc($result));
$phone = $row[‘phone’];
$address = $row[‘address’];
五個常常用得上的JavaScript小工具
個常常用得上的 小工具
1. 文字編輯器:
文字編輯器 FCKedtor
一般我們若碰到需要文字編輯的狀況,通常就是使用「Textarea」 ,讓使用者填入一些
文句,然後我們再做處理。問題是使用者這樣就只能輸入純文字,無法做一些色彩、
字型、大小方面的變化,因此漸漸有人透過 JavaScript 來做出更好用的文字編輯器,
其中 FCKEditor 為業界公認非常好用的一個選擇。
Mr. 6 實做網站程式系列課程
2008 年 12 月 27 日
第 14頁
include("fckeditor/fckeditor.php") ;
然後,我們只要在欲置放那個長方型框框處置放以下語法 :
$sBasePath = '/teach/class8/fckeditor/';
$oFCKeditor = new FCKeditor('FCKeditor1','100%', '700') ;
$oFCKeditor->BasePath = $sBasePath ;
$oFCKeditor->Value = $content ;
$oFCKeditor->Create() ;
$content = $_POST['FCKeditor1'];
2. 頭頂的瀏覽選單(navigational
頭頂的瀏覽選單 menu)
一個網站最重要的東西之一就是「選單」,我們使用 Windows 習慣,選單通常是在視
窗頂上的部份,按下一個選項,會有一個框框應聲滑下來,上面還有其他的子選項,
若看到有些子選項有一個小箭頭,還可以拉出更次級的小框框,選其他的子選單……
以此類推。這樣的選單,在以往的網站中是不可能達成的,但現在透過 JavaScript,
已經有許多熱心的工程師幫我們寫了一些範例。
我們這邊找來「Pro Dropdown 2」
,簡單好用,只要在程式「head」區裡加入兩行:
第 15頁
方便的選單呈現出來了。至於使用者選擇一個選項後,只要<a>裡頭加入正確的 URL,
使用者即會被帶到那個地方去。
3. 複製網址
在現今的網站設計中,我們常常看到尤其是社群網站,都會在頁面上特別註解「此頁
面的 URL」,讓使用者不必麻煩到網址欄去複製目前網址。這個設計通常會是兩個控
制項所組成,一個是文字框(textbox),裡面已經預先填好這個網頁的 URL,右手邊則
是一個按鈕,上面寫著「copy」 ,或「複製網址」 。這個複製網址不易製作,因為 IE
與 Firefox 兩者並沒有完全支援,因此這裡找到一個特殊寫法,透過 Flash 的方式來成
功複製網址(在 Firefox 裡),只要先在「head」區先定義 JavaScript 函數:
function clipboardcopy(inElement)
然後,當使用者過來,按下「複製網址」鍵,就會將「'http://aaa.com」給複製下來,
等一下按下「ctrl-V」即可貼在他想要的地方。
4. 整個區塊文字漸漸消失的設計
整個區塊文字漸漸消失的設計
現今的網站程式中,當使用者按下「刪除」,若還要回到伺服機,將整頁都 reload 一
遍,已經是過時的做法了。因此為了炫麗原則,按下刪除後,網頁會送一個 AJAX call
Mr. 6 實做網站程式系列課程
2008 年 12 月 27 日
第16頁
這樣「fade-in」
、「fade-out」的效果有好幾種做法,我們這次所使用的是「Scriptaculous」
所附的「Effect」的效果。只要在「刪除」的處理的 JavaScript 過程中加上一句:
javascript:Effect.toggle(“box-2’, "appear");
5. 選顏色
我們常常需要請使用者選一個他們喜歡的顏色。在網站的世界裡,我們習慣以 HEX
來詮釋一個區塊、一個字體的顏色,但這種 RRGGBB 形容方式,一般使用者不會記
得,不容易選擇他們真正喜歡的顏色,我們若可以呈現出某個調色盤,就好像在 Word
裡選顏色一樣,對使用者來說就是一大福音。
然後再於適當的版面位置置放以下的程式碼,即可呈現出一個可讓使用者選擇顏色,
並在使用者送出他的選擇後立刻陳列顏色 HEX 碼的文字框:
Mr. 6 實做網站程式系列課程
2008 年 12 月 27 日
第17頁
<body onload='load();'>
然後在「head」區中寫入以下程式:
function load() {
}
Mr. 6 實做網站程式系列課程
2008 年 12 月 27 日
第18頁
今日流程
今天的流程大致如下:
3. 進入「我的私房部落格」的範例網站,先解釋整個四個頁面的架構。
4. 進入 edit_post.php,解釋選單(menu)。
5. 解釋 edit_post.php 的圖片上載。
8. 解釋 AJAX 原理(輔以講義),以及「漸漸不見」。
9. 解釋插件原理(輔以講義)
。
10. 試用其他的套件(若時間許可)。