<?xml version="1.0" encoding="UTF-8"?> <rss version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
><channel><title>弦の手記 &#187; 網站專案</title> <atom:link href="http://blog.frost.tw/category/web-project/feed" rel="self" type="application/rss+xml" /><link>http://blog.frost.tw</link> <description>紀錄關於弦夜的日記</description> <lastBuildDate>Sat, 04 Sep 2010 11:38:20 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.0.1</generator> <atom:link rel='hub' href='http://blog.frost.tw/?pushpress=hub'/> <item><title>Fate of Eternity 的版面設計</title><link>http://blog.frost.tw/web-project/poston-2010-08-09/postid-629</link> <comments>http://blog.frost.tw/web-project/poston-2010-08-09/postid-629#comments</comments> <pubDate>Mon, 09 Aug 2010 10:48:15 +0000</pubDate> <dc:creator>蒼時弦也</dc:creator> <category><![CDATA[網站專案]]></category> <category><![CDATA[網站]]></category> <category><![CDATA[設計]]></category><guid isPermaLink="false">http://blog.frost.tw/?p=629</guid> <description><![CDATA[前幾天和另外兩位創始者討論了論壇的必要性。 後來發現，論壇似乎打亂了我們很多計畫。 因此決定重製網站，不過論壇採取疏散政策（待考量，基本上是推薦會員至幾個推薦的網站活動。） 首先，要來看看某弦的作品摟！ 這個作品主要是參考 WSQ 大大的版面設計所做的。 （這次靈感來源大概就是 WSQ 大大吧！那種風格我真的很喜歡。） 其實版面有修改過幾次，主要是 Logo 上的背景圖。 （最後決定採取去除的方式，這點看起來較佳。） 之後應該會抽空製成 WordPress 的版面。 結構上採取參考 WSQ 大大的方式，即是網站混合WordPress的作法。...]]></description> <content:encoded><![CDATA[<p>前幾天和另外兩位創始者討論了論壇的必要性。<br /> 後來發現，論壇似乎打亂了我們很多計畫。<br /> 因此決定重製網站，不過論壇採取疏散政策（待考量，基本上是推薦會員至幾個推薦的網站活動。）<br /> <span id="more-629"></span><br /> 首先，要來看看某弦的作品摟！<br /> 這個作品主要是參考 <a href="http://wsqsite.com" target="_blank">WSQ</a> 大大的版面設計所做的。<br /> （這次靈感來源大概就是 WSQ 大大吧！那種風格我真的很喜歡。）</p><div id="attachment_630" class="wp-caption alignnone" style="width: 310px"><a href="http://steadyoffload.com:8080/CXMV942ZBS.aHR0cDovL2Jsb2cuZnJvc3QudHcvd3AtY29udGVudC91cGxvYWRzLzIwMTAvMDgvV1AtU2xpdmVyLnBuZw==...."><img class="size-medium wp-image-630" title="WP-Sliver" alt="" width="300" height="240" src="http://steadyoffload.com:8080/CXMV942ZBS.aHR0cDovL2Jsb2cuZnJvc3QudHcvd3AtY29udGVudC91cGxvYWRzLzIwMTAvMDgvV1AtU2xpdmVyLTMwMHgyNDAucG5n...."/></a><p class="wp-caption-text">版面設計#終版</p></div><p>其實版面有修改過幾次，主要是 Logo 上的背景圖。<br /> （最後決定採取去除的方式，這點看起來較佳。）</p><p>之後應該會抽空製成 WordPress 的版面。<br /> 結構上採取參考 WSQ 大大的方式，即是網站混合WordPress的作法。<br /> （簡單說，網誌只是其中一個頁面。）</p><p>最後，就是要期待最後的暑假摟！<br /> （我的編曲軟體老是裝不成功，這樣我要怎麼弄社團光碟呢？有些音效自己做還是比較好呢～～）</p><div class="linkwithin_hook" id="http://blog.frost.tw/web-project/poston-2010-08-09/postid-629"></div>]]></content:encoded> <wfw:commentRss>http://blog.frost.tw/web-project/poston-2010-08-09/postid-629/feed</wfw:commentRss> <slash:comments>4</slash:comments> </item> <item><title>Fly Angain 入口頁設計</title><link>http://blog.frost.tw/web-project/poston-2010-04-29/postid-513</link> <comments>http://blog.frost.tw/web-project/poston-2010-04-29/postid-513#comments</comments> <pubDate>Thu, 29 Apr 2010 10:53:25 +0000</pubDate> <dc:creator>蒼時弦也</dc:creator> <category><![CDATA[網站專案]]></category> <category><![CDATA[同人]]></category> <category><![CDATA[社團]]></category> <category><![CDATA[網站]]></category> <category><![CDATA[設計]]></category><guid isPermaLink="false">http://blog.frost.tw/?p=513</guid> <description><![CDATA[其實這是先前加入的同人社團一個Project的入口頁。 不過詳細，我不能公佈太多。 畢竟網站以後會公佈，所以就先把入口頁面（暫定）給大家看看～ 而 Fly Angain 是否會繼續使用，我就不清楚了！ 這次的設計是使用四種顏色來象徵四個季節。 （其實這樣做法我是在聊天時，意外閃過的！） 因為是走「極簡風」所以我盡可能讓畫面變得乾淨。 而較大的圓，則是我在想如何產生律動感。 （之前書上看到是利用翻轉和大小變化，因為我沒辦法翻轉，所以只採用放大。） 說真的，有時候這類東西其實很需要思考。 就像我現在，還在思考如何設計內頁，才能配上這樣的入口畫面呢！ 設計，真的沒有我想像的單純。 也許我該多研究些，畢竟我的路還很長！ 這個網站是關於什麼的呢？ 這邊小小透露，是關於「音樂」的網站喔！ 裡面有四個虛擬角色，並由四個人提供聲音。 我想，大家應該清楚網站大概試作什麼的吧！...]]></description> <content:encoded><![CDATA[<p>其實這是先前加入的同人社團一個Project的入口頁。<br /> 不過詳細，我不能公佈太多。<br /> 畢竟網站以後會公佈，所以就先把入口頁面（暫定）給大家看看～<br /> 而 Fly Angain 是否會繼續使用，我就不清楚了！<br /> <span id="more-513"></span><br /> 這次的設計是使用四種顏色來象徵四個季節。<br /> （其實這樣做法我是在聊天時，意外閃過的！）</p><div class="wp-caption alignnone" style="width: 298px"><a title="Enter-Page.png" rel="lightbox" target="_blank" href="http://steadyoffload.com:8080/CXMV942ZBS.aHR0cDovL2xoMy5nZ3BodC5jb20vX2RaOXBDZlVmSFZRL1M5bGpuMklTSVhJL0FBQUFBQUFBQUdJL29aUFVOX0V2VEZ3L0VudGVyLVBhZ2UucG5n...."><img class="  " title="Enter-Page.png" alt="Enter-Page.png" width="288" height="230" src="http://steadyoffload.com:8080/CXMV942ZBS.aHR0cDovL2xoMy5nZ3BodC5jb20vX2RaOXBDZlVmSFZRL1M5bGpuMklTSVhJL0FBQUFBQUFBQUdJL29aUFVOX0V2VEZ3L3MyODgvRW50ZXItUGFnZS5wbmc=...."/></a><p class="wp-caption-text">Enter-Page.png</p></div><p>因為是走「極簡風」所以我盡可能讓畫面變得乾淨。</p><p>而較大的圓，則是我在想如何產生律動感。<br /> （之前書上看到是利用翻轉和大小變化，因為我沒辦法翻轉，所以只採用放大。）</p><p>說真的，有時候這類東西其實很需要思考。<br /> 就像我現在，還在思考如何設計內頁，才能配上這樣的入口畫面呢！<br /> 設計，真的沒有我想像的單純。</p><p>也許我該多研究些，畢竟我的路還很長！<br /> 這個網站是關於什麼的呢？<br /> 這邊小小透露，是關於「音樂」的網站喔！</p><p>裡面有四個虛擬角色，並由四個人提供聲音。<br /> 我想，大家應該清楚網站大概試作什麼的吧！<br /> （而網站其實也很快就會登場，大概是最近就會有東西可以「聽」到喔！）</p><p>那麼，請期待！<br /> （網站可是會變化的，別忘記時常上去晃晃！）</p><div class="linkwithin_hook" id="http://blog.frost.tw/web-project/poston-2010-04-29/postid-513"></div>]]></content:encoded> <wfw:commentRss>http://blog.frost.tw/web-project/poston-2010-04-29/postid-513/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>瑪奇公會網站製作筆記（二）</title><link>http://blog.frost.tw/web-project/poston-2010-04-10/postid-485</link> <comments>http://blog.frost.tw/web-project/poston-2010-04-10/postid-485#comments</comments> <pubDate>Sat, 10 Apr 2010 10:51:59 +0000</pubDate> <dc:creator>蒼時弦也</dc:creator> <category><![CDATA[網站專案]]></category> <category><![CDATA[瑪奇]]></category> <category><![CDATA[生活]]></category> <category><![CDATA[遊戲]]></category><guid isPermaLink="false">http://blog.frost.tw/?p=485</guid> <description><![CDATA[昨天很混的說完網站之後，就真的跑去混了！ 不過今天不同，今天會「乖乖」的把 System 做出來喔～ 目前內頁已經切好，準備成型了！ 今天要做什麼，大致上和大家報備一下（？ 1. 撰寫公會日誌功能 2. 撰寫訪客留言功能 其實就這樣，整個很「普通」 系統是採用之前參考 Goolog 的製作方式，也就是單檔案儲存。 雖然挺想學「晉級留言板」製作升級功能，不過總覺得麻煩（汗 公會日誌製作完畢後，是否加入 RSS 功能還要等我考慮（掩面 為什麼要考慮呢？ （因為……如果沒設定好是會被打的！！）...]]></description> <content:encoded><![CDATA[<p>昨天很混的說完網站之後，就真的跑去混了！<br /> 不過今天不同，今天會「乖乖」的把 System 做出來喔～<br /> 目前內頁已經切好，準備成型了！<br /> <span id="more-485"></span><br /> 今天要做什麼，大致上和大家報備一下（？</p><p>1. 撰寫公會日誌功能<br /> 2. 撰寫訪客留言功能</p><p>其實就這樣，整個很「普通」</p><p>系統是採用之前參考 Goolog 的製作方式，也就是單檔案儲存。<br /> 雖然挺想學「晉級留言板」製作升級功能，不過總覺得麻煩（汗</p><p>公會日誌製作完畢後，是否加入 RSS 功能還要等我考慮（掩面<br /> 為什麼要考慮呢？<br /> （因為……如果沒設定好是會被打的！！）</p><p>據說今天是Mabinogi的「王城宴會日」<br /> 因為有抽獎，而我想拿抽獎券看看（限量100名）<br /> 所以我只好草草結束這篇文章拉！</p><p>不過下次寫公會網站製作時，會分享「一些技巧」給大家，別忘記再次拜訪喔！</p><div class="linkwithin_hook" id="http://blog.frost.tw/web-project/poston-2010-04-10/postid-485"></div>]]></content:encoded> <wfw:commentRss>http://blog.frost.tw/web-project/poston-2010-04-10/postid-485/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>瑪奇公會網站製作筆記（一）</title><link>http://blog.frost.tw/web-project/poston-2010-04-09/postid-484</link> <comments>http://blog.frost.tw/web-project/poston-2010-04-09/postid-484#comments</comments> <pubDate>Fri, 09 Apr 2010 11:04:18 +0000</pubDate> <dc:creator>蒼時弦也</dc:creator> <category><![CDATA[網站專案]]></category> <category><![CDATA[瑪奇]]></category> <category><![CDATA[生活]]></category><guid isPermaLink="false">http://blog.frost.tw/?p=484</guid> <description><![CDATA[先來張首頁畫面： 這次可以說是我第一次製作遊戲公會網站， 過去頂多是興趣，做做好玩而已～ 不過這次可以說是「下定決心」要長期待在 Mabinogi 的世界，所以就比過去更專注。 不過，也是因為我的技術提昇很多，才可以這樣搞。 以前做過挺多次遊戲網站，不過最後都化為灰燼。 其實挺慘的，不過這也算是「事實」吧！ &#8212; 目前首頁做好之後，還有許多部份需要開發。 Ex. 公會日誌、訪客留言等…… 今天除了很高興的 ACG 一下之外，就是把內頁成型。 並且製作公會日誌的部份（不然感覺我好像很久沒動工了！？） 不過這次還是有「新挑戰」 因為，公會日誌為了要能在奇幻世界（瑪奇資訊站）上顯示聯播，所以需要 RSS...]]></description> <content:encoded><![CDATA[<p>先來張首頁畫面：<br /> <img class="alignnone" title="夜迷離入口畫面" alt="" width="618" height="432" src="http://steadyoffload.com:8080/CXMV942ZBS.aHR0cDovL2ltZzUxNS5pbWFnZXNoYWNrLnVzL2ltZzUxNS83OTQ2LzIwMTAwNDA5MTg1MjU5LnBuZw==...."/><br /> <span id="more-484"></span><br /> 這次可以說是我第一次製作遊戲公會網站，<br /> 過去頂多是興趣，做做好玩而已～</p><p>不過這次可以說是「下定決心」要長期待在 Mabinogi 的世界，所以就比過去更專注。<br /> 不過，也是因為我的技術提昇很多，才可以這樣搞。</p><p>以前做過挺多次遊戲網站，不過最後都化為灰燼。<br /> 其實挺慘的，不過這也算是「事實」吧！</p><p>&#8212;</p><p>目前首頁做好之後，還有許多部份需要開發。<br /> Ex. 公會日誌、訪客留言等……</p><p>今天除了很高興的 ACG 一下之外，就是把內頁成型。<br /> 並且製作公會日誌的部份（不然感覺我好像很久沒動工了！？）</p><p>不過這次還是有「新挑戰」<br /> 因為，公會日誌為了要能在奇幻世界（瑪奇資訊站）上顯示聯播，所以需要 RSS 功能。<br /> 不過我對 XML 不熟，也沒做過 RSS 所以其實挺具有挑戰性的！？</p><p>這次的網站圖示，其實挺精美的！？<br /> （大概是我有進步吧～～）</p><div class="linkwithin_hook" id="http://blog.frost.tw/web-project/poston-2010-04-09/postid-484"></div>]]></content:encoded> <wfw:commentRss>http://blog.frost.tw/web-project/poston-2010-04-09/postid-484/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Discuz 7.2 插件開發筆記 &#8211; 技能系統(1)</title><link>http://blog.frost.tw/web-project/poston-2010-03-22/postid-458</link> <comments>http://blog.frost.tw/web-project/poston-2010-03-22/postid-458#comments</comments> <pubDate>Mon, 22 Mar 2010 10:47:06 +0000</pubDate> <dc:creator>蒼時弦也</dc:creator> <category><![CDATA[網站專案]]></category> <category><![CDATA[AJAX]]></category> <category><![CDATA[JavaScript]]></category> <category><![CDATA[PHP]]></category> <category><![CDATA[網站]]></category><guid isPermaLink="false">http://blog.frost.tw/?p=458</guid> <description><![CDATA[最近在開發論壇插件，說真的，這個系統挺有意義的。 一般人會認為這是「娛樂插件」不過，錯了！！ 這是一個「能力指標」的插件喔！ 其實我的技能系統，並非「遊戲娛樂」的使用。 技能，如果在現實世界中，可以說是「會使用的技巧與擁有的能力」 那麼，我的技能系統就是用來「紀錄」的系統。 不過，仰賴 7.2 的強大插件擴充，讓我開發上非常順手。 目前系統共兩個資料檔案：「技能資訊」與「修煉資訊」 會這樣做其實很簡單，因為要避免「隨意的升級」 每項技能想要升級，就得通過「修煉選項」的達成，才可以進行升級。 整體來看，可以說是不錯的系統了！ 下面就簡單分享使用到的「技巧」 不過說真的，有使用到的就只有 Discuz 上的 Ajax 控制屬於高難度。 我使用的是...]]></description> <content:encoded><![CDATA[<p>最近在開發論壇插件，說真的，這個系統挺有意義的。<br /> 一般人會認為這是「娛樂插件」不過，錯了！！<br /> 這是一個「能力指標」的插件喔！<br /> <span id="more-458"></span><br /> 其實我的技能系統，並非「遊戲娛樂」的使用。</p><p>技能，如果在現實世界中，可以說是「會使用的技巧與擁有的能力」<br /> 那麼，我的技能系統就是用來「紀錄」的系統。</p><p>不過，仰賴 7.2 的強大插件擴充，讓我開發上非常順手。</p><p>目前系統共兩個資料檔案：「技能資訊」與「修煉資訊」<br /> 會這樣做其實很簡單，因為要避免「隨意的升級」</p><p>每項技能想要升級，就得通過「修煉選項」的達成，才可以進行升級。<br /> 整體來看，可以說是不錯的系統了！</p><p>下面就簡單分享使用到的「技巧」<br /> 不過說真的，有使用到的就只有 Discuz 上的 Ajax 控制屬於高難度。</p><p>我使用的是 Ajax 視窗，因此用 showWindow() 的 JavaScript函式呼叫。</p><pre class="brush: html">&lt;a href="plugin.php?id=dofskill:upskill&amp;skillid=$key" onclick="javascript:showWindow('upskill', this.href);return false;" title="升級技能"&gt;升級技能！&lt;/a&gt;</pre><p>整體上為模仿 Discuz 的作法，而 showWindow 的參數共四個：<br /> 1. id 名稱(方便控制)<br /> 2. 目標位子<br /> 3. 傳遞資料方式，預設get (post用法我其實不會)<br /> 4. 是否緩存預設似乎是開啟的</p><p>而目標位子的頁面，就很講究了！<br /> Discuz 設計成「直接讀取正常版模」的設計。</p><p>所以設計版模時，要照常加入 {template header} 與 {template footer}<br /> 否則，就會看空白畫面！</p><p>其餘大多是使用 PHP 達成的控制，其實也沒有什麼特別。</p><p>說實在的，其實技能系統只是一個基礎系統，實際上沒有太大的意義。</p><div class="linkwithin_hook" id="http://blog.frost.tw/web-project/poston-2010-03-22/postid-458"></div>]]></content:encoded> <wfw:commentRss>http://blog.frost.tw/web-project/poston-2010-03-22/postid-458/feed</wfw:commentRss> <slash:comments>3</slash:comments> </item> <item><title>DIY一個PHP留言板之讀取解析</title><link>http://blog.frost.tw/web-project/poston-2010-03-12/postid-446</link> <comments>http://blog.frost.tw/web-project/poston-2010-03-12/postid-446#comments</comments> <pubDate>Fri, 12 Mar 2010 11:08:55 +0000</pubDate> <dc:creator>蒼時弦也</dc:creator> <category><![CDATA[網站專案]]></category> <category><![CDATA[PHP]]></category> <category><![CDATA[專案]]></category> <category><![CDATA[程式]]></category><guid isPermaLink="false">http://blog.frost.tw/?p=446</guid> <description><![CDATA[經過前幾次的「教學」 其實我也發現，直接提供程式碼和註解對新手實在不利。 因此本篇文章會解析讀取的技巧。 首先，是 glob() 函式的使用。 $paths = glob("./data/*.txt"); //讀取留言路徑 glob是一個依照「路徑」讀取檔案的函式，這點大家一定都很清楚。 不過卻可以使用 * 字元，把所有路徑都讀取。 如 data 目錄下有 a.txt , b.txt,...]]></description> <content:encoded><![CDATA[<p>經過前幾次的「教學」<br /> 其實我也發現，直接提供程式碼和註解對新手實在不利。<br /> 因此本篇文章會解析讀取的技巧。<br /> <span id="more-446"></span><br /> 首先，是 glob() 函式的使用。</p><pre class="brush: php">
$paths = glob("./data/*.txt"); //讀取留言路徑
</pre><p>glob是一個依照「路徑」讀取檔案的函式，這點大家一定都很清楚。<br /> 不過卻可以使用 * 字元，把所有路徑都讀取。<br /> 如 data 目錄下有 a.txt , b.txt, c.dat 3個檔案，在上述的情況下，會將 a.txt 與 b.txt 的路徑存入陣列。</p><p>而留言需要排序，因此使用 sort() 函式。</p><pre class="brush: php">
sort($paths, SORT_NUMERIC); //將路徑以數值排序
</pre><p>通過 sort 排序陣列，如果鎮列原本是混亂的，那麼會被排列整齊，並且依照規則。<br /> 如：依照字母、數字大小等等<br /> SORT_NUMERIC 則是「將值以數字排序」<br /> 當然，也可以利用「自訂排列規則」的方式進行排列。</p><p>接著我們需要能夠讀取檔案。</p><pre class="brush: php">
$contents = file_get_contents('./data/comments.txt'); //讀取 ./data/comments.txt 的內容
</pre><p>file_get_contents() 是 PHP4 新增的函式，我想市面上應該沒有 PHP3 的主機。<br /> 如果不確定版本，可以使用 phpinfo() 來檢查。</p><p>這個函式原理很簡單，把路徑的檔案內容一次不漏的讀取，並且放進變數。</p><p>不過我們的留言是特殊的規則：</p><pre class="brush: html">
;subject
留言標題
;nickname
暱稱
;contents
留言
換行
</pre><p>因此需要使用迴圈搭配，來找出各數值的內容。<br /> *其實也可以用preg_match之類的方式把數值抓出，使用迴圈慢慢讀取是為了「可擴充欄位」</p><pre class="brush: php">
$contents = file_get_contents('./data/comments.txt'); //讀取
$contents = explode(PHP_EOL, $contents); //用換行字元分割 *Linux以 \n 換行， Windows 以 \r\n 換行
foreach($contents as $line){ //foreach 是把陣列值一一讀取
  if(!$line) continue;
  if($line[0] == ';'){
    $dKey = substr(1, $line);
    continue;
  }
  if(!$dKey) continue;
  if($dkey == 'contents')
    $data[$dkey][] = $line;
  else
    $data[$dkey] .= $line;
}
</pre><p>exoplde() 函式會依照指定的字元、字串，將字串切割。<br /> 如：a|b|c 以 | 為切割字元，則傳回 Array( [0] => a [1] => b [2] => c )</p><p>接著在迴圈中，做非常多的判斷。<br /> Ex. if(!$line) continue;<br /> ! 為相反字元，當變數有值時也相當於 boolen 的 true, 因此 false 反轉就是 true<br /> 而執行 continue; 結束本次迴圈。<br /> 這類用法也有 break; 結束迴圈，可以在某條件下停止。</p><p>substr() 則是擷取字串，如 abcdef 使用 substr(2, &#8216;abcdef&#8217;) 則傳回 cdef<br /> 這點原理何在呢？</p><p>程式中，字串其實是由 char[] 陣列組成，因此 $line[0] 即是 $line 字串的第一個字元。<br /> 而 substr 就是把字串從指定的陣列key開始讀取到最後一個。</p><p>經過這些步驟之後，終於完成了「讀取」的效果。<br /> 傳回的 $data 可以讀到檔案中各種資料。</p><p>不過仍有一個小 bug 會發生，在正式的實作時，這個會直接修正掉。<br /> ( 在這之前，檢查看看讀取的判斷式，哪裡出現矛盾，資料中含有什麼會發生問題。 )</p><div class="linkwithin_hook" id="http://blog.frost.tw/web-project/poston-2010-03-12/postid-446"></div>]]></content:encoded> <wfw:commentRss>http://blog.frost.tw/web-project/poston-2010-03-12/postid-446/feed</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>DIY一個PHP留言板之反思(一)</title><link>http://blog.frost.tw/web-project/poston-2010-03-10/postid-444</link> <comments>http://blog.frost.tw/web-project/poston-2010-03-10/postid-444#comments</comments> <pubDate>Wed, 10 Mar 2010 11:01:16 +0000</pubDate> <dc:creator>蒼時弦也</dc:creator> <category><![CDATA[網站專案]]></category> <category><![CDATA[PHP]]></category> <category><![CDATA[專案]]></category> <category><![CDATA[網站]]></category><guid isPermaLink="false">http://blog.frost.tw/?p=444</guid> <description><![CDATA[經過一斷時間的思考之後，多多少少會發現先前的系統有問題。 在許多情況之下，一開始的設計並不是很好。 在經過幾次開發之後，其實開始發現有些不切實際的製作和多餘的動作。 首先，先把原本預定的功能找出來： 1. 版模 2. 仿HTML標籤 3. 可覆蓋 4. BBcode 等等…… 但是現在反思，「這個留言板要給誰用？讓誰學會呢？」 一開始我的目標是針對「新手」 那麼這些功能是否太困難了？ 「是的，真的太困難！」 那個改進方向呢？ 「針對『製作留言板』來進行重點教學」 結論：...]]></description> <content:encoded><![CDATA[<p>經過一斷時間的思考之後，多多少少會發現先前的系統有問題。<br /> 在許多情況之下，一開始的設計並不是很好。<br /> 在經過幾次開發之後，其實開始發現有些不切實際的製作和多餘的動作。<br /> <span id="more-444"></span><br /> 首先，先把原本預定的功能找出來：<br /> 1. 版模<br /> 2. 仿HTML標籤<br /> 3. 可覆蓋<br /> 4. BBcode<br /> 等等……</p><p>但是現在反思，「這個留言板要給誰用？讓誰學會呢？」</p><p>一開始我的目標是針對「新手」<br /> 那麼這些功能是否太困難了？<br /> 「是的，真的太困難！」</p><p>那個改進方向呢？<br /> 「針對『製作留言板』來進行重點教學」</p><p>結論：<br /> 1. 留言、回覆留言<br /> 2. BBCode ( 基於安全性，這點要重點教學 )<br /> 3. 管理功能 ( 就算再討厭，還是得做 )</p><p>下次的教學會和大家分享留在「資料存取(一)提到的讀取技巧，並且加以改善」</p><div class="linkwithin_hook" id="http://blog.frost.tw/web-project/poston-2010-03-10/postid-444"></div>]]></content:encoded> <wfw:commentRss>http://blog.frost.tw/web-project/poston-2010-03-10/postid-444/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>DIY一個PHP留言板之資料存取(四)</title><link>http://blog.frost.tw/web-project/poston-2010-03-08/postid-441</link> <comments>http://blog.frost.tw/web-project/poston-2010-03-08/postid-441#comments</comments> <pubDate>Mon, 08 Mar 2010 10:59:35 +0000</pubDate> <dc:creator>蒼時弦也</dc:creator> <category><![CDATA[網站專案]]></category> <category><![CDATA[PHP]]></category> <category><![CDATA[專案]]></category> <category><![CDATA[程式]]></category><guid isPermaLink="false">http://blog.frost.tw/?p=441</guid> <description><![CDATA[呼呼~ 接下來是製作刪除檔案的處理，其實這方面只是把之前讀取留言的功能改良而已。 除了改成只「讀主題」和「加入刪除函式」之外，就沒有其他的處理。 首先，在目錄下建立一個 remove.php 的檔案，並且撰寫程式碼(如下) &#60;?php function removeComment(array $paths){ //建立移除函式 foreach($paths as $path){ //將路徑陣列一個一個讀取 if(!is_file($path)) continue; //如果不是檔案則切到下一個繼續 unlink($path); //刪除檔案...]]></description> <content:encoded><![CDATA[<p>呼呼~<br /> 接下來是製作刪除檔案的處理，其實這方面只是把之前讀取留言的功能改良而已。<br /> 除了改成只「讀主題」和「加入刪除函式」之外，就沒有其他的處理。<br /> <span id="more-441"></span><br /> 首先，在目錄下建立一個 remove.php 的檔案，並且撰寫程式碼(如下)</p><pre class="brush: php">
&lt;?php

function removeComment(array $paths){ //建立移除函式
	foreach($paths as $path){ //將路徑陣列一個一個讀取
		if(!is_file($path)) continue; //如果不是檔案則切到下一個繼續
		unlink($path); //刪除檔案
		++$i;
	}
	return $i;
}

function getSubject($file){ //建立 getSubject 函式
	$data = file_get_contents($file); //讀取檔案內容
	$data = explode(PHP_EOL, $data); //以斷行分割檔案內容( PHP_EOL 會依照作業系統切換 \n 或 \r\n )

	foreach($data as $key => $line){ //將內容陣列放入 foreach 運作
		if($line == ';subject'){ //檢查是否為註解
			$logSubject = (bool) true; //啟動紀錄主旨
			continue; //直接結束本次迴圈
		}

		if(!$logSubject) continue; //如果非主旨則跳過，並且繼續尋找

		$subject = $line; //紀錄主旨
		break; //離開迴圈

	}

	return $subject; //傳回取得之主旨
}

if($_POST['submit']){ //檢查是否有送出表單
	$dels = removeComment($_POST['del']); //傳入移除陣列
	echo "
<div style=\"width:50%; margin:5px auto; border:1px solid #EEE; padding:5px; text-align:center;\">成功移除{$dels}筆留言</div>

";//產生表單(送出)
}

$glob = glob('./data/*.txt'); //搜尋資料檔案
sort($glob, SORT_NUMERIC); //排序檔案( 由大到小 )

$_GET['page'] = !$_GET['page'] ? 1 : $_GET['page'];  //檢查是否有指定頁碼
$start = ($_GET['page'] - 1) * 15; //設定迴圈開始編號
$end = $_GET['page'] * 15; //設定回圈結束編號

echo '
<form action="" method="post">'; //產生表單
for($i = $start; $i < $end; ++$i){ //從開始編號運作到結束編號。
	if(empty($glob[$i])) break; //檢查是否有此筆資料，無則跳出
	$subject = getSubject($glob[$i]); //呼叫 getSubject 函式取得主旨
	/* 開始產生畫面 */
	echo "
<div style=\"width:50%; margin:5px auto; border:1px solid #EEE; padding:5px;\">主題: {$subject} -
<input type=\"checkbox\" value=\"{$glob[$i]}\" name=\"del[]\" /></div>

";

}
echo '
<div style="width:50%; margin:5px auto; border:1px solid #EEE; padding:5px; text-align:center;">
<input type="submit" name="submit" value="刪除選取" /></div>

';//產生表單(送出)
echo '</form>

';//產生表單

?&gt;
</pre><p>上方的 HTML 部份可能會有問題，請各位在使用時稍微注意。</p><p>原理大致解說：</p><p>顯示部份和 comment.php 無異，只是將讀取部份改為「只讀取標題」<br /> 並且為了防止意外，只在「確認為標題時」才會做儲存。</p><p>而另外就是加入了「刪除函式」<br /> 構造很簡單，將傳入的陣列依序使用 unlink 刪除檔案函式刪除。</p><p>而 name="del[]" 為表單的陣列用法，在 PHP 收到為 $_POST['del'] 的陣列(method="post" 狀況)<br /> 每個 checkbox 儲存的 value 都是該筆留言路徑，因此刪除時只需將取得的路徑陣列傳入。</p><p>&#8212;</p><p>到了這部份，其實已經準備好製作留言板的技術。<br /> 明天，即將開始的就是「正式製作」</p><p>不過到了這個部份，其實整個架構是很混亂的。<br /> 因此明天要先做「重新規劃、整理」的處理，以免成品過度混亂。</p><div class="linkwithin_hook" id="http://blog.frost.tw/web-project/poston-2010-03-08/postid-441"></div>]]></content:encoded> <wfw:commentRss>http://blog.frost.tw/web-project/poston-2010-03-08/postid-441/feed</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>DIY一個PHP留言板之資料存取(三)</title><link>http://blog.frost.tw/web-project/poston-2010-03-06/postid-437</link> <comments>http://blog.frost.tw/web-project/poston-2010-03-06/postid-437#comments</comments> <pubDate>Sat, 06 Mar 2010 11:12:00 +0000</pubDate> <dc:creator>蒼時弦也</dc:creator> <category><![CDATA[網站專案]]></category> <category><![CDATA[PHP]]></category> <category><![CDATA[專案]]></category> <category><![CDATA[程式]]></category><guid isPermaLink="false">http://blog.frost.tw/?p=437</guid> <description><![CDATA[經過了兩天琢磨讀取功能，目前已經有一個稍微完善的讀取系統。 那麼，現在就要來製作「寫入」的部份。 實際上在 PHP5 之後可以使用方便的函式寫入，不過為了顧及到 PHP4 所以還是改良一下語法。 首先，我們先任意建立一個網頁( html 或者 php 皆可 ) 並且製作一個表單，作為留言使用： &#60;form method="post" action="post.php"&#62; 主旨：&#60;input type="text" size="20"...]]></description> <content:encoded><![CDATA[<p>經過了兩天琢磨讀取功能，目前已經有一個稍微完善的讀取系統。<br /> 那麼，現在就要來製作「寫入」的部份。<br /> 實際上在 PHP5 之後可以使用方便的函式寫入，不過為了顧及到 PHP4 所以還是改良一下語法。<br /> <span id="more-437"></span><br /> 首先，我們先任意建立一個網頁( html 或者 php 皆可 )<br /> 並且製作一個表單，作為留言使用：</p><pre class="brush: html">
&lt;form method="post" action="post.php"&gt;
主旨：&lt;input type="text" size="20" name="subject" /&gt;&lt;br /&gt;
暱稱：&lt;input type="text" size="20" name="nickname" /&gt;&lt;br /&gt;
留言：&lt;textarea name="contents"&gt;&lt;/textarea&gt;
&lt;input type="submit" name="submit" value="送出" /&gt;
&lt;/form&gt;
</pre><p>因為表單指向 post.php 因此，新增 post.php 接收留言資訊：</p><pre class="brush: php">
&lt;?php

function createComment(array $data){ //建立產生檔案函式
	$eol = PHP_EOL; //指定換行字元 \n 或 \r\n
	foreach($data as $key => $value){ //讀取傳入的資料
		/*
			寫入格式：
			;(陣列鍵值) Ex. ;subject
			(資料)
		*/
		if($i > 0) //檢查是否為第1筆
			$contents .= "{$eol};{$key}{$eol}{$value}"; //如果為非，則在每筆資料前加入換行
		else
			$contents .= ";{$key}{$eol}{$value}"; //如果為真，則照一般方式儲存
		++$i; //增加1 做為判斷資料筆數
	}
	$dataPath = './data/'.time().'.txt'; //指定儲存路徑
	if(PHP_VERSION > 5){ //檢查 PHP 版本
		file_put_contents($dataPath, $contents); //使用PHP5新增函式
	}else{
		$fp = fopen($dataPath, 'w'); //開啟檔案
		fwrite($fp, $contents); //寫入資料
		fclose($fp); //關閉檔案
	}
}

$subject = $_POST['subject'] ? $_POST['subject'] : '無主題'; //檢查主題，無則自動設定
$nickname = $_POST['nickname'] ? $_POST['nickname'] : '匿名'; //檢查暱稱，無則自動設定
$contents = $_POST['contents'] ? $_POST['contents'] : false; //檢查內容，無則傳回假

if(!$contents){ //檢查是否有內容
	echo "填寫不完整";
	header("Location: post.htm"); //導回發表頁
}else{
	createComment(array('subject' => $subject, 'nickname' => $nickname, 'contents' => $contents)); //產生資料檔案( 目前需依照順序才能正常讀取資料 )
	header("Location: comments.php"); //引導至觀看留言頁
}

?&gt;
</pre><p>到此，留言板的基本功能已經完成。<br /> 明天會加入簡易的刪除留言功能，希望到此各位都能理解。</p><div class="linkwithin_hook" id="http://blog.frost.tw/web-project/poston-2010-03-06/postid-437"></div>]]></content:encoded> <wfw:commentRss>http://blog.frost.tw/web-project/poston-2010-03-06/postid-437/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>DIY一個PHP留言板之資料存取(二)</title><link>http://blog.frost.tw/web-project/poston-2010-03-05/postid-435</link> <comments>http://blog.frost.tw/web-project/poston-2010-03-05/postid-435#comments</comments> <pubDate>Fri, 05 Mar 2010 11:17:52 +0000</pubDate> <dc:creator>蒼時弦也</dc:creator> <category><![CDATA[網站專案]]></category> <category><![CDATA[PHP]]></category> <category><![CDATA[專案]]></category> <category><![CDATA[程式]]></category><guid isPermaLink="false">http://blog.frost.tw/?p=435</guid> <description><![CDATA[昨天經過思考後，決定將「資料讀取」的方式改變。 雖然還未成熟，不過已經比起原定的方式更加完整。 今天就來實作資料讀取與版面的呈現(模型) 首先先看一下新版本的資料檔案(data.txt)： ;title 測試留言標題 ;nickname 蒼時 弦 ;contents 這是測試留言， 主要是對資料解析做測試 ;responds 奏>>回復了留言！ 影賜>>回復留言～ 接著是新的讀取程式 data.php &#60;?php function setdata($content,...]]></description> <content:encoded><![CDATA[<p>昨天經過思考後，決定將「資料讀取」的方式改變。<br /> 雖然還未成熟，不過已經比起原定的方式更加完整。<br /> 今天就來實作資料讀取與版面的呈現(模型)<br /> <span id="more-435"></span><br /> 首先先看一下新版本的資料檔案(data.txt)：</p><pre class="brush: html">
;title
測試留言標題
;nickname
蒼時 弦
;contents
這是測試留言，
主要是對資料解析做測試
;responds
奏>>回復了留言！
影賜>>回復留言～
</pre><p>接著是新的讀取程式 data.php</p><pre class="brush: php">
&lt;?php

function setdata($content, array $eArrs){
	$datas = explode(PHP_EOL, $content);
	foreach($datas as $key => $line){
		if($line[0] == ';'){
			++$dKey;
			if(in_array($line, $eArrs))
				$enableArr = (bool) true;
			else
				$enableArr = (bool) false;
			continue;
		}
		if($enableArr)
			$dataGroup[$dKey][] = $line;
		else
			$dataGroup[$dKey] .= $line;
	}

	return $dataGroup;
}

$eArrs = array(';contents', ';responds');
$content = file_get_contents('data.txt');

$data = setdata($content, $eArrs);

print_r($data);

?&gt;
</pre><p>輸出結果是一組依照順序的陣列，如果是「同一組，則再建立新陣列儲存。」</p><p>以上就是初步完成資料讀取了！</p><p>接下來就是<strong>呈現留言以及排序</strong>的處理。</p><p>現在新增一個 comments.php 來製作模型。</p><pre class="brush: php">
&lt;?php

function getComment($file, array $eArrs){ //建立 getComment 函式
	$data = file_get_contents($file); //讀取檔案內容
	$data = explode(PHP_EOL, $data); //以斷行分割檔案內容( PHP_EOL 會依照作業系統切換 \n 或 \r\n )

	foreach($data as $key => $line){ //將內容陣列放入 foreach 運作
		if($line[0] == ';'){ //檢查是否為註解
			++$dKey; //如果是則 +1
			if(in_array($line, $eArrs)) //檢查是否產生陣列(兩行以上資料需要)
				$enableArr = (bool) true; //傳回真
			else
				$enableArr = (bool) false; //傳回假
			continue; //直接結束本次迴圈
		}
		if($enableArr) //檢查是否開啟產生陣列
			$dataGroup[$dKey][] = $line; //如為真，則產生陣列儲存(二維)
		else
			$dataGroup[$dKey] .= $line; //如為假，則直接儲存資料(並且連接起來)
	}

	return $dataGroup; //傳回解析後陣列
}

$glob = glob('./data/*.txt'); //搜尋資料檔案
sort($glob, SORT_NUMERIC); //排序檔案( 由大到小 )

$eArr = array(';contents', ';responds'); //指定需要產生二維鎮列的註解

$_GET['page'] = !$_GET['page'] ? 1 : $_GET['page'];  //檢查是否有指定頁碼
$start = ($_GET['page'] - 1) * 2; //設定迴圈開始編號
$end = $_GET['page'] * 2; //設定回圈結束編號

for($i = $start; $i < $end; ++$i){ //從開始編號運作到結束編號。
	if(empty($glob[$i])) break; //檢查是否有此筆資料，無則跳出
	$comments = getComment($glob[$i], $eArr); //呼叫 getComment 函式分析檔案
	$contents = implode('', $comments[3]); //將內容部份特別分析，用結合
	/* 開始產生畫面 */
	echo "
<div style=\"width:50%; margin:5px auto; border:1px solid #EEE; padding:5px;\">主題:{$comments[1]}暱稱：{$comments[2]}內容：{$contents}</div>

";

}

?&gt;
</pre><p>之後請新增一個 /data 資料夾，並且新增大於二的「檔案」<br /> 檔名： 1.txt ~ ?.txt (一律數字)<br /> 檔案內容：</p><pre class="brush: html">
;title
留言標題
;nickname
留言者暱稱
;contents
留言內容，
可以換行輸入，並不會影響。
</pre><p>接著打開 comments.php 會發現檔名最大的兩篇被顯示，其餘的並沒有顯示。<br /> 原因在哪裡呢？</p><p>http://網址/?page=2</p><p>輸入之後，會發現 (檔名最大-2) 和 (檔名最大-3) 的檔案被顯示出來。<br /> 沒錯，這次讀取資料時，順便將分頁功能加入了系統。</p><p>明天將會繼續改善讀取功能，並且加入「發表留言」的模型。</p><div class="linkwithin_hook" id="http://blog.frost.tw/web-project/poston-2010-03-05/postid-435"></div>]]></content:encoded> <wfw:commentRss>http://blog.frost.tw/web-project/poston-2010-03-05/postid-435/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> </channel> </rss>