0

我在 Anchor CMS 主题中有一个普通的帖子页面。帖子列表旁边是一个类别列表,我打算将其用作博客帖子的排序过滤器。根据 Anchor Docs 输出的类别列表如下:

 <?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; ?>

请注意,文章类 category-[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?

4

1 回答 1

2

好的,找到了我自己的问题的答案。

这实际上是一个简单的解决方案,一旦我想到它。用户可以通过访问anchor > functions >articles.php来定义 Anchor CMS 中的各种函数引用,例如 article_category 等。

在此文件中,并基于现有功能,例如

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(); ?>

就那么简单!

于 2014-10-01T09:00:25.023 回答