对组织成员以外的所有用户隐藏表单

36个评论

  • Stephen Belleau
    社区的主持人

    达蒙Maranya-看起来你指出的第一篇文章是做你想做的:

    if (HelpCenter.user.organizations[c].name !== "亚博ZENDESK"){
    $ (" # TICKET_FORM_ID ") .remove ();

    这段代码表示“如果它们不在这个特定的组织中,那么隐藏表单”。

    如果这不起作用,那就告诉我们你被困在哪里了!

    1
  • 达蒙Maranya

    哦,好的。非常感谢!我要试一试。

    恐怕我不太擅长编写脚本,而且我真的不擅长Java。

    0
  • 达蒙Maranya

    Stephen Belleau我已经将第一个链接中的代码块添加到脚本.js文件中,就在DCOM代码块的下方以及文件的末尾,并保存了更改。但这两个地方似乎都没有什么作为。

    所讨论的表单对于我的管理和非管理测试帐户仍然是可见的。两个测试帐户当前都不是所需组织的成员。

    我遗漏了什么?

    0
  • 丹·库珀
    社区的主持人

    达蒙Maranya

    请查看如何根据用户的组织隐藏票务表单?篇文章。它有代码片段,上面张贴了一些更多的细节来引导你完成这一点。如果您试图对特定设置进行故障排除,这些文章的评论有时会非常有帮助。

    这个例子假设你有jQuery,默认情况下,它没有包含在Zendesk的新主题中,所以签出亚博导入或升级jQuery文章也是。

    0
  • 达蒙Maranya

    这仍然不起作用。我在document_head中调用jquery。哈佛商学院使用下面这一行:

    < script src = "https://code.jquery.com/jquery-3.6.0.slim.min.js" integrity="sha256-u7e5khyithlIdTpu22PHhENmPcRdFiHRjhAuHcs05RI=" crosorigin ="anonymous">

    我已经修改了代码块,以使用正确的组织和表单ID。但是,无论组织成员身份如何,我试图隐藏的表单对于两个测试帐户仍然可见。

    我甚至使用在线转换器将jquery代码转换为标准js,但它也不能以这种方式工作。

    有一个“所以你想修改你的模板”,或“模板编辑傻瓜”页面,我可以看看吗?因为我真的不明白我现在在做什么,我认为这是我问题的根源。

    0
  • mtrl.bike
    社区的主持人

    达蒙,你能告诉我你手上的密码吗?

    0
  • 达蒙Maranya

    mtrl.bike

    确定。下面的图片显示了我当前的代码,以及每个代码块所在的文件。

    我完全是JScript/JQuery的新手。所以你能给予的任何帮助都将是非常感激的。

    0
  • 达蒙Maranya

    mtrl.bike丹·库珀Stephen Belleau

    这就是我得到的。这里的JQuery专家能告诉我我遗漏了什么或做错了什么吗?

    0
  • mtrl.bike
    社区的主持人

    请把代码抄在这里。我将仔细检查它并将其转换为可工作的JS(这里绝对不需要jQuery)。

    您确定您测试的用户在名称为“Managers”的组织中吗?

    0
  • 达蒙Maranya

    你好凯!谢谢你的回复。你指的是什么代码?如果我在这里太慢了,请告诉我。

    我用a测试的帐户是一个基本用户。它目前在管理人员组织中,但我一直在添加和删除它,因为我一直在测试我借用和重新利用的代码。

    我最近的编码经验是一些Powershell和相当数量的Basic,当我还是个孩子的时候。所以,如果我有时有点迟钝,我很抱歉。

    0
  • 红润DEROSIERS

    达蒙Maranya

    尝试用下面的代码替换第489行:

    $ (" 360003482932 ") hide ();

    而不是$("360003482932").remove();

    0
  • mtrl.bike
    社区的主持人

    达蒙Maranya截图中的代码:)

    0
  • 达蒙Maranya

    谢谢你的建议,鲁迪!我要试一试。

    凯,我在你的信息里没有看到截图。你能报告一下吗?

    0
  • mtrl.bike
    社区的主持人

    嗨,达蒙,

    我指的是你截图里的代码。隐藏/删除应该没有什么区别。都是有效函数。

    0
  • 红润DEROSIERS

    达蒙Maranya

    我检查了你的代码,我想我找到了你的错误。

    尝试删除489和502行

    你的代码必须以var i=xxxxxxx开始,以},100)结束;

    0
  • 达蒙Maranya

    我试过拉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图像中的代码现在是正确的,但它不起作用。

    0
  • 达蒙Maranya

    我应该补充一点,因为这是一个活跃的服务台,我正在使用网站模板的副本和预览功能进行测试。

    从理论上讲,这不会有什么不同。但令人惊讶的是,理论和实践往往不一致。

    0
  • 红润DEROSIERS

    达蒙Maranya

    你能试着把你的代码放在script.js的顶部吗?

    0
  • 红润DEROSIERS

    或者可以这样修改你的代码:

    if organization.name === "Managers"

    {形式。显示}

    Else {form。隐藏}

    0
  • 达蒙Maranya

    将代码移到顶部将表单从列表中移除。但是它是对所有用户隐藏的,包括manager组织的成员。

    我打算试一试你的第二个建议。

    非常感谢你的帮助!

    0
  • 红润DEROSIERS

    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);

    0
  • mtrl.bike
    社区的主持人

    嗨,达蒙,

    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();

    })
    });

    1
  • 达蒙Maranya

    没有好。当我将其更改为显示时,否则将隐藏。它只是向所有人显示表单,而不考虑组成员身份。似乎没有发挥作用的部分是检测组织。因为当“if (helpcenter…)”行要求隐藏表单时,它会隐藏表单。它只是隐藏了每个人,而不仅仅是非管理者组织的成员。

    0
  • 红润DEROSIERS

    不好意思,答错了,();失踪的背后都藏着什么

    其他{

    $ (" # 360003482932 ") hide ();

    0
  • mtrl.bike
    社区的主持人

    嗨,达蒙,

    我分享的代码是用于多个产品帮助中心的,文章中的代码(虽然它也可以工作)非常过时和混乱。

    看起来在翻译的过程中遗漏了一些东西。在你的评论中,你提到了群组而不是组织。
    我和鲁迪的代码都是专门针对组织进行检查的。

    0
  • 达蒙Maranya

    else隐藏函数末尾缺失的()就是它。现在一切正常。非常感谢您的帮助!

    Kay,我要复制另一个模板,也试试你的代码。然后我会让那些薪水更高的人来决定我们用哪一个。

    非常感谢你们两位!

    0
  • 布兰登·琼斯

    嗨,我完全迷路了。我有下面的代码,试图隐藏它从所有用户不是组织的一部分,但它似乎不工作,当我使用预览功能。有人能指出我哪里做错了吗?阅读了许多不同的帮助主题,但仍然无法使其工作。我甚至把代码放在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);

    0
  • 达蒙Maranya

    这个代码块就是jquery。这意味着您需要在Default_Head中包含jquery导入。HBS文件和脚本中的标记。Cc文件(它们在这里帖子)。或者您可以尝试Kay的代码,它是标准的JScript,不需要额外的代码块。

    0
  • 布兰登·琼斯

    达蒙Maranya非常感谢!我不知道该怎么办,但我会听你的。我尝试了Kay发布的内容,但使用预览似乎不起作用。

    0
  • 约翰DiGregorio

    我也试图在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);
    });

    0

登录留下评论。

由Zendesk提供支亚博持