Include
真的不應該被用來加載內容,但含有其他文件的功能...
如果內容簡單地從數據庫中來了,爲什麼不直接查詢的輸出,將該值存儲到變量中,並使用print($var)
?
一個基本的CMS將其文章存儲在數據庫中,其ID可能是標題字符串和內容。內容是print
編輯爲div
或某個其他作爲容器的塊元素。它周圍的佈局只是某種模板 - 一個帶有內容標記的html頁面。
您可以通過管理控制檯添加內容,通常有至少管理的文章,編輯文章,併發布新文章的地方。這個區域應該有密碼保護。
所以我們可以說你已經有了一個URI /articles/1/How-Grinch-Stole-Thanksgiving
(使用URL重寫引擎優化的目的),模板的基本排序可能是這樣的:
<body>
<div id="container">
<?php
$uri = substr($_SERVER['REQUEST_URI'], 1); //Gives us articles/1/How-Grinch-Stole-Thanksgiving
$components = explode('/', $uri); // $components[0] is "articles", $components[1] is 1, etc.
/* Do SQL Query here: "SELECT * FROM '".$components[0]."' WHERE 'id'=".$components[1] */
$conn = mysql_connect("localhost", "mysql_user", "mysql_password");
if (!$conn) {
echo "Unable to connect to DB: " . mysql_error();
exit;
}
if (!mysql_select_db("mydbname")) {
echo "Unable to select mydbname: " . mysql_error();
exit;
}
$sql = "SELECT * FROM '".$components[0]."' WHERE 'id'=".$components[1];
$result = mysql_query($sql);
if (!$result) {
echo "Could not successfully run query ($sql) from DB: " . mysql_error();
exit;
}
if (mysql_num_rows($result) != 1) {
echo "Improper result. Exiting";
exit;
}
$row = mysql_fetch_assoc($result);
print($row["content"]);
?>
</div>
</body>
這是非常簡陋的;你不可能在這類劇本上走得太遠。關鍵是你應該開始探索這種類型的CMS,其中索引從$_GET
值中取出替換線索,以便您能夠意識到頁面是如何結合在一起的。稍後,您可以閱讀模板並將它們組裝成頁面,並用數據庫或其他模板中的內容替換標記。
從我在Wordpress,Drupal和Joomla!中看到的大部分內容,這些CMS都沒有在數據庫中存儲它們的** PHP代碼**,只是內容。您將擁有將內容加載到數據庫中的模板文件。 – mmundiff
爲什麼你想要將模板或任何html/php代碼存儲在數據庫中?我不明白這對創建CMS是如何非常有用的。如果你堅持這種方法,我想你可以拉動字符串並將其保存爲一個帶有php擴展名的臨時文件,將其包含在內,然後刪除該文件。但我仍然看不到這對您的總體目標有用或有幫助。 – mason81
你的做法是錯誤的和危險的。你會暴露自己的問題和攻擊的基礎上使用'eval()'這將是必要的從數據庫字符串中繪製PHP。 KISS - 保持簡單,愚蠢。你這樣做是爲了學習,所以從小做起,做大。探索WordPress的,Drupal的,Joomla ...這些都是不好的例子 - 他們試圖成爲每個人的一切,最終臃腫。自定義CMS應該專注於您的需求。 – stslavik