问题
如何根据用户的组织隐藏票务表单?
回答
免责声明:本文仅供教学之用。亚博Zendesk不支持或保证代码。亚博Zendesk也不支持第三方技术,如JavaScript、jQuery或CSS。请在评论区发布任何问题或尝试在线搜索解决方案。
要隐藏基于用户组织名称的特定票务表单,请执行以下步骤:
- 找到票证ID
- 定位组织名称
- 编辑JavaScript
注意:如果你的主题使用模板制作指南V2,必须导入jQuery。有关详细信息,请参阅文章:导入或升级jQuery。
第一步:找到票证ID
步骤2:查找组织名称
- 去管理中心,并导航到“人物”.
- 浏览或搜索组织以找到正确的组织名称。
步骤3:编辑JavaScript
注意:如果用户没有从模板中复制“;”和“}”等所有字符,则代码将无法正常工作,并可能导致用户无法访问用户配置文件下拉菜单,无法看到My Activities按钮和Logout按钮。
- 在“指南”中单击“自定义”设计图标()。
- 单击要编辑的主题以打开它。
- 单击选项菜单并选择编辑代码,并选择Script.js。
- 复制下面的代码块。
美元(窗口)。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 !== "亚博ZENDESK"){
$ (" # TICKET_FORM_ID ") .remove ();
}
//为其他组织保留空间
}
});
});
}
If (i > 10){
clearInterval (checkExist);
}
}, 100);
}); - 将“TICKET_FORM_ID”替换为实际的票务表单ID。
- 将“ZENDESK亚博”替换为您希望在票表中显示的组织。
- 将代码粘贴到帮助中心代码的JavaScript模板中。
- 保存模板并发布更改。
所提供的代码为其他组织保留了空间。要添加其他表单和组织,请复制if语句上面和下面的现有if语句下面,确保将票证表单id替换为正确的id和您想要检查的组织,并查看用户是否在。无论你想要多少票形式和组织,都要重复这个步骤。
for (var c在HelpCenter.user.organizations) {
if (HelpCenter.user.organizations[c].name !== "亚博ZENDESK"){
$ (" # TICKT_FORM_ID ") .remove ();
}if (HelpCenter.user.organizations[c].name !== "MYORG"){
$ (" # TICKET_FORM_ID2 ") .remove ();
}
注意:此工作流不适用于未经身份验证的用户或没有组织的用户。对于这些用户,将显示所有表单。
67条评论
你好,
有人更新了这个在VanillaJs而不是Jquery ?
我的代码在V1中使用Jquery工作得很好,但不是在V2中(在document_head中使用Jquery)。
非常感谢
你好,
也许只是瞎猜,但是……有人知道如何显示评论只对一个特定的用户段或组织?或者可能在该组织或最终用户的特定标签上。这个请求的背景是,我们只希望我们自己的员工评论文章(目前)。
我可以在本文的注释中替换其中一个代码,还是建议使用内置的helper ?它将涉及
任何帮助都非常感激!
问候,
罗恩
嗨@……
根据之前发布的内容,您需要将以下代码添加到模板中:
在style.css:
在script.js:
这是未经测试的,但应该有效。
嗨@……
谢谢!我要试一试。因为我们也在使用单点登录,我也会咨询我们的开发团队。
一旦我们启动并运行它,我就会重新开始,这样社区的其他成员也可以受益。
问候,
罗恩
@……SSO并不是真正的问题,因为您的组织的标记仍然在Zendesk (admin>people>organizations)中定义。亚博或者,如果您只需要处理一个单独的实体,那么您可以使用组织的名称而不是标签。
嗨@……
谢谢你的参与。css工作得很好,但是JS代码没有像预期的那样呈现。我确实将标签(comments_visible)分配给ZenDesk中的组织。亚博也许你能帮我检查一下组织名称的代码?
我是对的,代码应该在$(document).ready(function(){函数?
为了完整起见,这是我尝试过的代码,但没有成功:
这个组织的标签是:
嗨@……
您的代码应该在模板的script.js文件中,您可能已经在这里有一些代码。
如果你想确保你在循环中运行,你可以在If语句之前的For循环中添加这行代码。
您将在web浏览器的控制台选项卡中看到结果。
您是否与该组织的登录用户一起测试代码?
嗨@……,
我的错误;我将代码放在$(文档)之后。准备好了(函数(){。我想我太草率了。不过,现在使用您提供的代码,它可以完美地工作。
多谢! !
问候,
罗恩
我一直在测试Ryan Mayes针对这个问题的解决方案(见下面的代码块),但遇到了一个我没有看到的问题。以下是Ryan分享的内容:
现在这是我的问题:当查看下拉菜单时,当这段代码存在时,一切看起来都很好。例如,标题为“test_tag - Ticket form 1”的表单将显示为“Ticket form 1”。这正是我想在下拉菜单中看到的。
不幸的是,一旦我点击“票务表单1”和实际表单加载,在下拉字段中的选择显示表单的名称为“test_tag -票务表单1”。再次单击下拉菜单将显示所需的可用表单(不显示任何标记),但是只要选择一个表单,它就会显示带有标记的表单。
以下是下拉菜单中出现的票务表格:
这是当我选择一个时的样子:
对如何解决这个问题有什么想法吗?我们这边使用了一些又长又丑的标签我不能让它们出现在表单名中。
我们希望在顶部导航中的“提交请求”链接/按钮只对几个细分的用户可见,我们可以很容易地定义和更新新的细分,随着时间的推移。
你们有什么建议或片段可以和我们分享吗?
有人能让它工作吗?我从评论中尝试了一些解决方案,但没有任何运气。
我们的目标是对所有用户隐藏一个表单,除了那些带有特定标签的用户。说到标签,标签是基于用户标签吗?Org标签?用户段名?
实现这一目标的最佳方式是什么?
我知道一个简单的方法来隐藏特定的票证形式。我使用这种方法,因为我想要一些形式只能从特定的web小部件,而不使用品牌:
然而,这使用了JQuery。我想转换到VanillaJS,但到目前为止我失败了。有人知道怎么把这个翻译成VanillaJS吗?
我已经设法“翻译”了第一部分,但我仍然被困在(美元)定格(ul)定格().remove(“# TICKET_FORM_ID”)JQuery看起来太“复杂”了,很难翻译。所以代码现在看起来像这样:
它工作,但它是非常丑陋的,因为它混合了香草JS和JQuery。
帮助使它100%香草JS将非常感激。
嗨,朱利安
差不多了. .这应该是完全删除jQuery的最后一部分
你好凯,
哇,你拯救了我的一天(和夜晚)!这正是我想要的工作方式!非常感谢:-)
为了记录,如果有人想做同样的事情,这里是一个“模板”片段:
再次感谢Kay的帮助!
问候
你好,
如果把它作为本机函数就太好了。能够隐藏或显示基于组织的表单将是伟大的没有去到代码。有什么计划吗?
嗨斗争中,
我想我没有票证。我可以有一个票形式,因为我在支持专业。我确实需要隐藏基于用户组织的票务表单。我如何做到这一点,没有票证形式身份证?或者我怎样才能找到机票?
是否计划在票证表单中引入本地访问控制?表面上看,使用jQuery是没问题的(我们目前正在使用它!),但它实际上只是通过隐藏实现安全。任何人都可以在浏览器中访问开发人员控制台,找到表单ID,然后将其插入URL。隐藏和替换表单选择器也是如此,因为表单选择器内置在{{request_form}} helper中。
对于那些在组织中可能有“未公开的流程”而需要票据表单的人来说,这尤其成问题——除了在Zendesk之外构建表单,您如何防止他们发现呢?亚博
大家好!
在阅读了几乎所有的评论后,我觉得我没有找到我需要的答案,所以我的问题是:我有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);
});
请问我做错了什么?:-(
你好@……,
考虑到代码对用户的组织进行迭代,您可能需要在这里检查条件逻辑。
你好@……!
非常感谢您的快速回答!
因此,正如你所建议的那样,我已经用这个代替了我以前的代码,但它仍然不起作用(我已经注销了,这已经是一件好事了!),我仍然有链接到这些组织的两个用户的两个表单……:
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 ();
}
还是不明白为什么:-(
你好@……
(360001704540美元).remove ();不是一个有效的jquery选择器。
你想做$("#360001704540").remove();代替。
另一种形式也是一样。
如果它仍然不工作,你可以添加console.log(HelpCenter.user.organizations[c].name)作为你的for循环的第一条指令吗?
此外,console.log内部的if,以确保它们被触发。
早....@……!
非常感谢您的跟进!然而,你的建议在这里都不起作用:
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时,我失去了再次注销的可能性……
我以为这很容易做到,但事实上不是哈哈!
你确定你的表单id吗?
如果您的帮助中心在线,您可以共享URL吗?
下面是带有适当日志的代码。请提供在浏览器的控制台选项卡检查器中显示的日志。
嗨!
谢谢你的信息和它给我的线索!
在此基础上,我从选择列表中隐藏了一些表单。
但没有链接到组织,而是链接到主题设置中定义的列表。
为此:
-更新manifest.json:
更改“Value”中的IDn
还要记住把你的Languages文件放在Translate文件夹中。
然后在模板“new_request_page。哈佛商学院”
在{{request_form wysiwyg = true}}之后添加以下js代码:
注意:在script.js中不起作用,因此必须在new_request_page中。哈佛商学院的模板。
如果有帮助的话!
谢尔盖。
谢谢你们俩,我做到了!
谢谢!
你好,
是否有可能编写一些内容,使默认表单成为帮助中心中用户可用的唯一表单?
我们有许多特定于项目的表单,这些表单只在web小部件中对我们的用户可见,但是当在帮助中心创建后续操作时,他们可以单击我们的任何项目表单类型。我们希望所有的跟进都在默认表单上,然后团队可以进行分类。
谢谢!
阿曼达
嗨。关于第一个帖子的代码隐藏表单。我用了一年多了。只是注意到在ZD(对管理中心)做了更改之后,它不再工作了。看来他们弄坏了什么东西。
与他们开了一个票-有其他人使用这个代码突然不工作的问题吗?我没有升级我们的HC -仍然在1.7。有什么新方法可以做到这一点吗?
提前感谢。
嗨约翰,
可能是因为您使用了不再支持jquery的模板API v2 ?
我仍然使用API v1,它都工作得很好。
是否可以为未登录的用户隐藏它?
请登录留下评论。