Как реализовать функцию входа для просмотра контента, чтобы лучше привлекать пользователей к регистрации

Как в заголовке: я искал в форуме и нашел только информацию о безопасности изменения категорий, но это делает все категории невидимыми, что не соответствует моим требованиям.

Мой сценарий использования: незарегистрированные пользователи могут просматривать часть содержимого тем, но скрытые части доступны только после входа в систему. Или же зарегистрированные пользователи должны ответить в теме, чтобы получить доступ.

Это способ привлечь новых регистраций, а также предотвратить появление «халявщиков».

Похоже на это:

Как реализовать функцию входа для просмотра контента, чтобы лучше привлекать пользователей к регистрации

Как упоминалось в вопросе, я поискал на форуме и нашёл только возможность изменения видимости категорий, но это делает невидимыми все категории, что не соответствует моей задаче.

Мой сценарий использования: незарегистрированные пользователи могут видеть часть содержания поста, а скрытый контент доступен только после входа в систему. Либо для просмотра необходимо зарегистрироваться и ответить на пост.

Это способ привлечь к регистрации, а также предотвратить массовые запросы от посторонних.

Аналогично:

То, о чём вы спрашиваете, похоже на то, что делают многие газеты? Например, как анонимный пользователь, я могу просматривать главную страницу и страницы категорий The New York Times:

Если же я попытаюсь открыть статью, мне покажут что-то вроде этого:

Я задаю этот вопрос именно так, потому что считаю, что эта идея уже несколько раз обсуждалась на этом форуме. Мне она нравится. Возможно, стоит показать, что это распространённый способ, с помощью которого подписные издания привлекают подписчиков. Эта идея может оказаться полезной для некоторых сайтов на Discourse — особенно для тех, которые стремятся привлечь платных подписчиков.

Делает ли этот компонент темы то, что вы хотите достичь?

Да, Саймон, потому что на моём сайте будет много ссылок для скачивания программного обеспечения, но я не хочу, чтобы незарегистрированные пользователи видели их и нажимали на них. Спасибо за ваш ответ!

Мне очень хотелось бы, чтобы это работало как режим скрытого текста.—> ссылки для скачивания Когда незарегистрированный пользователь нажмёт, должно появляться всплывающее окно регистрации или оплаты — это было бы очень элегантно.

«Невозможно просмотреть содержимое без ответа» — активные пользователи бескорыстно делятся своими знаниями и хотят получить больше ответов на свои сообщения. Это также то, чего хотят владельцы форума. Я считаю, что эта функция полезна для развития форума.

Я попробую использовать этот плагин. Спасибо, Лилли!

Пожалуйста, надеюсь, что это вам поможет. Только имейте в виду, что это компонент темы, а не плагин, поэтому вы можете установить его через административный интерфейс.

Кажется, компонент темы Gated Topics in Category делает то же самое. :slightly_smiling_face:

Это легко реализовать. В модели темы есть атрибут, показывающий, отвечали ли вы на неё, — он называется posted. Ранее я написал компонент Composer tip under specific tag topics, который проверяет, был ли дан ответ. Если у вас есть опыт программирования, вы можете изучить мой код. В сочетании с методом decorateCookedElement API это позволит скрывать контент до момента ответа.

Конкретный код я писать не стал — сейчас очень занят.

<script type="text/discourse-plugin" version="1.6.0">

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: "Это сообщение скрыто";
}
`

api.addPostClassesCallback((attrs) => {
if (attrs?.cooked?.includes(`<div data-theme-hide="true">`)) {
  return ["hiddened"]; // Добавляем класс для CSS, дальше как решите
} 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>Сообщение скрыто сообществом</p>`; // Измените эту строку
            hide_post();
        }
    }, {
        id: pid,
        afterAdopt: true,
        onlyStream: true,
    });
} 


    
</script>

Вспомнил, что у меня есть код, который ранее использовался для скрытия всего сообщения от неавторизованных пользователей. Вы можете использовать его для справки.

Я вспомнил, что у меня есть код, который я использовал для скрытия всего сообщения от неавторизованных пользователей. Вы можете использовать его для справки.