对组织成员以外的所有用户隐藏表单
我们需要在帮助中心对所有Zendesk用户隐藏一个表单,除了一个组织的成员。亚博
我找到了一些关于在组织中隐藏表单的文章(https://support.亚博zendesk.com/hc/en-us/articles/4408886229146-How-can-I-hide-ticket-forms-based-on-a-user-s-organization-)和从帮助中心的下拉菜单中隐藏表单(https://support.亚博zendesk.com/hc/en-us/community/posts/4411892827674-How-to-hide-dropdown-field-value-in-the-request-form-for-End-User-)。
但我似乎无法把这些碎片拼凑在一起。有人知道我们该怎么做吗?
-
嘿达蒙Maranya-看起来你指出的第一篇文章是做你想做的:
if (HelpCenter.user.organizations[c].name !== "亚博ZENDESK"){
$ (" # TICKET_FORM_ID ") .remove ();这段代码表示“如果它们不在这个特定的组织中,那么隐藏表单”。
如果这不起作用,那就告诉我们你被困在哪里了!
-
哦,好的。非常感谢!我要试一试。
恐怕我不太擅长编写脚本,而且我真的不擅长Java。
-
Stephen Belleau我已经将第一个链接中的代码块添加到脚本.js文件中,就在DCOM代码块的下方以及文件的末尾,并保存了更改。但这两个地方似乎都没有什么作为。
所讨论的表单对于我的管理和非管理测试帐户仍然是可见的。两个测试帐户当前都不是所需组织的成员。
我遗漏了什么?
-
请查看如何根据用户的组织隐藏票务表单?篇文章。它有代码片段,上面张贴了一些更多的细节来引导你完成这一点。如果您试图对特定设置进行故障排除,这些文章的评论有时会非常有帮助。
这个例子假设你有jQuery,默认情况下,它没有包含在Zendesk的新主题中,所以签出亚博导入或升级jQuery文章也是。
-
这仍然不起作用。我在document_head中调用jquery。哈佛商学院使用下面这一行:
< script src = "https://code.jquery.com/jquery-3.6.0.slim.min.js" integrity="sha256-u7e5khyithlIdTpu22PHhENmPcRdFiHRjhAuHcs05RI=" crosorigin ="anonymous">
我已经修改了代码块,以使用正确的组织和表单ID。但是,无论组织成员身份如何,我试图隐藏的表单对于两个测试帐户仍然可见。
我甚至使用在线转换器将jquery代码转换为标准js,但它也不能以这种方式工作。
有一个“所以你想修改你的模板”,或“模板编辑傻瓜”页面,我可以看看吗?因为我真的不明白我现在在做什么,我认为这是我问题的根源。
-
达蒙,你能告诉我你手上的密码吗?
-
确定。下面的图片显示了我当前的代码,以及每个代码块所在的文件。
我完全是JScript/JQuery的新手。所以你能给予的任何帮助都将是非常感激的。
-
这就是我得到的。这里的JQuery专家能告诉我我遗漏了什么或做错了什么吗?
-
请把代码抄在这里。我将仔细检查它并将其转换为可工作的JS(这里绝对不需要jQuery)。
您确定您测试的用户在名称为“Managers”的组织中吗? -
你好凯!谢谢你的回复。你指的是什么代码?如果我在这里太慢了,请告诉我。
我用a测试的帐户是一个基本用户。它目前在管理人员组织中,但我一直在添加和删除它,因为我一直在测试我借用和重新利用的代码。
我最近的编码经验是一些Powershell和相当数量的Basic,当我还是个孩子的时候。所以,如果我有时有点迟钝,我很抱歉。
-
尝试用下面的代码替换第489行:
$ (" 360003482932 ") hide ();
而不是$("360003482932").remove();
-
达蒙Maranya截图中的代码:)
-
谢谢你的建议,鲁迪!我要试一试。
凯,我在你的信息里没有看到截图。你能报告一下吗?
-
嗨,达蒙,
我指的是你截图里的代码。隐藏/删除应该没有什么区别。都是有效函数。 -
我检查了你的代码,我想我找到了你的错误。
尝试删除489和502行
你的代码必须以var i=xxxxxxx开始,以},100)结束;
-
我试过拉479和502号线。但是表单在下拉菜单中仍然可见。
下面是script.js结尾代码段的当前状态:
Var I = 0;
var checkExist = setInterval(function() {
我+ +;
如果($(“a.nesty-input”). length) {
clearInterval (checkExist);
$ (" a.nesty-input ") . each(函数(){
(美元)。Bind ("click", function() {
for (var c在HelpCenter.user.organizations) {
if (HelpCenter.user.organizations[c].name !== "Managers"){
$ (" # 360003482932 ") .remove ();
}
//为其他组织保留空间
}
});
});
}
If (i > 10){
clearInterval (checkExist);
}
}, 100);mtrl.bike图像中的代码现在是正确的,但它不起作用。
-
我应该补充一点,因为这是一个活跃的服务台,我正在使用网站模板的副本和预览功能进行测试。
从理论上讲,这不会有什么不同。但令人惊讶的是,理论和实践往往不一致。
-
你能试着把你的代码放在script.js的顶部吗?
-
或者可以这样修改你的代码:
if organization.name === "Managers"
{形式。显示}
Else {form。隐藏}
-
将代码移到顶部将表单从列表中移除。但是它是对所有用户隐藏的,包括manager组织的成员。
我打算试一试你的第二个建议。
非常感谢你的帮助!
-
Var I = 0;
var checkExist = setInterval(function() {
我+ +;
如果($(“a.nesty-input”). length) {
clearInterval (checkExist);
$ (" a.nesty-input ") . each(函数(){
(美元)。Bind ("click", function() {
for (var c在HelpCenter.user.organizations) {
if (HelpCenter.user.organizations[c].name.substring(0,8) === "Managers"){
$(" # 360003482932 "),告诉;
}其他{
$ (" # 360003482932 ") hide;
}
//为其他组织保留空间
}
});
});
}
If (i > 10){
clearInterval (checkExist);
}
}, 100); -
嗨,达蒙,
2022年5月12日——给未来的人阅读。
在此日期,请求页面的下拉值没有存储在DOM中,因此,只有当有人单击下拉时才有可能删除这些值。
解决方案
这是一个干净的解决方案。请删除所有代码(您添加)从您当前的样本。
它是香草JS, jQuery自由,不猜测何时元素被添加到DOM(没有setinterval)。
我验证了这是有效的,并在下面的代码中添加了注释,说明了每个步骤的作用。
不要忘记替换这一行的表单ID。//等待元素被添加到DOM的函数。
waitForElm(选择器){
return new Promise(resolve => {)
if (document.querySelector(selector)) {
返回解决(document.querySelector(选择);
}
const observer = new MutationObserver(突变=> {)
if (document.querySelector(selector)) {
解决(document.querySelector(选择);
observer.disconnect ();
}
});
observer.observe(文档。身体,{
childList:没错,
子树:真
});
});
}
//等待DOM就绪的原生JS方式
文档。addEventListener('DOMContentLoaded', function() {
//只在新的请求页面上运行此代码
if (window.location.href.indexOf("/requests/new") > -1) {
//现在让我们等待元素被添加到DOM中
waitForElm('。Request_ticket_form_id .nest -input').then((elm) => {
//现在添加了元素,因此我们可以在点击发生时开始绑定删除
document.querySelectorAll('。request_ticket_form_id .nest -input').forEach((el) => {
//现在我们可以绑定当有人点击表单输入时,删除其中一个表单
//但只有当用户不是组织的一部分时才这样做
//在本例中,下一行检查名称为:Managers的组织
var isPartOfOrg = HelpCenter.user.organizations.find(o => .name === 'Managers');
if (!isPartOfOrg) {
//将这里的ID替换为表单ID
埃尔。onclick = () => document.getElementById('6092785826321').remove();
}
})
});
}
} -
没有好。当我将其更改为显示时,否则将隐藏。它只是向所有人显示表单,而不考虑组成员身份。似乎没有发挥作用的部分是检测组织。因为当“if (helpcenter…)”行要求隐藏表单时,它会隐藏表单。它只是隐藏了每个人,而不仅仅是非管理者组织的成员。
-
不好意思,答错了,();失踪的背后都藏着什么
其他{
$ (" # 360003482932 ") hide ();
}
-
嗨,达蒙,
我分享的代码是用于多个产品帮助中心的,文章中的代码(虽然它也可以工作)非常过时和混乱。
看起来在翻译的过程中遗漏了一些东西。在你的评论中,你提到了群组而不是组织。
我和鲁迪的代码都是专门针对组织进行检查的。 -
else隐藏函数末尾缺失的()就是它。现在一切正常。非常感谢您的帮助!
Kay,我要复制另一个模板,也试试你的代码。然后我会让那些薪水更高的人来决定我们用哪一个。
非常感谢你们两位!
-
嗨,我完全迷路了。我有下面的代码,试图隐藏它从所有用户不是组织的一部分,但它似乎不工作,当我使用预览功能。有人能指出我哪里做错了吗?阅读了许多不同的帮助主题,但仍然无法使其工作。我甚至把代码放在script.js文件的顶部。
//限制仅Coach表单
document.addEventListener (DOMContentLoaded”内,函数(){
Var I = 0;
var checkExist = setInterval(function() {
我+ +;
如果($(“a.nesty-input”). length) {
clearInterval (checkExist);
$ (" a.nesty-input ") . each(函数(){
(美元)。Bind ("click", function() {
for (var c在HelpCenter.user.organizations) {
if (HelpCenter.user.organizations[c].name.substring(0,8) === " sound Board Labs, Inc."){
$(" # 5580887005723 "),告诉();
}其他{
$ (" # 5580887005723 ") hide ();
}
//为其他组织保留空间
}
});
});
}
If (i > 10){
clearInterval (checkExist);
}
}, 100); -
这个代码块就是jquery。这意味着您需要在Default_Head中包含jquery导入。HBS文件和脚本中的标记。Cc文件(它们在这里帖子)。或者您可以尝试Kay的代码,它是标准的JScript,不需要额外的代码块。
-
达蒙Maranya非常感谢!我不知道该怎么办,但我会听你的。我尝试了Kay发布的内容,但使用预览似乎不起作用。
-
我也试图在API的v2中做到这一点-下面是我添加的代码-我尝试了删除和隐藏,没有任何工作-任何帮助将非常感激
Var I = 0;
var checkExist = setInterval(function() {
我+ +;
如果($(“a.nesty-input”). length) {
clearInterval (checkExist);
$ (" a.nesty-input ") . each(函数(){
(美元)。Bind ("click", function() {
for (var c在HelpCenter.user.organizations) {
如果(HelpCenter.user.organizations [c] .tags.includes(“是的”){
$ (" # 1900000890833 ") .remove ();
}
//为其他组织保留空间
}
});
});
}
If (i > 10){
clearInterval (checkExist);
}
}, 100);
});
请登录留下评论。
36个评论