prinsss / hexo-hide-posts

A plugin to hide specific posts from your Hexo blog and make them only accessible by links. (隐藏 Hexo 文章)
MIT License
197 stars 19 forks source link

public_generators为archive时数据不对 #20

Closed wonter closed 1 year ago

wonter commented 4 years ago

配置public_generators: [archive]时虽然归档页面可以展示隐藏文章了,但归档页面的计数没有计上

image

这里的目前共计 13 篇日志应该是没计算上隐藏文章的, 但个人理解如果希望在archive里展示的话,计数器也应该计算上隐藏文章才合理?

prinsss commented 4 years ago

用的是什么主题?

wonter commented 4 years ago

@printempw hexo-next

prinsss commented 4 years ago

是因为主题使用了 site.posts.length 获取文章数量,而本插件只对 page.posts 做了注入。你可以先尝试把主题这个位置的 site.posts.length 替换为 page.posts.length,应该可以解决

https://github.com/theme-next/hexo-theme-next/blob/d24c48efb1ff1182b23926a3835e350f9c3ab6eb/layout/archive.swig#L17

wonter commented 4 years ago

@printempw 似乎不行,只改第一个site.posts.length没有效果,再把第二个site.posts.length也改了就变成10了,改动:

diff --git a/layout/archive.njk b/layout/archive.njk
index 76e1a14..df87d36 100644
--- a/layout/archive.njk
+++ b/layout/archive.njk
@@ -14,7 +14,7 @@
   <div class="post-block">
     <div class="post-content">
       <div class="collection-title">
-        {%- set posts_length = site.posts.length %}
+        {%- set posts_length = page.posts.length %}
         {%- if posts_length > 210 %}
           {%- set cheers = 'excellent' %}
         {% elif posts_length > 130 %}
@@ -28,7 +28,7 @@
         {% else %}
           {%- set cheers = 'um' %}
         {%- endif %}
-        <span class="collection-header">{{ __('cheers.' + cheers) }}! {{ _p('counter.archive_posts', site.posts.length) }} {{ __('keep_on') }}</span>
+        <span class="collection-header">{{ __('cheers.' + cheers) }}! {{ _p('counter.archive_posts', page.posts.length) }} {{ __('keep_on') }}</span>
       </div>

       {{ post_template.render(page.posts) }}
(END)

image

prinsss commented 4 years ago

那奇怪了,同样是用的 page.posts,隐藏文章可以正常显示,但是 length 却不对吗?

JuWuhe commented 3 years ago

第一个site是用于显示评价

嗯..! 目前共计x篇日志。 继续努力

。第二个site修改为page.posts.length只能统计当前页的个数,而不能统计全部文章个数,因为当前页只有10个所以显示为10篇,切换到另一页则显示另一个数字了。

JuWuhe commented 3 years ago

一个不咋地的解决方案:将归档页和index的分页策略不同管理,将归档页设置为不分页 参考链接:如何设置

prinsss commented 3 years ago

我看了一下,其实还有一种方法,就是在主题渲染的时候把传递给模板的 site.posts 修改为包括隐藏文章在内的所有文章。因为基本上主题都是使用 page.posts 来获取文章列表的,所以理论上不会有什么影响……(这样就不需要修改主题文件了)

想要尝试的话可以在博客根目录下的 scripts 文件夹中新建 test.js 文件,然后把以下内容粘贴进去:

const chalk = require('chalk')

// Expose all posts to these pages as variable `site.posts`
// const public_pages = ['archive', 'tag']

hexo.extend.filter.register('template_locals', function (locals) {
  const all_posts = locals.site.all_posts

  if (!all_posts) {
    hexo.log.debug('failed to get all_posts, is hexo-hide-posts enabled?')
    return
  }

  // if (!public_pages.some(pattern => locals.path.includes(pattern))) {
  //   hexo.log.debug('page does not match, skip')
  //   return
  // }

  locals.site.posts = locals.site.all_posts
  hexo.log.debug('current page is ' + chalk.magenta(locals.path))
  hexo.log.debug('set site.posts to all_posts, length is ' + all_posts.length)

  return locals
})

如果没问题的话后续可以更新到插件里。

inkss commented 2 years ago

我看了一下,其实还有一种方法,就是在主题渲染的时候把传递给模板的 site.posts 修改为包括隐藏文章在内的所有文章。因为基本上主题都是使用 page.posts 来获取文章列表的,所以理论上不会有什么影响……(这样就不需要修改主题文件了)

想要尝试的话可以在博客根目录下的 scripts 文件夹中新建 test.js 文件,然后把以下内容粘贴进去

可以 👻

hoey94 commented 1 year ago

想自定义一个不想使用public_generators: [archive]要怎么做?比如我想使用public_generators: [hidden]

prinsss commented 1 year ago

想自定义一个不想使用public_generators: [archive]要怎么做?比如我想使用public_generators: [hidden]

@hoey94 我没有理解你的问题,可以描述得更清晰一些吗?public_generators 里的内容要根据实际的 hexo generator 注册名称来填写。

prinsss commented 1 year ago

Hello 各位,

hexo-hide-posts 插件已经更新至 0.3.0,支持了更精细的 generator 黑白名单控制

我将关闭这个 issue,如果新版本有任何问题,欢迎新开 issue 继续反馈。:)