Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

置顶功能不工作 + root cause analysis + word around #705

Closed
habren opened this issue Mar 6, 2016 · 13 comments
Closed

置顶功能不工作 + root cause analysis + word around #705

habren opened this issue Mar 6, 2016 · 13 comments

Comments

@habren
Copy link

habren commented Mar 6, 2016

post.swig line 19 (if page.posts.first().sticky >= 0),只有每一篇的sticky大于或等于0才会优先渲染置顶帖。如果最近一篇Post没有设置sticky,且置顶不工作。另外posts_normal = page.posts.find({sticky: 0}),这会造成未设置sticky的Post不会被渲染。如果将无sticky值的post的sticy值默认设置为0,则这两个问题都不存在。但通过搜索发现,源码中并未设置默认值。
所以希望能加入将sticky值设置为0的代码
word around方法是手动将不需要置顶的post的sticy值设置为0

iissnan added a commit that referenced this issue Mar 6, 2016
@iissnan
Copy link
Owner

iissnan commented Mar 6, 2016

我去除掉了设置 post 默认 sticky 值的 filter,似乎这个跟只渲染一篇文章的 bug 有关联。
设置默认 sticky 的文件是:sticky.js

@habren
Copy link
Author

habren commented Mar 6, 2016

@iissnan 去掉这个默认值设置后,置顶功能无法正常使用,有计划修吗?

@habren
Copy link
Author

habren commented Mar 6, 2016

@iissnan 另外,如果这个文件会导致你说的主页只渲染一篇文章的bug,一定要去掉这个文件,那可以把post.swig line 19的page.posts.first().sticky >= 0去掉,让它进入置顶渲染的逻辑,同时把line 29 set posts_normal = page.posts.find({sticky: 0})修改下,改为sticky为0或者未设置的post放到posts_normal里。这样也能解决置顶的问题

@iissnan
Copy link
Owner

iissnan commented Mar 6, 2016

没有计划做修正,这个功能或许更适合在 Hexo 里做。

@habren
Copy link
Author

habren commented Mar 7, 2016

@iissnan posts_normal = page.posts.find({sticky: 0})的意思是把sticky为0的所有post放在posts_normal里,然后渲染,对于未设置sticky的post就无法渲染。如果把它改成将所有sticky为0或者未设置sticky的post放到posts_normal里,应该就能解决问题。或者更好的办法是放page.posts和posts_sticky求差集,然后给posts_normal。作者认为是否可行?

@iissnan
Copy link
Owner

iissnan commented Mar 7, 2016

应该可以,全部放在模板里面做,过程会有点繁琐。更好的方法即是使用 filter,从数据源上进行处理,模板会比较简单。

@habren
Copy link
Author

habren commented Mar 11, 2016

@iissnan  刚刚试过,改成set posts_normal = page.posts.find({'$not': {sticky: { '$gt': 0 }}}) 就可以了

@iissnan
Copy link
Owner

iissnan commented Mar 11, 2016

@habren 是有 sticky.js filter 的情况下吗? 之前我在本地做测试的时候也并未发现问题

@habren
Copy link
Author

habren commented Mar 12, 2016

@iissnan 是在没有sticky.js的情况下。sticky.js的功能在于把没有设置sticky的post的sticky值设置为0.后面可以通过set posts_normal = page.posts.find({sticky: 0 })找到没有置顶的post集合,并渲染。现在没有sticky.js,可以通过set posts_normal = page.posts.find({'$not': {sticky: { '$gt': 0 }}})来得到未设置sticky或者sticky值为0的post集合

@iissnan
Copy link
Owner

iissnan commented Mar 15, 2016

@habren 很抱歉,置顶的功能我暂时要先排后,如果你有兴趣可以实现并发 PR,谢谢。

habren pushed a commit to habren/hexo-theme-next that referenced this issue Apr 8, 2017
@Jacksgong
Copy link
Contributor

@habren 根据 @iissnan 的建议,我没有再从next主题入手,而是看了 generator.js,最后根据网络上的方法以及自己的理解修改了sticky置顶无效的问题,修改请参看这里,效果请看我博客: https://blog.dreamtobe.cn

@ivan-nginx
Copy link
Collaborator

@habren dont understand u, write in English if not solved. If solved, close it please.

@stevenjoezhang
Copy link
Contributor

Fixed in hexojs/hexo-generator-index#51

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants