如何根据用户的组织隐藏票务表单?

回到顶端

67条评论

  • 红润DEROSIERS

    你好,

    有人更新了这个在VanillaJs而不是Jquery ?

    我的代码在V1中使用Jquery工作得很好,但不是在V2中(在document_head中使用Jquery)。

    非常感谢

    1
  • 罗恩·德·弗里斯

    你好,

    也许只是瞎猜,但是……有人知道如何显示评论只对一个特定的用户段或组织?或者可能在该组织或最终用户的特定标签上。这个请求的背景是,我们只希望我们自己的员工评论文章(目前)。

    我可以在本文的注释中替换其中一个代码,还是建议使用内置的helper ?它将涉及

    部分。

    任何帮助都非常感激!

    问候,

    罗恩

    0
  • 洁Pingouroux

    @……

    根据之前发布的内容,您需要将以下代码添加到模板中:

    在style.css:

    文章# {
    显示:没有;
    }

    在script.js:

    //检查组织
    Var I = 0;
    for (var c在HelpCenter.user.organizations) {
    如果(HelpCenter.user.organizations [c] .tags.includes(“YOUR_ORG_TAG”)){
    $(" #文章”),告诉();
    }
    }

    这是未经测试的,但应该有效。

    1
  • 罗恩·德·弗里斯

    @……

    谢谢!我要试一试。因为我们也在使用单点登录,我也会咨询我们的开发团队。

    一旦我们启动并运行它,我就会重新开始,这样社区的其他成员也可以受益。

    问候,

    罗恩

    0
  • 洁Pingouroux

    @……SSO并不是真正的问题,因为您的组织的标记仍然在Zendesk (admin>people>organizations)中定义。亚博或者,如果您只需要处理一个单独的实体,那么您可以使用组织的名称而不是标签。

    0
  • 罗恩·德·弗里斯

    @……

    谢谢你的参与。css工作得很好,但是JS代码没有像预期的那样呈现。我确实将标签(comments_visible)分配给ZenDesk中的组织。亚博也许你能帮我检查一下组织名称的代码?

    我是对的,代码应该在$(document).ready(function(){函数?

    为了完整起见,这是我尝试过的代码,但没有成功:

    $(文档)时函数(){
    //检查组织
    Var I = 0;
    for (var c在HelpCenter.user.organizations) {
    如果(HelpCenter.user.organizations [c] .tags.includes(“comments_visible”)){
    $(" #文章”),告诉();
    }
    }

    这个组织的标签是:

    0
  • 洁Pingouroux

    @……

    您的代码应该在模板的script.js文件中,您可能已经在这里有一些代码。

    如果你想确保你在循环中运行,你可以在If语句之前的For循环中添加这行代码。

    console.log (HelpCenter.user.organizations [c] .tags);

    您将在web浏览器的控制台选项卡中看到结果。

    您是否与该组织的登录用户一起测试代码?

    0
  • 罗恩·德·弗里斯

    @……

    我的错误;我将代码放在$(文档)之后。准备好了函数(){。我想我太草率了。不过,现在使用您提供的代码,它可以完美地工作。

    多谢! !

    问候,

    罗恩

    0
  • 康纳马克维斯奇

    我一直在测试Ryan Mayes针对这个问题的解决方案(见下面的代码块),但遇到了一个我没有看到的问题。以下是Ryan分享的内容:

    $(window).load(function() {var I = 0;var checkExist = setInterval(function() {i++;if ($("a.nest -input").length){clearInterval(checkExist);$("a.nest -input").each(function() {$(this)。Bind ("click", function() {//Create dictionary of available forms var forms = {} var options = document.getElementById("request_issue_type_select").getElementsByTagName("option"); for (i = 1; i < options.length; i++) { forms[options[i].text] = options[i].value; }; //Iterate through each form Object.keys(forms).forEach(function(item){ formTag = item.split(" - ")[0].toLowerCase(); //Remove forms that do not meet user criteria if (!(~HelpCenter.user.tags.indexOf(formTag))){ $(("#"+forms[item])).remove();
    //从用户视图中隐藏表单标签
    其他}{
    $(" # " +形式[项目]))。text(项目。Split (" - ")[1]);
    }});});});} if (i > 10){clearInterval(checkExist);}}, 100);});

    现在这是我的问题:当查看下拉菜单时,当这段代码存在时,一切看起来都很好。例如,标题为“test_tag - Ticket form 1”的表单将显示为“Ticket form 1”。这正是我想在下拉菜单中看到的。

    不幸的是,一旦我点击“票务表单1”和实际表单加载,在下拉字段中的选择显示表单的名称为“test_tag -票务表单1”。再次单击下拉菜单将显示所需的可用表单(不显示任何标记),但是只要选择一个表单,它就会显示带有标记的表单。

    以下是下拉菜单中出现的票务表格:

    这是当我选择一个时的样子:

    对如何解决这个问题有什么想法吗?我们这边使用了一些又长又丑的标签我不能让它们出现在表单名中。

    0
  • 约旦代顿

    我们希望在顶部导航中的“提交请求”链接/按钮只对几个细分的用户可见,我们可以很容易地定义和更新新的细分,随着时间的推移。

    你们有什么建议或片段可以和我们分享吗?

    1
  • 贾斯汀

    有人能让它工作吗?我从评论中尝试了一些解决方案,但没有任何运气。

    我们的目标是对所有用户隐藏一个表单,除了那些带有特定标签的用户。说到标签,标签是基于用户标签吗?Org标签?用户段名?

    实现这一目标的最佳方式是什么?

    4
  • 朱利安Maneyrol

    我知道一个简单的方法来隐藏特定的票证形式。我使用这种方法,因为我想要一些形式只能从特定的web小部件,而不使用品牌:

    $(文档)时函数(){
    $ (" # request_issue_type_selectoption (value = " TICKET_FORM_ID1 "]) .remove ();
    $ (" # request_issue_type_selectoption (value = " TICKET_FORM_ID2 "]) .remove ();
    $ (' .nesty-panel ')。on('DOMNodeInserted', function(e) {
    $ (' # TICKET_FORM_ID1 ') .remove ();
    $ (' # TICKET_FORM_ID2 ') .remove ();
    });
    });

    然而,这使用了JQuery。我想转换到VanillaJS,但到目前为止我失败了。有人知道怎么把这个翻译成VanillaJS吗?

    1
  • 朱利安Maneyrol

    我已经设法“翻译”了第一部分,但我仍然被困在(美元)定格(ul)定格().remove(“# TICKET_FORM_ID”)JQuery看起来太“复杂”了,很难翻译。所以代码现在看起来像这样:

    //隐藏PaaS和SaaS票证表单。用JQuery编写,稍后应该转换为VanillaJS。改编自https://support.zendesk.co亚博m/hc/en-us/articles/206977397#Option_1
    文档。addEventListener("DOMContentLoaded", function() {
    //从下拉选择器中移除表单
    文档。querySelector(“# request_issue_type_select选项(value = " 360000198537 "]) .remove ();
    文档。querySelector(“# request_issue_type_select选项(value = " 360000208678 "]) .remove ();
    文档。querySelector(“# request_issue_type_select选项(value = " 360000295658 "]) .remove ();
    //从嵌套输入中删除创建后的选项。
    document.querySelector(“.nesty-panel”)。addEventListener('DOMNodeInserted', function(event) {
    (美元)定格(ul)定格().remove (# 360000198537);
    (美元)定格(ul)定格().remove (# 360000208678);
    (美元)定格(ul)定格().remove (# 360000295658);
    });
    });

    它工作,但它是非常丑陋的,因为它混合了香草JS和JQuery。
    帮助使它100%香草JS将非常感激。

    1
  • mtrl.bike
    社区的主持人

    嗨,朱利安

    差不多了. .这应该是完全删除jQuery的最后一部分

    document.querySelector(“.nesty-panel”)。addEventListener('DOMNodeInserted', function(event) {
    李event.target.querySelector(“[id = " 360000198537 "]”).remove ();
    李event.target.querySelector(“[id = " 360000208678 "]”).remove ();
    李event.target.querySelector(“[id = " 360000295658 "]”).remove ();
    });
    1
  • 朱利安Maneyrol

    你好凯,

    哇,你拯救了我的一天(和夜晚)!这正是我想要的工作方式!非常感谢:-)

    为了记录,如果有人想做同样的事情,这里是一个“模板”片段:

    //隐藏特定的票务表单。
    文档。addEventListener("DOMContentLoaded", function() {
    //从下拉选择器中移除表单
    文档。querySelector(“# request_issue_type_select选项(value = " TICKET_FORM_ID "]) .remove ();
    //从嵌套输入中删除创建后的选项。
    document.querySelector(“.nesty-panel”)。addEventListener('DOMNodeInserted', function(event) {
    event.target.querySelector(“李[id =“TICKET_FORM_ID”]”).remove ();
    });
    });

    再次感谢Kay的帮助!

    问候

    2
  • 克里斯托弗Boerger

    你好,

    如果把它作为本机函数就太好了。能够隐藏或显示基于组织的表单将是伟大的没有去到代码。有什么计划吗?

    11
  • Saeleum

    嗨斗争中,

    我想我没有票证。我可以有一个票形式,因为我在支持专业。我确实需要隐藏基于用户组织的票务表单。我如何做到这一点,没有票证形式身份证?或者我怎样才能找到机票?

    0
  • 山姆
    社区的主持人

    是否计划在票证表单中引入本地访问控制?表面上看,使用jQuery是没问题的(我们目前正在使用它!),但它实际上只是通过隐藏实现安全。任何人都可以在浏览器中访问开发人员控制台,找到表单ID,然后将其插入URL。隐藏和替换表单选择器也是如此,因为表单选择器内置在{{request_form}} helper中。

    对于那些在组织中可能有“未公开的流程”而需要票据表单的人来说,这尤其成问题——除了在Zendesk之外构建表单,您如何防止他们发现呢?亚博

    3.
  • Emmanuelle Garel-Galais

    大家好!

    在阅读了几乎所有的评论后,我觉得我没有找到我需要的答案,所以我的问题是:我有4个组织,我希望其中3个(X, Y和Z)只看到一个票表,最后一个(A)看到另一个票表。当我只对一个组织进行测试时,它工作得很好(在document_head.hbs中添加了Jquery之后)。现在,这是我为4个组织编写的脚本,不幸的是,所有组织现在都看到了这两种门票形式……:

    美元(窗口)。On ('load', function() {
    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 !== "X"){
    $ (" # 360001704540 ") .remove ();
    }

    if (HelpCenter.user.organizations[c].name !== "Y"){
    $ (" # 360001704540 ") .remove ();
    }

    if (HelpCenter.user.organizations[c].name !== "Z"){
    $ (" # 360001704540 ") .remove ();
    }

    if (HelpCenter.user.organizations[c].name !== "A"){
    $ (" # 360001714479 ") .remove ();
    }

    });
    });
    }
    If (i > 10){
    clearInterval (checkExist);
    }
    }, 100);
    });

    请问我做错了什么?:-(

    0
  • 洁Pingouroux

    你好@……

    考虑到代码对用户的组织进行迭代,您可能需要在这里检查条件逻辑。

    Var remove_form1 = true;
    Var remove_form2 = true;
    for (var c在HelpCenter.user.organizations) {
    如果([“X”、“Y”、“Z”)其中包括(HelpCenter.user.organizations [c] . name)) {
    Remove_form1 = false;
    }

    if (HelpCenter.user.organizations[c].name == "A"){
    Remove_form2 = false;
    }
    }

    If (remove_form1) {
    $ (YOUR_FORM_1_ID) .remove ();
    }

    If (remove_form2) {
    $ (YOUR_FORM_2_ID) .remove ();
    }
    0
  • Emmanuelle Garel-Galais

    你好@……

    非常感谢您的快速回答!

    因此,正如你所建议的那样,我已经用这个代替了我以前的代码,但它仍然不起作用(我已经注销了,这已经是一件好事了!),我仍然有链接到这些组织的两个用户的两个表单……:

    Var remove_form1 = true;
    Var remove_form2 = true;
    for (var c在HelpCenter.user.organizations) {
    如果([“X”、“Y”、“Z”)其中包括(HelpCenter.user.organizations [c] . name)) {
    Remove_form1 = false;
    }

    if (HelpCenter.user.organizations[c].name == "A"){
    Remove_form2 = false;
    }

    }

    If (remove_form1) {
    (360001704540美元).remove ();
    }

    If (remove_form2) {
    (360001714479美元).remove ();
    }

    还是不明白为什么:-(

    0
  • 洁Pingouroux

    你好@……

    (360001704540美元).remove ();不是一个有效的jquery选择器。

    你想做$("#360001704540").remove();代替。

    另一种形式也是一样。

    如果它仍然不工作,你可以添加console.log(HelpCenter.user.organizations[c].name)作为你的for循环的第一条指令吗?

    此外,console.log内部的if,以确保它们被触发。

    0
  • Emmanuelle Garel-Galais

    早....@……

    非常感谢您的跟进!然而,你的建议在这里都不起作用:

    Var remove_360001704540 = true;
    Var remove_360001714479 = true;
    for (var c在HelpCenter.user.organizations) {
    if (["X", "Y", "Z"]. inclesconsole .log(HelpCenter.user.organizations[c].name)){
    Remove_360001704540 = false;
    }

    如果console.log(HelpCenter.user.organizations[c].name == "A"){
    Remove_360001714479 = false;
    }

    }

    如果console.log(remove_360001704540) {
    $ (" # 360001704540 ") .remove ();
    }

    如果console.log(remove_360001714479) {
    $ (" # 360001714479 ") .remove ();
    }

    当我添加console.log时,我失去了再次注销的可能性……

    我以为这很容易做到,但事实上不是哈哈!

    0
  • 洁Pingouroux

    你确定你的表单id吗?

    如果您的帮助中心在线,您可以共享URL吗?

    下面是带有适当日志的代码。请提供在浏览器的控制台选项卡检查器中显示的日志。

    Var remove_form1 = true;
    Var remove_form2 = true;
    for (var c在HelpCenter.user.organizations) {
    console.log (HelpCenter.user.organizations [c] . name);
    如果([“X”、“Y”、“Z”)其中包括(HelpCenter.user.organizations [c] . name)) {
    Remove_form1 = false;
    console.log(“remove_form1错误”);
    }

    if (HelpCenter.user.organizations[c].name == "A"){
    Remove_form2 = false;
    console.log(“remove_form2错误”);
    }
    }

    If (remove_form1) {
    console.log("删除表单1");
    $ (" # 360001704540 ") .remove ();
    }

    If (remove_form2) {
    console.log("删除表单2");
    $ (" # 360001714479 ") .remove ();
    }
    0
  • 塞尔日·贝尔蒂纳·杜布瓦

    嗨!


    谢谢你的信息和它给我的线索!


    在此基础上,我从选择列表中隐藏了一些表单。
    但没有链接到组织,而是链接到主题设置中定义的列表。

    为此:

    -更新manifest.json:


    “标签”:“hide_forms”,
    “变量”:(

    “标识符”:“hide_forms_list”,
    “类型”:“文本”,
    “描述”:“hide_forms_description”,
    “标签”:“hide_forms_label”,
    "value": "ID1, ID2, ID3…"
    }
    ]
    }

    更改“Value”中的IDn
    还要记住把你的Languages文件放在Translate文件夹中。

    然后在模板“new_request_page。哈佛商学院”
    在{{request_form wysiwyg = true}}之后添加以下js代码:

    < >脚本
    $ (window) .on ('load', function () {
    Var I = 0;
    var checkExist = setInterval (function () {
    我+ +;
    If ($ ("a.nest -input")。长度){
    clearInterval (checkExist);
    $ (" a.nesty-input”)。Each (function () {
    $ (this) .bind ("click", function () {
    var hide_forms_list = '{{settings.hide_forms_list}}'。分割(" ");
    HIDE_FORMS_LISTE。forEach (function (cur_form_id) {
    //console.log('hide Form: '+ cur_form_id);
    $ ('#' + cur_form_id) .remove ();
    });
    });
    });
    }
    If (i> 10) {
    clearInterval (checkExist);
    }
    }, 100);
    });
    //表单删除结束。
    > < /脚本

    注意:在script.js中不起作用,因此必须在new_request_page中。哈佛商学院的模板。

    如果有帮助的话!

    谢尔盖。

    0
  • Emmanuelle Garel-Galais

    谢谢你们俩,我做到了!

    谢谢!

    0
  • 阿曼达·甘恩

    你好,

    是否有可能编写一些内容,使默认表单成为帮助中心中用户可用的唯一表单?

    我们有许多特定于项目的表单,这些表单只在web小部件中对我们的用户可见,但是当在帮助中心创建后续操作时,他们可以单击我们的任何项目表单类型。我们希望所有的跟进都在默认表单上,然后团队可以进行分类。

    谢谢!

    阿曼达

    0
  • 约翰

    嗨。关于第一个帖子的代码隐藏表单。我用了一年多了。只是注意到在ZD(对管理中心)做了更改之后,它不再工作了。看来他们弄坏了什么东西。

    与他们开了一个票-有其他人使用这个代码突然不工作的问题吗?我没有升级我们的HC -仍然在1.7。有什么新方法可以做到这一点吗?

    提前感谢。

    0
  • 洁Pingouroux

    约翰

    可能是因为您使用了不再支持jquery的模板API v2 ?

    我仍然使用API v1,它都工作得很好。

    0
  • 罗宾•威金斯

    是否可以为未登录的用户隐藏它?

    1

登录留下评论。

由Zendesk提供支亚博持