محتوى خاص في منشور عام؟

هل هناك أي طريقة لجعل المحتوى داخل منشور متاحًا فقط للمستخدمين المسجلين؟

حالة الاستخدام التي أفكر فيها هي منشورات الأحداث الافتراضية. لدينا الكثير من مجموعات العمل في مجتمعنا التي تجتمع افتراضيًا. نود أن نعلم الزوار العاديين بوجود المجموعات والاجتماعات - ومتى تحدث - ولكننا لا نريد نشر روابط Zoom علنًا.

إعجاب واحد (1)

مرحباً مارتي!

الهمسات تفعل ذلك نوعًا ما: Creating a whisper post

:information_source: لا يمكن “إلغاء همس” منشورات الهمس بعد نشرها، ولكن يمكن ذلك باستخدام مكون السمة هذا: Toggle Whisper 👁

إعجابَين (2)

شكرا لك. هذا قريب. الشيء المثالي سيكون طريقة لتنسيق المحتوى داخل منشور بحيث يظهر باقي المنشور للجميع وتظهر رسالة مثل “الرابط متاح فقط للمستخدمين المسجلين” إذا لم تكن مسجلاً، ولكن يبدو أن الهمسات ستعمل بشكل جيد في الوقت الحالي.

مسؤول مبتدئ هنا، لذا ما زلت أحاول العثور على طريقي حول كل الوظائف.

إعجابَين (2)

لا أعرف الكثير عن تعديلات Discourse، ولكن هذا يبدو صعبًا بعض الشيء وسيتطلب إضافة إذا كنت لا تريد أن يتم التحايل عليه من قبل شخص يعرف كيفية تعديل التعليمات البرمجية من جانب العميل.

إعجاب واحد (1)

لقد قمت بتطوير مكون سمة يسمح بإخفاء المشاركات على الواجهة الأمامية من المستخدمين غير المسجلين. بالطبع، إذا كان هناك أشخاص ذوو خبرة تطوير غنية، فيمكنهم الحصول عليها بسهولة مباشرة من الواجهة الخلفية.

لم أقم بتعبئة هذا المكون بعد، لذا يرجى استخدام الكود أدناه مباشرة.

علامة الرأس:


const user = api.getCurrentUser();

const I18n = require("I18n");

const pid = "post_hider"

const tl4_css = `
.d-editor-preview [data-theme-hide] {
  background: var(--tertiary);
  color: var(--secondary);
  border-top: 2px solid var(--secondary);
  position: sticky;
  top: 0;
  height: 30px;
  display: flex;
  align-items: center;
  justify-content: center;
}
.d-editor-preview [data-theme-hide]::before {
  content: "This post is hidden";
}
`

api.addPostClassesCallback((attrs) => {
if (attrs?.cooked?.includes(`<div> data-theme-hide="true">`)) {
  return ["lycoris-hiddened"];
} else {
  return [];
}
});

if (!user) {
    api.decorateCookedElement((el, helper) => {
        function hide_post() {
            setTimeout(() => {
                try {
                    document.querySelector(`[data-post-id="${helper?.widget?.attrs?.id}"]`)?.parentElement?.remove();
                } catch (err) {
                    console.log(el);
                    console.log(err);
                }
            }, 1000);
        }
        if (el?.querySelector(`[data-theme-hide="true"]`)) {
            el.innerHTML = `<p>This post is hidden</p>`;
            hide_post();
        }
    }, {
        id: pid,
        afterAdopt: true,
        onlyStream: true,
    });
} else if (user?.trust_level == 4) {
    const s = document.createElement("style");
    s.innerHTML = tl4_css;
    document.body.appendChild(s);
    api.decorateCookedElement((el, helper) => {
        if (el?.querySelector(`[data-theme-hide="true"]`)) {
            el.innerHTML = `<div class="d-wrap" data-wrap="tips" data-type="warn"><p>تم تعيين المنشور ليتم إخفاؤه عن مستخدمي المجتمع غير المسجلين</p> </div> ` + el.innerHTML;
        }
    }, {
        id: pid,
        afterAdopt: true,
        onlyStream: true,
    });
    if (!I18n.translations[I18n.currentLocale()].js.composer) {
        I18n.translations[I18n.currentLocale()].js.composer = {};
    }
    I18n.translations[I18n.currentLocale()].js.composer.hide_text = " ";
    I18n.translations[I18n.currentLocale()].js.composer.make_hide = "Hide this post";
    api.modifyClass("controller:composer", {
        pluginId: pid,
        actions: {
            insertHide() {
             this.get("toolbarEvent").applySurround(
                `<div data-theme-hide="true">`,
                `</div>\n`,
                "hide_text"
              );
            },
        },
    });
    api.addToolbarPopupMenuOptionsCallback(() => {
        return {
            action: "insertHide",
            icon: "far-eye-slash",
            label: "composer.make_hide",
        };
    });
}


CSS

.anon .lycoris-hiddened {
    display: none;

    .post-info.edits {
        display: none;

    }
}

إعجابَين (2)