MODX Tickets预览评论时强制显示表单输入名称而非用户全名的方法
嘿,刚好对MODX Tickets的这类逻辑有点经验,我来帮你搞定这个问题!
问题根源很明确:MODX Tickets默认对已登录用户,会优先调用他们个人资料里的全名来填充预览的name字段,而不是你表单里实际输入的内容。要修正这个,我们可以从几个方向入手:
1. 调整预览模板/Chunk的占位符取值逻辑
首先找到负责评论预览的模板Chunk(通常可能命名为ticketPreview或者类似的名称),定位到你提到的那行输入框代码。默认的[[+name]]占位符可能是从用户资料里拉取的,我们要改成优先取表单提交的name参数:
你可以把原来的代码改成这样:
<input type="text" class="text form-control" name="name" id="comment-name" value="[[!+_POST.name:default=`[[+user.fullname]]`]]" placeholder="Your name"/>
这里用[[!+_POST.name]]直接获取表单提交的名称值,如果提交的值为空(比如用户没输入),再 fallback 到用户的个人资料全名——当然如果你想完全忽略用户资料,直接去掉:default=那部分就行。
2. 修改处理预览的Snippet逻辑
如果模板层面的调整不生效,那就要去看处理预览的后端Snippet(比如ticketPreviewSnippet之类的)。找到赋值name占位符的地方,强制优先读取请求中的name参数:
在Snippet里添加或修改这段代码:
// 优先获取表单提交的name值 $submittedName = $modx->request->getParameter('name', 'POST'); // 赋值给模板变量,只有当提交值为空时才用用户资料 $tplVars['name'] = !empty($submittedName) ? $submittedName : $modx->user->get('fullname');
这样不管用户有没有登录,只要表单里输入了名称,预览就会显示输入的内容;如果没输入,才会用个人资料的名字(你也可以把后面的fallback去掉,直接留空或者显示占位符)。
3. 检查MODX Tickets的后台设置
有些版本的MODX Tickets可能自带“自动填充已登录用户信息”的开关,你可以去插件的后台设置里找找看,如果有这个选项,直接关掉它,系统就不会自动用用户资料填充预览字段了,只会保留表单里输入的内容。
测试验证
修改完之后记得测试两种场景:
- 已登录用户:输入一个和个人资料不同的名称,预览时应该显示你输入的内容
- 未登录用户:正常输入名称,预览显示输入的内容(保持原有逻辑不变)
内容的提问来源于stack exchange,提问作者enigmaster90

