CppCMS模板系統

來源:互聯網
上載者:User

CppCMS不知不覺已經用了很久了,產品也開發了幾個。不過CppCMS的版本一直在演化,1.0已經正式發布,文檔也在不斷增加和更新。本篇從自己的體會談談模板系統(template system).

下面這篇文章系統的介紹了template system。本文部分選取其中的例子,但是從我的角度重新解釋。作者的文章有時候不是那麼容易理解。

http://cppcms.com/wikipp/en/page/cppcms_1x_templates_gen

用模板自動產生C++類

由於CppCMS也是MVC系統,所以很自然需要瞭解一下後端通過C++程式渲染頁面的機制。也就是View。

<% skin purple %>  <% view master uses data::master %>    <% template render() %>    ...    <% end template %>  <% end view %><% end skin %>

上面的代碼配置了skin,view和template。這些代碼最終都會被CppCMS翻譯成C++代碼。

view master 會被實現為一個名叫master的C++類,這個master類所在的namespace叫做purple,由skin指定。

template render()會被實現為master類的render()函數

...代表了網頁的HTML代碼(也可包含很多CSS/JavaScript代碼),這些都會被專程render函數內部的C++代碼,比如:

virtual void render() {#line 25 "/home/chenshu/my_git/cml/cppweb/template/welcome.tmpl"out()<<"\r\n""<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\r\n""<html xmlns=\"http://www.w3.org/1999/xhtml\">\r\n""<head>\r\n""<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\r\n""<title>cml</title>\r\n""<style type=\"text/css\">\r\n""<!--\r\n"

上面的代碼來自我的一個網站軟體。篇幅較長,只顯示片段。

out()<<"..." 就是將網頁內容寫入到HTTP Response的內容裡面,然後返回到瀏覽器。

最終父類

所有view標記產生的類都最終繼承了cppcms::base_view了。比如上面的master類,由於沒有指定父類,因此直接從base_view繼承。

引用成員的使用

view標記裡面的uses語句代表這個類master內部有一個成員變數data::master.

在類中的定義如下:

data::master& data;

 同時會建立一個master的建構函式類接收參數初始化該引用成員。比如:

master(std::ostream &_s,data::master &_data): cppcms::base_view(_s),data(_data)

文本替換

<%= name %> 裡面的name是可以被替換的,比如在tmpl檔案裡面用到了<%= base_url %>,實際上會被替換成C++代碼:(<% name %>用法已經被廢除,總是要加上=)

out()<<cppcms::filters::escape(data.base_uri);

因此我們必須確保data::master類裡面有base_uri公有成員變數.

看到這裡很自然就會思考,如果寫成<%=base_uri()%>函數形式是否可以?是否會被翻譯成如下C++代碼?

out()<<cppcms::filters::escape(data.base_uri());

經過測試,當然可以。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.