مرحبًا، قمتُ بتخصيص مظهر Discourse الخاص بي في حقل “custom ” الخاص بالموضوع.
أستخدم | script type="text/x-handlebars" data-template-name="components/categories-only" |
ومثيلاتها لتجاوز بعض القوالب المحددة، هل توجد طريقة لتجاوزها فقط في صفحات معينة مثل الصفحة الرئيسية واستخدام كود مختلف في عرض الفئات الفرعية مثلًا؟ لا يزال لديّ معرفة محدودة بـ Discourse، لستُ متأكدًا حتى مما إذا كانت هذه هي الطريقة الصحيحة للقيام بذلك في HTML/CSS المخصص للموضوعات (أعلم أنني أفقدها عند التحديث). إذا أمكن لأي شخص مساعدتي في ذلك، فسأكون ممتنًا جدًا.
لنوضح هذه النقطة أولاً
هذا غير صحيح، فلا تفقد تعديلاتك عند التحديث إذا تم إجراؤها ضمن موضوع. فهي تظل محفوظة. الطريقة الوحيدة التي تفقد فيها تعديلاتك هي إذا قمت بتعديل الملفات مباشرة على الخادم الخاص بك، وهو ما لا يجب عليك فعله بالطبع.
الآن، هناك قدر معين من المخاطر ينطوي عليه تجاوز القوالب، حيث قد يعني تحديث في النواة أن تعديلاتك لم تعد متوافقة وستحتاج إلى تحديث. إذا كنت مرتاحًا لتلك المخاطر، فيمكنك تقنيًا تحقيق ما تطلبه هنا.
للبداية، تحتاج إلى وسيلة لتمييز متى يكون المستخدم في الصفحة الرئيسية. في حالة مكون “فقط الفئات”، إحدى الطرق هي التحقق من searchContext. عندما تكون في صفحة فرعية لفئة، يتم تعيين سياق البحث إلى “category”. إذا لم يكن هناك سياق بحث، فهذا يعني أنك في الصفحة الرئيسية.
الطريقة لنقل ذلك إلى قالبك هي بإضافة شيء مثل هذا
<script type="text/discourse-plugin"
version="0.8">
const categoriesOnlyComponent = require('discourse/components/categories-only').default;
categoriesOnlyComponent.reopen({
isHomepage: function() {
return !this.parentView.searchService.contextType
}.property()
});
</script>
وما يفعله هذا الكود هو تمكينك من استخدام isHomepage في قالب categories-only. فهو يُرجع true إذا لم يكن هناك سياق بحث، مما يعني أنك في الصفحة الرئيسية. وإلا، يُرجع false.
بعد ذلك، تحتاج إلى نسخ القالب الافتراضي كما يلي
<script type='text/x-handlebars'
data-template-name='components/categories-only'>
{{#if categories}}
... بقية القالب
{{/if}}
</script>
واستخدام isHomepage الذي أضفناه. ولأجل ذلك، تحتاج إلى استخدام مساعد {{#if}} في هاندلبارز. ببساطة، ما تحتاجه هو شيء مثل هذا
<script type='text/x-handlebars'
data-template-name='components/categories-only'>
{{#if categories}}
{{#if isHomepage}}
... قالب مخصص للصفحة الرئيسية فقط
{{else}}
... بقية القالب الافتراضي إذا لم تكن في الصفحة الرئيسية
{{/if}}
</script>
الآن يمكنك استخدام أي شيء تريده في قسم isHomepage. يمكنك تحريره هناك مباشرة أو إنشاء قالب جديد لهذا القسم كما يلي
<script type='text/x-handlebars'
data-template-name='components/categories-only-homepage'>
<h1>أنت في الصفحة الرئيسية!</h1>
<p>
استخدم هذا القسم لعرض قالب مكون "فقط الفئات" إذا كان المستخدم في الصفحة الرئيسية.
</p>
</script>
آخر ما تحتاج إلى فعله هو استدعاء هذا القالب كجزء (partial) في قالب categories-only داخل قسم isHomepage كما يلي
<script type='text/x-handlebars'
data-template-name='components/categories-only'>
{{#if categories}}
{{#if isHomepage}}
{{partial 'components/categories-only-homepage'}}
{{else}}
... بقية القالب الافتراضي إذا لم تكن في الصفحة الرئيسية
{{/if}}
</script>
النتيجة هي أنه عند زيارة الصفحة الرئيسية، ستظهر لك هذه
ولكن المكون في الصفحات الفرعية للفئات يجب أن يبقى دون تغيير.
هذا اختياري، ولكن قد يكون من المفيد أيضًا الاطلاع على
لأنه يمثل الطريقة الجديدة الموصى بها للعمل على الموضوعات وتجنب استخدام وسوم السكربت.
رائع، شكرًا جزيلاً! الآن أفهم أيضًا نوعًا ما كيفية استخدام text/discourse-plugin. أقدر ذلك كثيرًا!
مرحبًا، أود طرح سؤال آخر.
هل يمكنك إخباري بكيفية الحصول على أحدث موضوع في فئات فرعية محددة؟ يمكنني استخدام category.latestTopic للحصول على أحدث موضوع في فئة ما، لكن لا يمكنني استخدامه للفئات الفرعية. هل توجد طريقة ذكية للتغلب على هذه المشكلة؟ أود عرض أحدث موضوع في الفئة الفرعية عند سرد الفئات الفرعية.


