حسنًا، من خلال دراسة الكود الخاص بـ plugins/discourse-subscriptions، تمكنت تقريبًا من تحقيق التأثير الذي أريده.
الوصول إلى /q/hello يعرض محتوى القالب المخصص ويجلب بيانات الواجهة الخلفية المخصصة.
فيما يلي الخطوات التي اتبعتها:
إنشاء ملف تعيين المسار الجديد plugins/quectel/assets/javascripts/discourse/quectel-route-map.js
export default function quectel() {
this.route("q/hello"); // المسار الافتراضي هو /q/hello
};
إنشاء ملف المسار 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') // طلب واجهة الواجهة الخلفية لجلب البيانات
}
}
إنشاء ملف القالب الأمامي 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>
إنشاء ملف وحدة تحكم الواجهة الخلفية 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
تعريف مسار الواجهة الخلفية 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" }