如题,我在论坛里搜索,只查到更改类别的安全性,但这样只会使全部类别都不可见,并不是我需要的功能。
我的使用情景是:未注册用户可以查看一部分帖子内容,隐藏部分的内容只能登录才能查看。或者注册用户,需回复帖子才能查看。
这是一个吸引注册的手段,也是防止大部分的伸手党。
类似于
The user go_ahead is seeking a way to implement a feature where unregistered users can view only part of a post, with the rest hidden until login or reply, to encourage registration and reduce spam. simon compares this to subscription models used by news sites. Lilly suggests the Guest Gate theme component, which go_ahead plans to try. Don mentions a similar Gated Topics in Category theme. Lhc_fl offers a custom solution using the posted attribute in the topic model and decorateCookedElement API, sharing code snippets to hide content based on user status or replies, which can be adapted for this purpose.
这个主题组件能实现您想要的效果吗?
是的,simon,因为我的网站将有许多软件下载链接,但我不希望未注册用户看到和点击它们。谢谢你的回复!
我非常希望它能像“Spoiler”模式一样。—> 下载链接 当未注册用户点击时,会弹出一个注册窗口或付款窗口,这将非常优雅。
“回复前无法查看内容”–活跃用户无私地分享他们的知识,他们希望他们的帖子得到更多回复。这也是论坛所有者想要的。我认为这个功能有利于论坛的发展。
我会尝试使用这个插件。谢谢你,lilly!
不客气,希望它对你有用。请注意,它是一个主题组件,而不是插件,所以你可以从管理员界面安装它。
我认为 Gated Topics in Category 这个主题组件也在做同样的事情。![]()
这个好办啊,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.