Php 动态抓取最新的PostOctorberCMS博客插件

Php 动态抓取最新的PostOctorberCMS博客插件,php,octobercms,octobercms-plugins,Php,Octobercms,Octobercms Plugins,我在10月份的论坛上问过这个问题,但12小时后,帖子上仍然写着“未经批准”,我不相信它是可见的。这里有一个复制粘贴: 我想做的是抓取最新的博客文章,并将其显示在网站主页上。我现在可以使用我自己的post partial和blogPosts组件注入的posts变量来完成这项工作,如下所示: [blogPosts] pageNumber = "{{ :page }}" postsPerPage = 10 noPostsMessage = "No posts found" sortOrder = "p

我在10月份的论坛上问过这个问题,但12小时后,帖子上仍然写着“未经批准”,我不相信它是可见的。这里有一个复制粘贴:

我想做的是抓取最新的博客文章,并将其显示在网站主页上。我现在可以使用我自己的post partial和
blogPosts
组件注入的
posts
变量来完成这项工作,如下所示:

[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中的slug,这对于主页来说并不起作用。我怎样才能做到这一点呢?

所以,当涉及到开发时,就像大多数事情一样。。。RTFM

我需要的所有信息都在10月份的CMS文档部分,当然我只是在看插件文档。我最终做的是用我自己的部分覆盖默认组件,然后将slug传递给该组件。我想使用默认部分的最初原因是,我的自定义部分没有渲染图像,但默认部分会。我只需要偷行
{{post.content|html|raw}

就可以了

[blogPost]
==
...
{% component 'blogPost' slug=posts|last.slug %}
其他信息:使用上述解决方案,您的模板会提取数据库中的所有博客帖子,这意味着如果您有大量帖子,这可能(而且很可能)会影响性能。事实证明,10月份的模板有一个PHP部分。正确的做法是删除
blogPosts
组件并获取最新的post模型,如下所示:

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

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

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

的方式。可以使用blogPost组件,但获取最后一个post slug并传递给它似乎不是一种好的做法

您可以使用
[blogPosts]
组件并在那里设置适当的设置,以获取最新/最后一个博客

使之成为可能

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

邮购:
已发布(desc)
[您可以根据需要进行更改]

现在,只需使用适当的标记来呈现它,使用默认值或只需覆盖来定制它

注意:它将返回帖子列表,但在列表中,根据需要只有
1篇帖子
,因此对于自定义标记,请注意这一点


如果有任何疑问,请发表评论。

很高兴知道这一点。昨晚在实施我的解决方案后,我在想,当我有100篇博文时,性能会发生什么变化?用我当前的实现,我只需要为一篇博文拉取整个数据库。所以我尝试了这个,使用blogPosts组件,它仍然拉取整个博客列表。当您将“每页文章数”设置为“1”时,会发生的情况是,它对列表进行分页,在每页上只放置一个列表。因此,在组件的首页上,我有一篇博文,然后是我不想要的下一页(1、2、3、4)的链接列表。幼虫分页使用
limit
,因此它在您的情况下只获取给定的记录单个记录,但为记录计数触发额外的查询,您需要使用该组件,因此这是最简单的方法,如果有100篇文章,它将只获取其中的1篇,并对总计数进行另一个查询,要删除链接,您需要展开并在页面[override it]中使用标记