How to implement the function of logging in to view content, in order to better attract users to register

如题,我在论坛里搜索,只查到更改类别的安全性,但这样只会使全部类别都不可见,并不是我需要的功能。

我的使用情景是:未注册用户可以查看一部分帖子内容,隐藏部分的内容只能登录才能查看。或者注册用户,需回复帖子才能查看。

这是一个吸引注册的手段,也是防止大部分的伸手党。

类似于

1 Like

How to achieve the function of logging in to view content, in order to better attract users to register

As mentioned in the question, I searched in the forum and only found the security of changing categories, but this will only make all categories invisible, which is not the function I need.

My usage scenario is: unregistered users can view a portion of the post content, while hidden content can only be viewed by logging in. Alternatively, to register as a user, you need to reply to the post in order to view it.

This is a means of attracting registration and also preventing the majority of reaching out parties.

Similar to:

1 Like

Is what you are asking for similar to what a lot of news papers do? For example, as an anonymous user, I can view the front page and category pages of the New York Times:

If I then try to visit an article, I’m shown something like this:

The reason I am asking in this way is because I think the idea has been mentioned on this forum a few times. I like the idea. It might be useful to show that this is a common way that subscription based publications get users to subscribe. The idea might be useful for some Discourse sites - especially sites that are trying to attract paid subscribers.

2 Likes

Does this theme component do what you want to achieve?

3 Likes

Yes, simon,because my website will have many software download links, but I don’t want unregistered users to see it and click it.thank you for your reply!

I would really like it if it was like spoiler mode.—> download links When an unregistered user clicks, a registration pop-up window or payment pop-up window will appear, which will be very elegant.

“Unable to view content without replying”–Active users selflessly share their knowledge and they want more responses to their posts. This is also what the forum owners want. I think this feature is beneficial to the development of the forum.

I will try using this plugin.thank you,lilly!

2 Likes

You’re welcome, I hope it works for you. Just note that it is a theme component and not a plug-in, so you can install it from the admin UI.

1 Like

I think the Gated Topics in Category theme component is doing the same. :slightly_smiling_face:

4 Likes

这个好办啊,topic model里面有一个attribute就显示了你是否已经回复过,叫posted,我之前写了个组件 Composer tip under specific tag topics 就判断了是否已经回复过。如果你有代码基础,可以看一下我写的。结合api的decorateCookedElement方法就能实现在没回复的情况下隐藏。

具体代码我懒得写了最近特别忙。

This is easy to do. There is an attribute in the topic model that shows whether you have replied to it. It is called posted. I wrote a component before ( https://meta.discourse.org/t/composer-tip-under- specific-tag-topics/255618/1 ) determines whether you have replied. If you can program, you can take a look at what I wrote. Combined with the decorateCookedElement method of the API, it can be implemented.

I am too lazy to write the specific code. I have been very busy recently.

<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用的,接下来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>

想起来我这里有一份之前用来给未登录用户隐藏整个帖子的代码,你可以拿来参考一下

I remembered that I have a code that I used to hide the entire post from non-logged-in users. You can use it for reference.

3 Likes

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.