2014-10-01 73 views
0

我在Anchor CMS主題中擁有普通帖子頁面。旁邊的帖子列表是一個類別列表,我打算用它作爲博客文章的排序過濾器。在類別列表已經輸出如下,基於錨定文檔:Anchor CMS:在帖子列表中包含類別ID

<?php foreach(Category::dropdown() as $id => $category): ?> 

    <div class="filter" data-filter=".category-<?php echo $id; ?>"><?php echo $category; ?></div> 

<?php endforeach; ?> 

然後我必須包括列表中的每一篇文章或文章對應的類,它應該是這樣的:

<?php if(has_posts()): ?>  
    <?php $i = 0; while(posts()): ?>   

     <article class="mix category-<?php echo category_id(); ?>"> 

    <?php endwhile; ?> 
<?php endif; ?> 

請注意,文章類別類別[num]與div「過濾器」上的數據過濾器相對應。這是允許排序的。

但是任何辦法,我嘗試這樣做我得到任何一倍任職或者只是不工作。使用如出現在文檔foreach語句中我曾嘗試:

<?php foreach(Category::dropdown() as $id => $category): ?> 

    <article class="mix category-<?php echo category_id(); ?>"> 

<?php endforeach; ?> 

但是這使得崗位翻倍,我想是因爲它是一個while循環中?

在數據庫中,類別和職位是在兩個單獨的表,但是該類別ID被包括在所述柱表。我尋找一種方法來回應這個例如article_category_id但迄今沒有成功。

如何在分類列表中包含分類ID?

回答

2

好的,找到了我自己問題的答案。

實際上,這是一個簡單的解決方案,一旦我想到它。 Anchor CMS中的各種函數引用(如article_category等)可由用戶通過訪問anchor> functions> articles.php來定義。

在這個文件中,並根據如

function article_category() { 
    if($category = Registry::prop('article', 'category')) { 
     $categories = Registry::get('all_categories'); 

     return $categories[$category]->title; 
    } 
} 

我創建了一個新的功能類別ID現有的其他功能。它看起來像這樣:

function article_category_id() { 
    if($category = Registry::prop('article', 'category')) { 
     $categories = Registry::get('all_categories'); 

     return $categories[$category]->id; 
    } 
} 

,然後在帖子呼應了這一點循環:

<?php echo article_category_id(); ?> 

就這麼簡單!

+0

此解決方案將在下次更新錨的核心時破壞。您不能依賴對通過更新持續存在的非主題文件的更改,因爲這些文件會被更新覆蓋。 您可能編寫的唯一可以避免更新的自定義函數必須位於**主題> [yourtheme]> functions.php **中。 或者,您也可以加入在Github上的項目,並提交您的修改** ** posts.php有你的幫手納入錨代碼庫正確拉請求。 – Evan 2016-12-28 20:35:13