2017-05-30 120 views
1

內容豐富的「鏈接」概念可以適用於多個對象或多個對象。然而,我無法找到一種方法來模擬反向關係,而不會使工作翻倍(即指定每個對象的子代和父代)。內容豐富的分層菜單

我想用Contentful驅動一個簡單的導航像這樣:

  • 菜單項目1

    • 子菜單項1
    • 子菜單項2
    • 子菜單第3項
  • 個菜單項2個

    • 子菜單項4個
    • 子菜單項5
    • 子菜單項6
      - 子子菜單項1

凡鏈接可能看起來像/<parent.slug>/<child.slug>/<child.slug>/

我可以找到由travers呈現的頁面條目建立父母關係以確保我得到一個帶有slu,的頁面,以及具有特定slu parent的父母。

但是,除非在對象中包含「children」字段 - 這很容易出錯和不一致,否則很難呈現出子菜單項而不訴諸多個API調用。

+0

如果我說菜單中的每個項目都有對其父項的引用,但每個父母都不知道它的孩子,我是否正確理解您? – Robban

+0

是的,我如何「正常地」構建一個樹形菜單結構只是具有父關係的子對象,然後就能夠使用自動反向關係遍歷樹 - 例如使用Django ORM,這是微不足道的。 –

回答

0

是的,我們有這個同樣的問題。我們有一個Page模型,帶有一個名爲'parentPage'的refLink。我們的中間件對CF進行1次調用以獲取所有頁面,並在內存中構建站點樹模型。

從這個模型,我們有方法讓孩子,並獲得URL slug。

+0

我打算把這個標記爲正確的答案,因爲這也是我們解決它的方式 - 把所有的頁面抓到內存中並從那裏開始。雖然我認爲目前還沒有更好的方法,但它讓我覺得效率低下。 –

+0

同意,但是CF並不是像(WordPress的,Sitecore,AEM,Umbraco,...)這樣的以頁面爲中心的CMS。它更像是Parse或Firebase,一個在DB + API之上的可愛UI。 我想介紹頁面的概念來定義一個網站,因爲這是作者傾向於知道的。 +添加頁面,將內容放在頁面上很容易。 –

1

如果你的項目只有一個孩子的關係,你可以利用包含的概念。只需獲取最遠的子項並將參數includes設置爲足夠高的值(最大值爲10),Contentful API將在單個API調用中包含所有引用的內容。

你可以閱讀更多關於包括在這裏:https://www.contentful.com/developers/docs/references/content-delivery-api/#/reference/links

+0

是的 - 這將允許構建菜單,但據我所知,不允許API調用根據父對象slugs檢索單個子對象。 /祖父母/父母/孩子/ - 如果我使用大的包含值檢索整個樹,我可以在內存中執行此操作,這對於幾十頁可能會很好,但幾千? –

+0

如果您的菜單中有數千個項目,那麼您需要使用多個API調用。對於一個大的菜單來說,某種緩存機制可能是合適的。 – Robban