Genesis框架從入門到精通(14): 佈局函式
正如我之前在Genesis Explained系列文章中所承諾的那樣,今天將要填 genesis/lib/functions/layout.php
這個檔案的坑。這種順序是我特意安排的,因為提前熟悉側邊欄的概念和Genesis所使用的函式對理解佈局是有幫助的。該檔案中的函式涉及佈局選項的建立,刪除和檢查,其中一個是鉤子函式。在使用Genesis時這是非常有幫助的,因為你可以為每個各個單獨的文章、頁面和其他分類選擇不同的佈局。這意味著你獨立於模板建立全新的佈局。
首先,我們來看看佈局函式(注:對原文內容有增加)
- genesis_create_initial_layouts : 唯一一個是屬於鉤子的組成部分的函式,建立預設佈局
- genesis_register_layout :註冊一個新的佈局
- g enesis_add_type_to_layout 增加一個新型別的佈局
- genesis_remove_type_from_layout 刪除一個自定義型別的佈局
- genesis_set_default_layout 設定預設佈局
- genesis_unregister_layout :刪除現有的佈局選項
- genesis_get_layouts :返回所有已註冊佈局選項的陣列
- genesis_get_layouts_for_customizer 返回用於WordPress的自定義工具的佈局
- genesis_get_layout :返回特定的佈局
- genesis_get_default_layout :返回預設佈局
- genesis_has_multiple_layouts :檢查是否具有多個佈局
- genesis_site_layout :返回選定的佈局
- genesis_layout_selector 佈局選擇器
- genesis_structural_wrap :建立一個外層巢狀div
其中許多函式都是後端操作,但也有一些非常酷的前端功能。在開始之前,我想快速介紹一下預設佈局。
function genesis_create_initial_layouts()
這裡會呼叫一系列genesis_register_layout函式用於建立初始佈局 。閱讀這部份的程式碼有助於弄明白genesis_register_layout函式,我們將在稍後介紹。同時,在取消註冊佈局或者要基於當前佈局設定一些按條件觸發的動作時需要用到的ID,也可以知道要用到哪些ID。列表如下(前面是名稱,後面是ID,不一一翻了,content就是內容區,sidebar就是側邊欄)。
- Content/Sidebar: content-sidebar
- Sidebar/Content: sidebar-content
- Content/Sidebar/Sidebar: content-sidebar-sidebar
- Sidebar/Sidebar/Content: sidebar-sidebar-content
- Sidebar/Content/Sidebar: sidebar-content-sidebar
- Full Width Content: full-width-content
有幾點關於命名方式的約定。描述標籤可以是任何東西,不必準確描述佈局。只要你能在兩頭都獲得正確的資訊,在PHP中怎麼寫都無所謂。但是對於開發人員和使用者體驗來說是重要的。標籤需要簡潔並具有描述性,以便使用者可以更直觀地瞭解每個選項的作用。應使用符合Web標準的ID來指明對應的標籤(小寫,沒有空格,不以數字開頭)。你當然使用是“one,two,three……”,但這是自找麻煩。遵循 “Sidebar/Content” 和 “sidebar-content” 這種類似的命名約定,會更加直觀,從而使程式碼更清晰,減少除錯的成本。
function genesis_register_layout( $id = ”, $args = array() )
這是一個看似簡單的函式。第一個引數是設定ID。請記住,要遵循Web標準並能描述你的佈局。第二個是可選的,但你應該使用它。 $args會傳入一個數組,理想情況下應填入’label’和’img’的值。如果沒有提供這兩個值,你的佈局將使用“No Label Selected”標籤和空白影象。img可以是任何圖片,但我喜歡使用混合選項的概念以獲得更好的使用者體驗,因此我建議像其他佈局那樣,利用現有的全寬度內容並將它分解為幾個部分,以便準確反映該佈局。下面是一個示例程式碼:

如果你想,你還可以在陣列中新增其他字串。這些字串將被回已被不時之需。理論上可以做到這一點,但一般我不這樣做。
function genesis_set_default_layout( $id = ” )
這個函式會做兩件很重要的事情。設定預設佈局,取消設定現有預設佈局。預設佈局只會在首次啟用主題或在設定中按下“重置”按鈕時被應用。
那麼我們如何使用它呢?很簡單
genesis_set_default_layout( 'top-sidebar-content-sidebar' );
這會將我們之前建立的佈局設定為預設佈局。就這樣。現在,除非點選了重置按鈕,此設定會一直有效。
function genesis_unregister_layout( $id = ” )
記得上一篇文章裡講的關於刪除側邊欄的操作嗎?如果側邊欄已經刪除了但是關於這個側邊欄的選項沒有刪除掉,那會有多麼令人困惑?這個函式的存在就是為了刪除不需要的佈局。
genesis_unregister_layout( 'sidebar-sidebar-content' );
這樣就會刪除 Sidebar/Sidebar/Content這個佈局,主題中不需要不想要的的其他佈局都可以刪除。
function genesis_get_layouts( $type = ‘site’ )
這個函式可以給你返回一個包含所有佈局和相關資訊的物件(陣列),比如ID,標籤和影象。大多數情況下,這是一個輔助函式,用於在wp-admin的後臺中讓使用者選擇佈局。
function genesis_get_layout( $id, $type = ‘site’ )
這將返回特定的佈局。你也可以使用genesis_get_layouts()然後從返回結果中獲得你需要的特定佈局,但用這個函式可以不需要額外的步驟。返回的資訊也是一個物件(陣列)。
function genesis_get_default_layout( $type = ‘site’ )
返回預設佈局。同樣,這主要是Genesis 管理後臺中使用的輔助函式。理論上,你可以使用它來建立許多其他函式,包括檢查當前佈局是否已更改。
function genesis_site_layout( $use_cache = true )
這是一個非常有用的函式,它返回當前選定的佈局。如果存檔頁面或文章頁面的佈局沒有自定義設定,這將返回Genesis Theme Settings中的設定值。如果要新增新佈局,則需要將其與鉤子一起使用。例如:

function genesis_structural_wrap( $context = ”, $output = ‘open’, $deprecated = null )
它有助於在元素中或元素周圍建立一個外層巢狀(wrap)。比如在頂部的側邊欄可以這樣用。第一步是在主題中開啟這個支援項。
add_theme_support( 'genesis-structural-wraps', array( 'top-sidebar' ) );
上面的程式碼可以修改為

這將使用.wrap將其巢狀在一個簡單的div中。你可以更改“open”和“close”之間的內容,用以建立唯一的 div,ID,css樣式等
Genesis Explained系列中的函式子系列到此結束。接下來,我們將深入到admin資料夾,並學習如何在主題設定meta資訊以及文章,頁面和分類項。