정보 페이지 테마 구성 요소에서 관리자 숨기기 조언 – 속도가 느려지나요?

제가 관리하는 사이트들의 소개 페이지에서 제 사용자 프로필을 제거하고 싶습니다. 저는 여러분의 계정을 삭제하거나 다른 조치를 취하는 사람이 아닙니다.

한 가지 방법은 다음과 같습니다:

하지만 요즘은 플러그인이 좀 무겁게 느껴져서, 이 문제를 해결하는 테마 컴포넌트를 만들었습니다:

import { withPluginApi } from "discourse/lib/plugin-api";

const hidden_admins = settings.hidden_admins.split("|");
const PLUGIN_ID = "hide-admins";

export default {
  name: "theme-javascript-initializer",
  initialize() {
    withPluginApi("0.8.30", (api) => {
      api.onPageChange((url) => {
        if (url != "/about") {
          return;
        }
        for (const admin of hidden_admins) {
          var element = document.querySelector(`[data-username=${admin}]`);
          if (element === null) {
            break;
          }
          element.classList.add("hide-me");
        }
      });
    });
  },
};

이 방식이 어떤 이유로 멍청한 선택일까요? onPageChange가 매우 큰 성능 비용을 발생시키나요? 플러그인은 소개 페이지 직렬화기(serializer)에만 영향을 주지만, 이 방식은 모든 페이지 변경 시마다 검사를 수행합니다. 이것이 나쁜가요?

최근에 이 문제에 대해 사용자를 CSS에 하드코딩한 토픽이 있었습니다. 다음과 같이 소개 페이지에만 적용되는 단일 CSS를 테마에 넣는 것이 더 나을까요?

.about-page div[data-username="pfaffman"] {
  display: none !important;
}

이것은 저를 제외하고는 누구에게도 유용하지 않을 것이기 때문에, 저는 이 테마 컴포넌트 아이디어를 어느 정도 선호합니다.

즉, “about” 페이지를 제외한 모든 페이지 전환 시 약 두 줄의 추가 자바스크립트를 처리하는 것이군요?

Discourse에서 항상 실행되는 자바스크립트의 양이 엄청나므로, 저는 그것이 나쁘다고 생각하지 않습니다 :slight_smile:

대충 그렇게 생각했는데, 확인해 주셔서 정말 감사합니다. 이걸 좀 더 예쁘게 다듬어서 공개하고, 일부 사이트에 자동으로 추가하는 도구를 만들 계획입니다.

정말 감사합니다.

제이, 이건 설치할 플러그인인가요, 아니면 테마 컴포넌트인가요?

일부 사용 사례를 위해 기능을 확장하여 모드(Mod)에도 적용할 수 있다면 유용할 것 같습니다.

이것은 테마 컴포넌트입니다. 아직 조금 더 다듬고 있는 중입니다. 곧 적절한 테마 페이지를 만들 예정이지만, 궁금하시다면 GitHub - literatecomputing/discourse-hide-admins-about: Theme component to hide some admin users from about page · GitHub 에서 미리 확인해 보실 수 있습니다.

정말 멋지네요. 다만, 공식 출시를 기다리는 편이 더 나을 것 같습니다.