OctoberCms-Pages

介紹
所有網(wǎng)站都有頁面。 在OctoberCms,頁面用頁面模板表示。 頁面模板文件位于主題目錄的/ pages子目錄中。 頁面文件名不會影響路由,但是最好根據(jù)頁面的功能來命名頁面。 文件應(yīng)具有htm擴展名。 頁面需要Configuration和Twig模板部分,而PHP部分是可選的。 在下面,您可以看到最簡單的主頁示例:

url = "/"
==
<h1>Hello, world!</h1>

Page配置
頁面配置在頁面模板文件的“配置”部分中定義。 頁面配置定義頁面參數(shù),這是路由和呈現(xiàn)頁面及其組件所必需的,這將在另一篇文章中進行介紹。 頁面支持以下配置參數(shù):
參數(shù)說明

url 頁面URL,必填。 URL語法如下所述。
title 標題,必填。
layout 可選。 如果指定,則應(yīng)包含布局文件的名稱,不帶擴展名,例如:default。
description 后端接口的頁面描述,可選。

URL語法
頁面URL是使用url配置參數(shù)定義的。 URL應(yīng)以正斜杠字符開頭,并且可以包含參數(shù)。 沒有參數(shù)的URL是固定的和嚴格的。 在以下示例中,頁面URL為/ blog。

url = "/blog"

帶參數(shù)的URL更靈活。 以下示例中定義的具有URL模式的頁面將針對/ blog / post / something之類的任何地址顯示。 URL參數(shù)可以由October組件或從頁面PHP代碼部分訪問。

url = "/blog/post/:post_id"

這是您可以從頁面的PHP部分訪問URL參數(shù)的方式(有關(guān)更多詳細信息,請參見“動態(tài)頁面”部分):

url = "/blog/post/:post_id"
==
function onStart()
{
    $post_id = $this->param('post_id');
}
==

參數(shù)名稱應(yīng)與PHP變量名稱兼容。 要使參數(shù)可選,請在其名稱后添加一個問號:

url = "/blog/post/:post_id?"

URL中間的參數(shù)不能為可選。 在下一個示例中,:post_id參數(shù)被標記為可選,但將根據(jù)需要進行處理。

url = "/blog/:post_id?/comments"

可選參數(shù)可以具有默認值,如果真實參數(shù)值未顯示在URL中,這些默認值將用作備用值。 默認值不能包含任何星號,管道符號或問號。 默認值在問號后指定。 在下一個示例中,URL / blog / category的category_id參數(shù)將為10。

url = "/blog/category/:category_id?10"

您還可以使用正則表達式來驗證參數(shù)。 要添加驗證表達式,請在參數(shù)名稱或問號之后添加管道符號,然后指定表達式。 這些表達式中不允許使用正斜杠符號。 例子:

url = "/blog/:post_id|^[0-9]+$/comments" - 匹配 /blog/10/comments
...
url = "/blog/:post_id|^[0-9]+$" - 匹配  /blog/3
...
url = "/blog/:post_name?|^[a-z0-9\-]+$" - t匹配  /blog/my-blog-post

通過在參數(shù)后面加星號,可以使用特殊的通配符參數(shù)。 與常規(guī)參數(shù)不同,通配符參數(shù)可以匹配一個或多個URL段。 URL只能包含單個通配符,不能使用正則表達式,或后跟可選參數(shù)。

url = "/blog/:category*/:slug"

通配符參數(shù)本身可以通過在星號前面加上?來使其成為可選參數(shù)。 字符。

url = "/blog/:slug?*"

例如,類似/ color /:color / make /:make * / edit的URL將匹配/ color / brown / make / volkswagen / beetle / retro / edit并提取以下參數(shù)值:

color: brown
make: volkswagen/beetle/retro

注意:子目錄不影響頁面URL-URL僅使用url參數(shù)定義。

動態(tài)頁面
在頁面模板的“Twig”部分中,您可以使用October提供的任何功能,過濾器和標簽。 任何動態(tài)頁面都需要變量。 在十月份,可以通過頁面,布局PHP部分或組件來準備變量。 在本文中,我們將在PHP部分中介紹如何準備變量。

頁面執(zhí)行生命周期
在頁面和布局的PHP部分中可以定義一些特殊功能:onInit,onStart和onEnd。 在初始化所有組件時以及在處理AJAX請求之前,將執(zhí)行onInit函數(shù)。 onStart函數(shù)是在頁面執(zhí)行開始時執(zhí)行的。 onEnd函數(shù)在呈現(xiàn)頁面之前和執(zhí)行頁面組件之后執(zhí)行。 在onStart和onEnd函數(shù)中,可以將變量注入到Twig環(huán)境中。 使用數(shù)組符號將變量傳遞到頁面:

url = "/"
==
function onStart()
{
    $this['hello'] = "Hello world!";
}
==
<h3>{{ hello }}</h3>

下一個示例更加復(fù)雜。 它顯示了如何從數(shù)據(jù)庫加載博客文章集,以及如何在頁面上顯示(Acme \ Blog插件是虛構(gòu)的):

url = "/blog"
==
use Acme\Blog\Classes\Post;

function onStart()
{
  $this['posts'] = Post::orderBy('created_at', 'desc')->get();
}
==
<h2>Latest posts</h2>
<ul>
    {% for post in posts %}
        <h3>{{ post.title }}</h3>
        {{ post.content }}
    {% endfor %}
</ul>

《標記指南》中介紹了October提供的默認變量和Twig擴展名。 動態(tài)布局文章中介紹了執(zhí)行處理程序的順序。

發(fā)送自定義回復(fù)
執(zhí)行生命周期中定義的所有方法都可以暫停進程并返回響應(yīng)-只需從生命周期函數(shù)返回響應(yīng)即可。 下面的示例將不加載任何頁面內(nèi)容,而是返回字符串Hello world!。 瀏覽器:

function onStart()
{
    return 'Hello world!';
}

一個更有用的示例可能是使用Redirect門面觸發(fā)重定向:

public function onStart()
{
    return Redirect::to('http://google.com');
}

處理表格
您可以使用在頁面或布局PHP部分中定義的處理程序方法來處理標準表單(處理AJAX請求在AJAX Framework文章中進行了說明)。 使用form_open()函數(shù)定義引用事件處理程序的表單。 例:

{{ form_open({ request: 'onHandleForm' }) }}
    Please enter a string: <input type="text" name="value"/>
    <input type="submit" value="Submit me!"/>
{{ form_close() }}
<p>Last submitted value: {{ lastValue }}</p>

可以在頁面或布局PHP部分中定義onHandleForm函數(shù),如下所示:

function onHandleForm()
{
    $this['lastValue'] = post('value');
}

處理程序使用post函數(shù)加載值,并初始化頁面的lastValue屬性變量,該變量在第一個示例中顯示在表單下方。

注意:如果在頁面布局,頁面和頁面組件中定義了具有相同名稱的處理程序,則October將執(zhí)行該頁面處理程序。 如果在組件和布局中定義了處理程序,則將執(zhí)行布局處理程序。 處理程序的優(yōu)先級是:頁面,布局,組件。

如果要引用在特定組件中定義的處理程序,請在處理程序引用中使用該組件的名稱或別名:

{{ form_open({ request: 'myComponent::onHandleForm' }) }}

404 頁面
如果主題包含帶有URL / 404的頁面,則在系統(tǒng)找不到請求的頁面時顯示該主題。

錯誤頁面
默認情況下,所有錯誤都會在詳細的錯誤頁面上顯示,其中包含錯誤發(fā)生的文件內(nèi)容,行號和堆棧跟蹤。 通過在config / app.php腳本中將配置值debug設(shè)置為false并創(chuàng)建帶有URL / error的頁面,可以顯示自定義錯誤頁面。

Page 變量
頁面的屬性可以在PHP代碼部分或“組件”中訪問,方法是引用$ this-> page。

function onEnd()
{
    $this->page->title = 'A different page title';
}

也可以使用this.page變量在標記中訪問它們。 例如,要返回頁面標題:

<p>The title of this page is: {{ this.page.title }}</p>

有關(guān)更多信息,請參見“標記”指南中的this.page。

以動態(tài)方式加入頁面資源文件
如果需要,您可以使用控制器的addCss和addJs方法將資源(CSS和JavaScript文件)注入頁面。 可以在頁面或布局模板的PHP部分中定義的onStart函數(shù)中完成此操作。 例:

function onStart()
{
    $this->addCss('assets/css/hello.css');
    $this->addJs('assets/js/app.js');
}

如果在addCss和addJs方法參數(shù)中指定的路徑以斜杠(/)開頭,則它將相對于網(wǎng)站根目錄。 如果資產(chǎn)路徑不是以斜杠開頭,則它是相對于主題的。

可以通過將注入的資源文件作為數(shù)組傳遞來合并它們:

function onStart()
{
    $this->addCss(['assets/css/hello.css', 'assets/css/goodbye.css']);
    $this->addJs(['assets/js/app.js', 'assets/js/nav.js']);
}

可以使用合并器來注入和編譯LESS和SCSS資源文件:

function onStart()
{
    $this->addCss(['assets/less/base.less']);
}

為了在頁面或布局上輸出注入的資產(chǎn),請使用{%styles%}和{%scripts%}標簽。 例:

<head>
    ...
    {% styles %}
</head>
<body>
    ...
    {% scripts %}
</body>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容