플러그인에서 라우트를 커스터마이즈하고 커스텀 페이지를 렌더링하는 방법?

플러그인에서 라우트를 커스터마이즈하고 커스텀 페이지를 렌더링하는 방법이 무엇인가요?

이 게시물: Discourse 플러그인 개발 - 5부 - 관리자 인터페이스 추가 - 문서 / 개발자 가이드 - Discourse Meta 및 다른 플러그인들을 참고했지만, 모두 실패했습니다.

커스터마이즈한 라우트들은 모두 JSON 데이터를 반환하는데, 저는 Ember 템플릿을 렌더링하고 싶습니다. 이 주제를 설명하는 게시물이 있을까요? 감사합니다.

그것이 전부라면 다음을 확인해 보세요:

그리고:

현재 여기서 막혀 있습니다. 구체적인 단계는 다음과 같습니다:

plugins/q/config/routes.rb 파일에서 라우트를 정의했습니다:

get “/hello” => “examples#hello”

컨트롤러: plugins/q/app/controllers/quectel/examples_controller.rb

def hello
   render json: { hello: "world" }
end

이제 localhost:4200/q/hello에 접근하면 JSON이 반환됩니다.

{"hello":"world"}

localhost:4200/q/hello에 접근할 때 Ember 템플릿을 렌더링하려면 어떻게 해야 하나요?

일전에 나중에 읽으려고 이 주제를 북마크해 두었습니다: Creating Routes in Discourse and Showing Data. 최신 정보가 맞지는 않을 수 있지만, 그래도 도움이 될 수도 있겠네요.

네, 이 게시물도 확인했고, 위의 단계대로 설치해 보았지만 작동하지 않았습니다. “페이지를 찾을 수 없습니다”라는 오류가 발생했습니다. 그래서 막막해졌습니다.

음, plugins/discourse-subscriptions 코드를 연구하면서 원하는 효과를 대략 구현했습니다.

/q/hello를 방문하면 사용자 정의 템플릿 내용이 표시되고, 사용자 정의 백엔드 데이터를 가져옵니다.

아래는 제 단계입니다:

  1. 경로 매핑 파일 plugins/quectel/assets/javascripts/discourse/quectel-route-map.js 생성
export default function quectel() {
  this.route("q/hello"); // 라우트 기본값은 /q/hello
};
  1. 라우트 파일 plugins/quectel/assets/javascripts/discourse/routes/q/hello.js 생성
import Route from "@ember/routing/route";
import { ajax } from "discourse/lib/ajax";

export default class HelloRoute extends Route {
  model() {
    return ajax('/q/hello') // 백엔드 API를 요청하여 데이터를 가져옵니다
  }
}
  1. 프론트엔드 템플릿 파일 plugins/quectel/assets/javascripts/discourse/templates/q/hello.gjs 생성 및 데이터 렌더링
import QHello from '../../components/q-hello'

<template>
  <h1>q-hello</h1>
  {{!-- 컴포넌트 렌더링 --}}
  <QHello />
  {{!-- 모델 데이터 렌더링 --}}
  <div>{{@model.hello}}</div>
</template>
  1. 백엔드 컨트롤러 파일 plugins/quectel/app/controllers/quectel/examples_controller.rb 생성
# frozen_string_literal: true

module ::Quectel
  class ExamplesController < ::ApplicationController
    requires_plugin PLUGIN_NAME

    def hello
      render json: { hello: "hello 2333" }
    end
  end
end
  1. 백엔드 라우트 정의 plugins/quectel/config/routes.rb
# frozen_string_literal: true

Quectel::Engine.routes.draw do
  get "/hello" => "examples#hello"
end

Discourse::Application.routes.draw { mount ::Quectel::Engine, at: "q" }

/q/hello를 방문하면 다음과 같은 화면이 표시됩니다: