https://ejopa.discourse.group/ 에 랜딩 페이지 테마 컴포넌트가 있습니다.
잘 동작하고 있습니다. 로그인한 사용자에게는 표시되지 않도록 해야 합니다. 초기화 파일에서 홈 페이지를 설정하는 코드가 다음과 같습니다:
export default apiInitializer((api) => {
const siteSettings = api.container.lookup("service:site-settings");
const topMenu = siteSettings.top_menu || ""; // undefined에 대비
const globalDefaultHomepage = topMenu.split("|")[0].trim();
const currentUser = api.getCurrentUser();
if (currentUser && defaultHomepage() === "custom") {
setDefaultHomepage(globalDefaultHomepage);
}
api.renderInOutlet("custom-homepage", LandingPage);
});
잘 동작하지만, 처음 로그인할 때만 예외가 발생합니다. /custom 로 리디렉션됩니다. 아이콘을 클릭하면 올바른 위치로 이동하지만, 최초 로드 시에는 그렇지 않습니다.
로그인 시 올바른 홈 페이지로 리디렉션하도록 . . . 무언가 . . .를 해야 합니다.
AI가 다음과 같은 것을 제안했지만, 작동하지 않는 것 같습니다.
api.onAppEvent('application:after-login', afterLoginHandler);
수정! 거의 성공했지만, 로그인 후 랜딩 페이지가 잠시 표시됩니다
import { apiInitializer } from "discourse/lib/api";
import { defaultHomepage, setDefaultHomepage } from "discourse/lib/utilities";
import LandingPage from "../components/landing-page";
export default apiInitializer((api) => {
const siteSettings = api.container.lookup("service:site-settings");
const topMenu = siteSettings.top_menu || ""; // undefined에 대비
const globalDefaultHomepage = topMenu.split("|")[0].trim();
const currentUser = api.getCurrentUser();
api.onPageChange((url) => {
const isCustom = url === "/custom";
const router = api.container.lookup("service:router");
const currentUser = api.container.lookup("service:current-user");
if (currentUser && isCustom) {
router.transitionTo("discovery." + defaultHomepage());
}
});
if (currentUser && defaultHomepage() === "custom") {
setDefaultHomepage(globalDefaultHomepage);
}
api.renderInOutlet("custom-homepage", LandingPage);
});
이것이 제가 할 수 있는 최선인 것 같습니다. 제가 잘못 이해하고 있는 건가요?