我只想建立我的第一個動態網站。我想用PHP,MYSQL,AJAX,HTML,CSS我應該使用什麼架構在PHP中編寫我的第一個動態網站?
我有一些初學者的問題:
應該頁眉和導航欄除外在的header.php與回聲打印出來?
應該設計標籤回聲在PHP(如:
<a>1 Test test</a>
)或只返回的數據- 是否有做動態的網站一個很好的例子嗎?
我的主要問題是,我不知道如何做出一個清晰的結構。在哪裏做出正確的設計(在PHP中打印出來?)
我只想建立我的第一個動態網站。我想用PHP,MYSQL,AJAX,HTML,CSS我應該使用什麼架構在PHP中編寫我的第一個動態網站?
我有一些初學者的問題:
應該頁眉和導航欄除外在的header.php與回聲打印出來?
應該設計標籤回聲在PHP(如:<a>1 Test test</a>
)或只返回的數據
我的主要問題是,我不知道如何做出一個清晰的結構。在哪裏做出正確的設計(在PHP中打印出來?)
如果它確實是你的第一個網站,我實際上建議在框架方面不要使用任何東西。這會讓您花一些時間來適應HTML/CSS,SQL和PHP,而不會使用MVC(模型/視圖/控制器)等更高級別的原則來重載您。我主要擔心的是,立即從框架開始,讓學習曲線變得陡峭,並跳過諸如使用您將要使用的編程語言的習慣。
你最終會亂成一團,但這隻會讓你更加欣賞框架;那麼你可以過渡到使用框架,如CodeIgniter,Symfony或CakePHP(或其他人,因爲還有更多)。
我真的很喜歡和其他框架合作Play!對於Java,以及對於Ruby的Rails。既然你說過你是初學者,你也可以考慮這些。
+1,我同意。首先學習語言和概念*,然後擔心範式和模型以及所有爵士樂。 – Adam 2011-04-06 12:28:14
恕我直言,你最好看看基於php的web應用程序框架。例如在http://en.wikipedia.org/wiki/Comparison_of_web_application_frameworks#PHP
的列表儘管它可能更多地學習upfront(框架以及php),但它們都具有足夠牢固的結構來開發動態網站。找到一個足夠輕便,並有很好的教程,你會發現自己一路上學習的PHP語言。我相信這會比在開始階段只使用raw php更容易。
當你知道更多的時候,你可以判斷你喜歡哪個框架,並且適合你的需求或編碼風格,甚至恢復到原始的php。
如果你想關於這個問題的一本好書,嘗試
你所問的是相當多的口味問題。你的應用程序越複雜,應該有更多的工作進入精心製作和可維護的結構。
我的意見是:首先學習基礎知識,然後看看框架。如果你瞭解發生了什麼,它會變得更容易。
使用MVC - http://www.yiiframework.com/doc/guide/1.1/en/basics.mvc 見的Yii框架http://yiiframework.com,它擁有所有你需要:)
嘗試敏捷工具包,可能是最簡單的PHP UI框架開始使用專爲網絡軟件。
你會跨過很多問題。 http://agiletoolkit.org
根據框架/普通PHP的選擇,您應該根據自己的實踐來做。例如,在Agile Toolkit中,您使用模板,因此您將頁眉和頁腳放入templates/jui/shared.html文件中。這是在第一個截屏中解釋的。
如果你重新發明輪子,繼續使用普通的PHP,那麼你應該做的更好做include 'header.php';
。良好的框架可以讓你不學習網絡軟件的內部運作。壞框架無論如何都需要你瞭解一切。
那麼,一次回答你所有的問題。 您需要的唯一技術是模板。
模板是一個典型的PHP腳本,然而,它主要由純HTML組成,其中一些PHP代碼僅用於顯示動態生成的數據。
創建一個主站點模板包含標題和導航欄和頁腳除了實際頁面內容以外的所有內容。
然後創建單獨的頁面(您的站點的「部分」:news.php,links.php等) 但是使每個頁面包含兩部分:獲取數據部分和顯示數據部分。
獲取數據時,不應打印出單個字符。
如果發生錯誤,請顯示錯誤頁面。
一旦您完全沒有錯誤地獲取所有數據 - 是時候添加主模板了。
一個典型的腳本可能看起來像
<?
//include our settings, connect to database etc.
include dirname($_SERVER['DOCUMENT_ROOT']).'/cfg/settings.php';
//getting required data
$DATA=dbgetarr("SELECT * FROM links");
// setting title for using in the main template
$pagetitle = "Links to friend sites";
//etc
//set page template filename
$tpl = "links.tpl.php";
//and then finally call a template:
include "main.tpl.php";
?>
其中main.tpl.php
是你的主要網站模板,其中包括公用部分,如頁眉,頁腳,菜單等:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>My site. <?=$pagetitle?></title>
</head>
<body>
<div id="page">
<? include $tpl ?>
</div>
</body>
</html>
和links.tpl.php
是實際的頁面模板:
<h2><?=$pagetitle?></h2>
<ul>
<? foreach($DATA as $row): ?>
<li><a href="<?=$row['link']?>" target="_blank"><?=$row['name']?></a></li>
<? endforeach ?>
<ul>
最終你可能會o更復雜的設計,就像前控制器一樣,但對於第一個站點來說,這個設計既簡單又強大。
我建議使用一些模板系統(Smarty會很好)。 乍一看你把標題和導航欄放在哪裏並不重要。您何時需要排除導航欄並將其分開存放?當你想有能力包括不同的導航。酒吧在您網站的不同部分。
比如我有幾個子域網站:about.website.dev,special.website.dev和,讓我們說,terms.website.dev
在about.website.dev我的導航欄中的條目會是:「我是誰」,「我該做什麼」,「我有多酷」;在special.website.dev上:「商品」,「解決方案」,「提示」等。
您的導航欄的模板是一樣的:只是一個循環,雖然所有的條目,但內容不同。在這種情況下,您可以將導航欄與標題分開。如果你不使用模板,你只需創建三個文件(在這種情況下):about.nav.php,special.nav.php和terms.nav.php,然後你只需包含適當的導航欄。
如果你的導航。酒吧在你的網站上到處都是一樣的,你可以將它存儲在header.php中。一旦你需要分離,這將不是困難的,但我仍然建議使用模板,只是爲了習慣「適當的網站開發」。
看看Smarty或Savant等不同的模板系統。我個人最喜歡Django(python)模板系統。並習慣於分離您的視圖和業務邏輯。
我建議你創建一個模板,和另一個腳本(做這樣的事情解析$ _GET/$ _ POST等時,更容易)它具有打印(或回聲)功能的HTML標籤,頁眉,頁腳,標題欄,導航欄等只是包括的功能和所有網頁可以具有以下結構的腳本:
<?php
include 'html_display_functions.php';
/* put lines here to parse $_GET and $_POST, session_start()/$_SESSION,etc
if needed */
print_html_pre_content();
print '<p>Hello, world! or other content.</p>';
print_html_post_content();
?>
我發現這是非常乾淨的,並且當你搞亂$ _GET,$ _POST和$ _SESSION等時很容易添加功能。
有很多在這裏已經很好的答案 - 但只是添加....
做分解功能獨立的包含文件 - 並使用定位這些文件的一致方法。
是否找到一個好的PHP編碼風格並堅持下去。例如horde,PEAR
沒有代碼或HTML以內聯方式在包含文件中執行 - 它應該只在您的控制腳本中專門調用它時執行某些操作。
如果您包含生成HTML的文件,請確保它們提供了關閉所有打開的標籤的功能。即不只是'header.php'
由於CSS和Javascript文件不應該直接在HTML文檔的HEAD之外聲明,請查看調用功能可以將這些文件添加到現有HTML文檔中的方式 - 一個明顯的解決方案是將模板系統與輸出緩衝結合使用,但您也可以使用javascript將稍後的JS和CSS文件注入文檔的HEAD部分。
沒有Javascript? – 2011-04-06 08:27:04
@webarto曾經試過沒有JS的AJAX? ;-) – Tokk 2011-04-06 08:29:20
如果你是初學者,你有沒有考慮過使用python?有了像燒瓶這樣好的框架,編寫乾淨的代碼比沒有任何東西開始使用PHP(而且大多數PHP框架相當重量級)更好。除此之外,python中SQL注入的風險要低得多,因爲db api支持分離查詢和參數(初學者在php中使用PDO和預準備語句); – ThiefMaster 2011-04-06 08:29:21