2015-12-07 17 views
0

我在PHP(OOP)和各種其他網絡編程語言方面頗有經驗,但我似乎無法圍繞CMS如何構建真正的工作方式。CMS塊放置/頁面創建如何工作?

當我建立自己的CMS,我做靜態頁面(可憐的想法,我知道)。但是如何製作動態塊/頁面,就像在Drupal/EPiServer中一樣?

該塊的標記是存儲在數據庫中的,還是對塊文件的引用?我不是在說「如何編碼」,但更像是,類比/方法是什麼?

總之,我希望做一個CMS這是能夠:

  • 支持拖放塊
  • 創建新頁面(動態路由)

我知道這描述很差,所以隨時提問。

回答

0

在Drupal的情況下(7)完整的頁面是塊的構建。頁面本身由區域組成,塊被放置在區域中。哪個塊的配置出現在哪個區域存儲在DB中。

每個塊的內容使用它自己的系統已知的回調函數來構建(塊與它們的渲染代碼之間有映射),因此塊本身的標記不會存儲在數據庫(或任何地方)中。相反,當構建頁面時,每個塊的標記都是使用數據庫(或任何其他來源)的內容生成的。

然後將所有塊的標記注入主頁面模板以進行頁面呈現。頁面模板採用塊和區域佈局所需標記的汽車。

+0

乾杯!這完全回答了我的問題:) – StevenThelin

0

這個問題的答案是非常廣泛的,可以根據需求複雜或簡單。

下面是數據庫驅動的或動態網站是如何工作的:

  1. 你/用戶可以通過文本編輯器(類似這樣的SO編輯器)或任何類型的用戶輸入
  2. 在保存編輯添加或,用戶輸入將被保存到數據庫中(如果您打算向最終用戶提供HTML代碼,請確保使用PDOMYSQLI以及HTML PURIFIER,這樣可以避免用戶受到XSS攻擊
  3. 現在數據已保存在數據庫上,您可以創建一個名爲view.php的頁面,將作爲動態內容頁面。
  4. 現在爲了顯示數據,建議使用GET方法,它將確保搜索引擎將能夠索引它。您也可以複製該鏈接並將其提供給其他用戶。

    例如,您的URL可能看起來像這樣http://fakesite1213.com/view.php?content_id=23,請注意content_id=23部分這是GET請求。

  5. 即使設置了數據庫和獲取請求,我們仍然需要獲取數據並將其顯示給用戶。爲此,我們可以使用簡單的查詢,如:

    //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等方式,但是這是基本的想法

+0

非常感謝您的詳細回覆。但是,我更多地考慮存儲HTML塊和佈局背後的類比? :) – StevenThelin