パンくずリンク

共有ありがとうございます!警告メッセージなしで動作しています。

別の問題が発生しています。こちらで言及したものです。

その問題について、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をより確実に抽出する方法を使用してください:

  1. 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を取得でき、パンくずリストのカテゴリとパスのルックアップが修正されます。

これを修正していただけますか?
よろしくお願いします :raising_hands: