动态获取最新发布的OctoberCMS Blog插件

时间:2019-03-04 05:19:00

标签: php octobercms octobercms-plugins

我在十月的论坛上问了这个问题,但是12个小时后,该帖子仍然显示“未经批准”,而且我认为它不可见。这是一个复制粘贴:

我想做的就是获取最新的博客文章,并将其显示在网站的主页上。目前,我可以使用自己的局部帖子和posts组件注入的blogPosts变量来做到这一点,例如:

[blogPosts]
pageNumber = "{{ :page }}"
postsPerPage = 10
noPostsMessage = "No posts found"
sortOrder = "published_at desc"
categoryPage = "blog/category"
postPage = "blog/post"
==
{% partial 'site/blogpost' post=posts|last %}

但是,我想使用插件随附的默认Blogpost组件来执行此操作,但是将帖子传递给组件的唯一方法似乎是使用url中的子弹,但这并不是真的为主页工作。我该如何实现?

2 个答案:

答案 0 :(得分:1)

可以使用blogPost组件,但是获取最后一个子句并传递给它似乎不是一个好习惯

您要做的是可以使用[blogPosts]组件并在那里进行适当设置以获取最新/最新博客

使其成为可能

enter image description here

每页的帖子: 1 [因为我们只需要最新的帖子]

发布订单: Published(desc) [您可以根据需要进行更改]

现在只需使用适当的标记即可使用默认标记进行渲染,或者仅重写即可对其进行自定义。

  

注意:它将返回帖子列表,但是在列表中将仅按需1 post,因此自定义标记就可以解决。

如有疑问,请发表评论。

答案 1 :(得分:0)

因此,与开发中的大多数事情一样……RTFM。

我需要的所有信息都在October CMS文档的Components部分中,当然,我只在查看插件文档。我最终要做的是用我自己的默认组件部分覆盖,然后将块传递给该组件。我最初想使用默认部分的原因是我的自定义部分不渲染图像,但是默认部分会渲染图像。我只需要窃取<p>{{ post.content_html|raw }}</p>行即可使它正常工作。

[blogPost]
==
...
{% component 'blogPost' slug=posts|last.slug %}

其他信息:使用上述解决方案,您的模板可以提取数据库中的所有博客文章,这意味着如果您有很多文章,则可能(并且很可能会)影响性能。事实证明,十月份的模板有一个PHP部分。正确的做法是删除blogPosts组件并按如下方式获取最新的帖子模型:

[blogPost]
==
<?
  use RainLab\Blog\Models\Post;

  function onStart()
  {
    $this['latestPost'] = Post::latest()->first();
  }
?>
==
{% component 'blogPost' slug=latestPost.slug %} 

注意:blogPost组件注入一个post变量,它将覆盖PHP部分中定义的post变量。这样就是将变量标记为latestPost的方式。