‘자동으로 올라간’ 메시지를 한 번에 모두 삭제할 수 있나요?

게시 전 검색함:
‘Auto Bumping the topics’ 기능으로 주제들이 계속 갱신되는 것을 좋아합니다. 하지만 방문자가 주제에 접속했을 때 수십 개의 ‘Automatically Bumped’ 메시지가 표시되는 것은 피하고 싶습니다.

이러한 메시지를 수동 또는 자동으로(또는 둘 다) 가끔씩 삭제할 수 있는 방법이 있을까요?

이렇게 묻는 이유는 제 수준에서는 제가 원하는 기능이 대부분 이미 구현되어 있는 경우가 많기 때문입니다.

안녕하세요 @Bathinda님!
다른 게시물처럼 삭제 아이콘을 직접 클릭하면 됩니다:

감사합니다만, 여러 주제에 있는 수백 개의 범핑(bumping) 메시지를 삭제하는 데 실용적인 방법은 아닙니다.

게다가 하나의 주제에서도 ‘범핑’ 메시지를 모두 선택할 수조차 없었습니다.

이러한 일괄 작업을 위한 내장 기능이 없습니다.

기존의 자동 범프(auto bump) 메시지를 삭제하기 위해 rails 스크립트를 사용할 수 있습니다. 예를 들어 다음과 같이요:

  1. 서버에 SSH로 로그인합니다

  2. cd /var/discourse

  3. ./launcher enter app

  4. rails c

  5. Post.where("action_code = 'autobumped'").destroy_all

:warning: 물론, 만에 하나를 대비해 먼저 백업을 꼭 수행하세요.

충분합니다.
감사합니다.

‘destroy (삭제)’ 명령을 내리기 전에 해당 메시지들을 먼저 목록으로 확인해 볼 수 있는 명령이 있나요?

가장 좋은 방법은 Discourse 인터페이스에서 Data Explorer를 사용하는 것입니다:

다음 쿼리를 사용하세요:

SELECT * from posts
WHERE action_code = 'autobumped'

아!! 그게 바로 제가 원했던 쿼리네요. 정말 기쁩니다. 다시 한번 감사합니다.

제시된 쿼리는 모든 토픽 중 ‘auto-bumped’ 메시지가 포함된 토픽들을 표시해 주기는 하지만, 실제로는 큰 도움이 되지 않았습니다.


수천 개의 ‘Auto-Bumped’ 메시지가 포함된 수백 개의 토픽을 반환할 뿐, 그런 메시지가 몇 개의 토픽에 얼마나 존재하는지는 알려주지 않습니다.

결국, 저는 rails 콘솔이라는 '어두운 방’에서 도끼를 휘두를 수밖에 없을 것 같습니다(조금 무섭기도 하네요).

한 번에 수천 개의 토픽/게시물에 영향을 미칠 것이기 때문에 조금 걱정됩니다. 토픽 내부에 select all 버튼이 있어 모든 bumping 메시지를 한꺼번에 선택할 수 있고, 어떤 토픽에서든 한 번의 클릭으로 그 메시지를 삭제할 수 있다면 좋겠습니다. 그리고 만약 누군가가 All Topics에서 all such msgs를 one command만으로 삭제하고 싶다면, 'rails’를 입력해야 합니다.

불평하는 것이 아닙니다. 그냥 제 생각을 표현하는 것입니다.

말씀해 주신 rails 명령문의 5번째 줄을 실행할 때, 해당 게시글들을 모두 삭제하기 전에 어떤 내용도 확인하거나 프롬프트를 띄울까요? 아니면 경고나 복구 기회 없이 지시받은 대로 바로 실행할까요?

가능하다면, 전체 웹사이트에서 삭제하는 대신 특정 토픽의 'bumping msgs’만 먼저 삭제할 수 있을까요?

그리고 삭제하려는 게시글들의 샘플을 확인하기 위한 rails 명령문도 추천해 주실 수 있을까요?

감사합니다.

데이터 탐색기에서 다음과 같은 쿼리를 실행하면 전체적인 개요를 파악하는 데 도움이 될 수 있습니다:


SELECT p.topic_id,
       COUNT(p.id) AS count
FROM posts p
WHERE action_code = 'autobumped'
GROUP BY p.topic_id
ORDER BY count DESC

다만, 레일즈(rails) 콘솔을 사용하여 운영 중인 사이트에서 이러한 변경 사항을 수행할 때 경험 부족으로 인해 문제가 발생할 수 있으니 주의하시기 바랍니다. 직접 작업에 들어가기 전에 테스트 사이트를 만들어 연습해 보는 것을 권장합니다. :+1:

네, 디자이너/개발자들이 제시한 범위 내에서 문제를 해결해 주었습니다.

하지만 여전히 관리자 설정이나 현재 보고 있는 토픽 내에 ‘관리자’ 명령어를 추가해야 한다고 생각합니다. 이를 통해 원하는 시점에 특정 토픽이나 모든 토픽에서 '중복 (자동 올림) 메시지’를 모두 선택하여 삭제할 수 있도록 하면 좋겠습니다.

CSS로 해당 메시지를 숨기는 방법은 어떨까요? 불행히도 post-small-action 위젯에는 현재 액션 유형이 CSS 클래스로 포함되어 있지 않아서, bump 메시지를 특정하여 타겟팅할 수 없습니다. 테마 구성 요소를 활용하면 도움이 될 수도 있습니다.

네, 데이터 탐색기 솔루션을 제안하기 전에 확인해 봤습니다.
작은 액션에 특정 클래스를 추가하는 것은 좋은 Contribute > Feature 제안이 될 수 있습니다.

뭔가 제안해 주실 수 있나요?
컴포넌트에 그대로 복사해서 붙여넣을 수 있습니다. 코딩을 잘 모르거든요.

플러그인 API에 대해 많이 해본 적은 없지만, 작은 동작 게시물에 클래스를 추가할 수 있는 메서드가 있다는 것을 확인했습니다:

그래서 테마 컴포넌트를 만들어 Head 섹션에 다음을 포함시켰습니다:

<script type="text/discourse-plugin" version="1.6.0">
  api.addPostSmallActionClassesCallback(post => {
    return ["small-action-" + post.actionCode]
  });
</script>

그리고 CSS 섹션에는 다음을 추가했습니다:

.small-action.small-action-autobumped {
  display: none;
}

…그리고 자동 올림 메시지가 사라졌습니다!

다른 테스트는 하지 않았기 때문에 다른 부수 효과가 있을지는 알 수 없습니다. small-action-[...] 클래스가 애플리케이션의 다른 곳에서 충돌할 가능성이 있으므로, 그 경우 고유성이 보장되는 접두사를 선택해야 합니다.

addPostSmallActionClassesCallback 메서드는 지난 달에 추가된 것이므로, 상당히 최신 버전의 Discourse를 사용해야 합니다:

감사합니다.
마지막 문장인 그 경우, 고유성이 보장된 접두사를 선택해야 합니다.에 대해 좀 더 자세히 설명해 주시겠어요?

예를 들어, bathinda- 접두사를 사용할 수 있습니다. 이 접두사는 현재나 미래에 Discourse의 다른 요소와 충돌하지 않는 것이 보장됩니다. 다음과 같은 형태가 될 것입니다:

Head:

<script type="text/discourse-plugin" version="1.6.0">
  api.addPostSmallActionClassesCallback(post => {
    return ["bathinda-" + post.actionCode]
  });
</script>

CSS:

.small-action.bathinda-autobumped {
  display: none;
}

@simonk

다시 한번 감사드립니다. 컴포넌트를 성공적으로 생성하여 사용/활성화했습니다.
다만 ‘자동으로 올라온’ 메시지를 숨긴 후, 다음과 같은 모습이 됩니다.

조금 ‘좋아 보이지는’ 않지만, 다른 대안이나 아무것도 없는 것보다는 낫습니다.

아, 그렇군요. 숨겨지지 않은 시간 간격 메시지 때문이군요. CSS로는 이전 요소를 지정할 수 없기 때문에 까다로운 문제입니다.