크럼브 링크

공유해 주셔서 감사합니다! 이제 경고 메시지가 없이 잘 작동합니다.

여기서 언급했던 다른 문제가 하나 더 있습니다:

이 문제에 대해 ChatGPT에게 물어보았는데 (저는 개발자가 아니므로) 다음과 같이 답변했습니다:

ChatGPT 메시지 보기

이 문제는 URL에서 topicId를 추출하는 방식에서 비롯된 것일 가능성이 높습니다:

const topicId = url.split('/')[2];

URL에 더 복잡한 패턴(공백, 특수 문자, 비표준 슬러그가 포함된 제목 등)이 포함된 경우, 이 단순한 split 메서드는 올바른 토픽 ID를 신뢰할 수 있게 가져올 수 없습니다.


왜 문제가 되는가:

  • /t/3ple-2015-2019-title/12345와 같은 URL은 숫자 토픽 ID가 마지막에 위치하지만, 현재 코드는 토픽 ID가 항상 세 번째 세그먼트라고 가정하고 있습니다.
  • 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: