hexo が v6.3.0 にアップグレードされました
**2022.12.29更新、上下ページに同じカテゴリーしか表示されない問題を解決するため、元々分けていた章をここに統合しました 非常に短いので別記事に分ける必要はありません。 **
ここ数日、記事の更新に集中していたのですが、いつも git に記事を送信して記事を自動生成していたので、 hexo g が強調表示エラーを表示することに気づきました。
主な理由は、生成時に警告を報告するだけで、使用には影響しないためです。今回、テーマのスタイルを調整したいときに発見したため、プラグインをアップグレードする必要があります(1 年近くアップグレードしていませんでした)。私のhexoバージョンはまだ5.4ですが、現在は6.3です)
hexo とプラグインをアップグレードする
ノードと npm をアップグレードする方法はインターネット上にたくさんあります。検索すると見つかります。
- hexo バージョンを確認します:
hexo version - グローバル アップグレード:
npm i hexo-cli -g - hexo ディレクトリに移動します。
- プラグインを確認します:
npm-check - プロンプトに従って手動でアップグレードすることも、
npm-upgrade+npm update --saveで直接アップグレードすることもできます。 - バージョン番号をもう一度チェックして確認します:
hexo version
変更した箇所が上書きされていないか確認してください
アップグレード自体には何も問題はありません。ただ、私はコメントを書くのが好きではないので、いくつかのプラグインを手動で変更し、その後アップグレードによってそれらが上書きされた可能性があります。
私が変更した主なシステム プラグインは 2 つあります。
hexo-generator-index 記事で述べたように、ホームページからいくつかのカテゴリを削除しました。変更しないと、ページ分割されたページにはまだこのカテゴリの記事が含まれており、ページ上の記事の数が正しくなくなります。
hexo-generator-category も変更しましたが、完全に忘れていたため、小説のカテゴリの並べ替えに問題が発生しました。原因を見つけるために git を直接使用して変更し、比較しました。 。
1'use strict';
2
3const pagination = require('hexo-pagination');
4
5module.exports = function(locals) {
6 const config = this.config;
7 const perPage = config.category_generator.per_page;
8 const paginationDir = config.pagination_dir || 'page';
9 var orderBy = config.category_generator.order_by || '-order'; //要用变量var 不要用常量
10
11 return locals.categories.reduce((result, category) => {
12 if (!category.length) return result;
13
14 //当分类为小说novel时,采用手动排序,其他的为默认日期排序,这个order是写在小说md文件的Front-matter里的
15 //用于同一个分类的小说集中展示
16 //然后在小说页面里面再进行日期排序
17 if(category.name == 'novel'){
18 orderBy = config.category_generator.order_by || '-order';
19 }else{
20 orderBy = config.category_generator.order_by || '-date';
21 }
22
23 const posts = category.posts.sort(orderBy);
24 const data = pagination(category.path, posts, {
25 perPage,
26 layout: ['category', 'archive', 'index'],
27 format: paginationDir + '/%d/',
28 data: {
29 category: category.name
30 }
31 });
32
33 return result.concat(data);
34 }, []);
35};
急いでアップグレード プロセスを手動で記録すると、後で忘れてアップグレードする必要がなくなります。最終的な表示効果は非常に優れています。

前ページと次ページのリンクには、同じカテゴリの記事のみが表示されます
私の hexo には、記事のコンテキスト アドレスという問題があります。このアドレスは、システム ページング中またはそれ以前に作成されました。元のロジックには問題ありませんが、エッセイ、経験、小説に基づいたものにしたいと考えています。分類により、3 つの異なるコンテキストに対応するアドレスが生成されます。
つまり、私のWebサイトには3つのcategoriesに属する3つのナビゲーションがあり、記事に入るとフッターにある前後のページのタイトルとリンクが、実はすべての記事でdate順になっているのです。これらは全体的に配置されているため、たとえば、エッセイの次のページをクリックすると、体験共有の記事をクリックすることができますが、ここではこの問題を解決します。
人それぞれテーマが違うので、記事ページに対応する ejs の書き方も違うかもしれません。 説明のための元のコードを載せておきます(見苦しいし、決してベストプラクティスではありませんが、使えます。誰かが見てくれれば。)それを彼は私が最適化したいので、メッセージを残してください(笑))。
jsコードを見やすくするために、ejs構文とhtml構文をコメントアウトしました。
これはpost.ejsファイルに書かれています
1var tmpNext = page.next; //現在のページの次のページオブジェクトを変数に代入します。
2 while(true){ //暴力的なループ
3 if(tmpNext){ //次のページは空ではありません
4 if(page.categories.data[0].name == tmpNext.categories.data[0].name){ //現在のページの最初のカテゴリは次のページのカテゴリと同じです
5 if(page.categories.data[0].name == 'novel'){ //現在のページは小説カテゴリです
6 if(page.categories.data[1].name == tmpNext.categories.data[1].name){ //第二段階分類判定を追加
7 // <a href="<%- url_for(tmpNext.path) %>" target="_self">
8 // <span><%= tmpNext.title %></span>
9 // <i class="iconfont icon-chevronright"></i>
10 // </a>
11 壊す;
12 }それ以外{
13 tmpNext = tmpNext.next; //次の大きな不満を見つける
14 }
15 }それ以外{
16 // <a href="<%- url_for(tmpNext.path) %>" target="_self">
17 // <span><%= tmpNext.title %></span>
18 // <i class="iconfont icon-chevronright"></i>
19 // </a>
20 壊す;
21 }
22 }それ以外{
23 tmpNext = tmpNext.next; //次の大きな不満を見つける
24 }
25 }else{ //次のページは空なのでループを終了します
26 壊す;
27 }
28}
私の書き方が乱暴すぎたためか、ソース コードを使用して説明するのが明確ではありませんでした。簡単に説明します。
- まず次のページがあるかどうかを判断します
- 次に、現在のページと次のページのカテゴリが一致しているかどうかを判断し、一致していない場合は、次の大きな苦情を見つけます。
- 現在のページと次のページが一致する場合、それが小説カテゴリであるかどうかを判断します。一致しない場合は、そのまま小説カテゴリに分類されます。
- 現在のページが小説に分類されている場合、二次分類を決定します (私の小説は二次分類に従ってコレクションに保存されます)。そうでない場合は、次の大きな苦情を見つけます。
- 現在のページは小説カテゴリであり、コレクションに属しているので、これで終わりです
これは私のニーズを完全に満たしています:
- エッセイや体験談ごとに分類された記事はすべて前後のページにリンクされています。
- 小説をコレクションごとに分類し、前後のページをリンクします。
もっと良い書き方があると思いますし、他のトピックにも私と同じニーズがあるはずですが、このトピックが好きなので、他のトピックを勉強するのが面倒です。結局のところ、個人のウェブサイトで最も重要なのはそのコンテンツであり、その機能を満たすことができる場合は、まずそれを使用してください。
