共有ありがとうございます!警告メッセージなしで動作しています。
別の問題が発生しています。こちらで言及したものです。
その問題について、ChatGPTに尋ねたところ、次のような回答がありました(私は開発者ではないため):
ChatGPTのメッセージを表示
URLからtopicIdを抽出する方法に問題がある可能性があります。
const topicId = url.split('/')[2];
URLに、タイトルにスペースや特殊文字が含まれる場合、または標準的でないスラッグが含まれる場合など、より複雑なパターンが含まれていると、この単純な分割では正しいトピックIDを確実に取得できません。
これが問題を引き起こす理由:
/t/3ple-2015-2019-title/12345のようなURLでは、数値のトピックIDは末尾にありますが、コードはトピックIDが常に3番目のセグメントであると想定しています。- URL構造が異なる場合、スラッグやタイトルの部分を取得してしまい、IDではない場合があります。
- これにより、AJAXリクエスト(
/t/${topicId}.json)が失敗します。無効なトピックIDまたはスラッグを送信している可能性があり、正しくない、またはデフォルトのカテゴリ情報(「General」など)が返されます。
修正方法:
URLからトピックIDをより確実に抽出する方法を使用してください:
- URLの最後の数値セグメントからトピックIDを抽出する。
DiscourseのトピックURLは、多くの場合 /t/{slug}/{id} のようになります。例:
/t/3ple-2015-2019-title/12345
ここで、12345 がトピックIDです。
これを置き換えてください:
const topicId = url.split('/')[2];
これに置き換えてください:
const segments = url.split('/').filter(Boolean);
const topicId = segments[segments.length - 1]; // 最後のセグメント、数値IDであることが期待される
より安全にするために、topicId が数値であることを検証してください:
if (!/^\\d+$/.test(topicId)) {
console.error("URLから抽出されたトピックIDが無効です:", topicId);
return; // 実行を停止
}
要約:updateBreadcrumbs のコードスニペットを次のように更新してください:
if (url.includes('/t/')) {
const segments = url.split('/').filter(Boolean);
const topicId = segments[segments.length - 1];
if (!/^\\d+$/.test(topicId)) {
console.error("URLから抽出されたトピックIDが無効です:", topicId);
return;
}
// その後、topicIdを使用してAJAX呼び出しを続行します
}
これにより、URLに複雑なタイトルやスペースが含まれていても、常に数値のトピックIDを取得でき、パンくずリストのカテゴリとパスのルックアップが修正されます。
これを修正していただけますか?
よろしくお願いします ![]()