我在PHP(OOP)和各種其他網絡編程語言方面頗有經驗,但我似乎無法圍繞CMS如何構建真正的工作方式。CMS塊放置/頁面創建如何工作?
當我建立自己的CMS,我做靜態頁面(可憐的想法,我知道)。但是如何製作動態塊/頁面,就像在Drupal/EPiServer中一樣?
該塊的標記是存儲在數據庫中的,還是對塊文件的引用?我不是在說「如何編碼」,但更像是,類比/方法是什麼?
總之,我希望做一個CMS這是能夠:
- 支持拖放塊
- 創建新頁面(動態路由)
我知道這描述很差,所以隨時提問。
我在PHP(OOP)和各種其他網絡編程語言方面頗有經驗,但我似乎無法圍繞CMS如何構建真正的工作方式。CMS塊放置/頁面創建如何工作?
當我建立自己的CMS,我做靜態頁面(可憐的想法,我知道)。但是如何製作動態塊/頁面,就像在Drupal/EPiServer中一樣?
該塊的標記是存儲在數據庫中的,還是對塊文件的引用?我不是在說「如何編碼」,但更像是,類比/方法是什麼?
總之,我希望做一個CMS這是能夠:
我知道這描述很差,所以隨時提問。
在Drupal的情況下(7)完整的頁面是塊的構建。頁面本身由區域組成,塊被放置在區域中。哪個塊的配置出現在哪個區域存儲在DB中。
每個塊的內容使用它自己的系統已知的回調函數來構建(塊與它們的渲染代碼之間有映射),因此塊本身的標記不會存儲在數據庫(或任何地方)中。相反,當構建頁面時,每個塊的標記都是使用數據庫(或任何其他來源)的內容生成的。
然後將所有塊的標記注入主頁面模板以進行頁面呈現。頁面模板採用塊和區域佈局所需標記的汽車。
這個問題的答案是非常廣泛的,可以根據需求複雜或簡單。
下面是數據庫驅動的或動態網站是如何工作的:
PDO
或MYSQLI
以及HTML PURIFIER
,這樣可以避免用戶受到XSS攻擊view.php
的頁面,將作爲動態內容頁面。現在爲了顯示數據,建議使用GET
方法,它將確保搜索引擎將能夠索引它。您也可以複製該鏈接並將其提供給其他用戶。
例如,您的URL可能看起來像這樣http://fakesite1213.com/view.php?content_id=23
,請注意content_id=23
部分這是GET
請求。
即使設置了數據庫和獲取請求,我們仍然需要獲取數據並將其顯示給用戶。爲此,我們可以使用簡單的查詢,如:
//open database connection
try {
$dbcon = new PDO('mysql:host='. DB_HOST .';
dbname='. SITE_DB_NAME . ';
charset=utf8', SITE_DB_USER, SITE_DB_PASS);
} catch (Exception $e) {
}
// use try catch block for queries.
// I am using pdo, by using
try {
$sql = "SELECT * FROM tablename WHERE contentid=:contentid";
$statement = $dbcon->prepare($sql);
$statement->bindValue(':contentid', $_GET['content_id']);
$statement->execute();
$result = $statement->fetchAll(PDO::FETCH_ASSOC);
if (count($result) > 0)
{
var_dump($result);
}
} catch (Exception $e) {}
的代碼非常簡單明瞭。如果數據庫表的列名稱爲contentid
,它將與來自get方法(url)的$_GET['content_id']
進行匹配。當我們得到一些匹配時,我們var_dump
它。您需要使用echo
,並且$result
最有可能會返回一個數組。
也有使用AJAX和JSON等方式,但是這是基本的想法
非常感謝您的詳細回覆。但是,我更多地考慮存儲HTML塊和佈局背後的類比? :) – StevenThelin
乾杯!這完全回答了我的問題:) – StevenThelin