如何使smarty条件在javascript中工作?
我的JavaScript中有以下代码:如何使smarty条件在javascript中工作?,javascript,php,smarty,Javascript,Php,Smarty,我的JavaScript中有以下代码: <script> {literal} // Wait for document to be ready before doing JS / Jquery magic $(document).ready(function() { // Check if the status is allowed to become changed | If so disable status select
<script>
{literal}
// Wait for document to be ready before doing JS / Jquery magic
$(document).ready(function() {
// Check if the status is allowed to become changed | If so disable status select and force ticket closure
if(
{/literal}'{$ticket.lock_date}'{literal} != null
&&
{/literal}'{$currentDate}'{literal} > {/literal}'{$ticket.lock_date}'{literal}
) {
$('#status').attr("disabled", true);
$('.select2project').attr("disabled", true);
$('.select2lead').attr("disabled", true);
$.ajax({
type: 'GET',
url: '/modules/support/ticketAutoclose.php?id='+'{/literal}{$ticket.id}{literal}'
});
}
//more code down here
{/literal}
</script>
{literal}
//等待文档准备就绪,然后再执行JS/Jquery魔术
$(文档).ready(函数(){
//检查状态是否允许更改|如果允许,请禁用状态选择并强制关闭票据
如果(
{/literal}{$ticket.lock_date}{literal}!=null
&&
{/literal}{$currentDate}{literal}>{/literal}{$ticket.lock_date}{literal}
) {
$('#status').attr(“disabled”,true);
$('.select2project').attr(“disabled”,true);
$('.select2lead').attr(“已禁用”,true);
$.ajax({
键入:“GET”,
url:'/modules/support/ticketutoclose.php?id='+'{/literal}{$ticket.id}{literal}'
});
}
//下面有更多代码
{/literal}
锁定日期时数据库中的字段为空。当我访问文档时,上面的代码会激活,即使我在第一次检查时特别运行了“!=NULL”
有人知道我做错了什么吗?这真的让我陷入了开发的困境。Smarty是服务器端模板引擎-它在输出发送到浏览器之前工作。当你通过JS添加其语法关键字时,为时已晚。Smarty引擎永远不会读取和解释这一点。尝试将你的代码放入模板并传递一些标志在PHP中使用它。修复了它!问题是JS将我的DB NULL值作为空字符串读取
<script>
{literal}
// Wait for document to be ready before doing JS / Jquery magic
$(document).ready(function() {
// Check if the status is allowed to become changed | If so disable status select and force ticket closure
var lock_date = '{/literal}{$ticket.lock_date}{literal}';
var currDate = '{/literal}{$currentDate}{literal}';
var ticketID = '{/literal}{$ticket.id}{literal}';
if(lock_date !== null && lock_date !== '' && currDate > lock_date) {
$('#status').attr("disabled", true);
$('.select2project').attr("disabled", true);
$('.select2lead').attr("disabled", true);
$('.editBtnLink').hide();
$('.editBtnSave').hide();
$.ajax({
type: 'GET',
url: '/modules/support/ticketAutoclose.php?id='+ticketID
});
}
// Some more code
{/literal}
</script>
{literal}
//等待文档准备就绪,然后再执行JS/Jquery魔术
$(文档).ready(函数(){
//检查状态是否允许更改|如果允许,请禁用状态选择并强制关闭票据
var lock_date='{/literal}{$ticket.lock_date}{literal}';
var currDate='{/literal}{$currentDate}{literal}';
var ticketID='{/literal}{$ticket.id}{literal}';
如果(锁定日期!==空和锁定日期!==''&&currDate>锁定日期){
$('#status').attr(“disabled”,true);
$('.select2project').attr(“disabled”,true);
$('.select2lead').attr(“已禁用”,true);
$('.editBtnLink').hide();
$('.editBtnSave').hide();
$.ajax({
键入:“GET”,
url:'/modules/support/ticketutoclose.php?id='+ticketID
});
}
//还有代码吗
{/literal}
所以你正在动态生成JS,对吗?你检查过这段代码生成的JS了吗?你能在这里发布吗?“如何让smarty条件在javascript中工作?”--smarty在服务器上处理文档,它不与javascript交互(但可用于构建JS脚本).JavaScript在Smarty完成其工作后很长一段时间在浏览器中运行。不清楚您想要实现什么。您可以关闭if
行之前的{literal}
块,使用Smarty变量编写if
条件,然后启动另一个{literal}
块。如果您正在使用Smarty 3(为什么要使用旧版本?)那么您根本不需要使用{literal}
块。您所要做的就是确保大括号({
和}
)被空格包围。这样Smarty将它们视为文字,而不是Smarty构造。@axiac我想实现的是,当您转到页面时,php if check要运行。它应该检查DB lock_date字段是否为NULL,如果它不为NULL+当前日期超过了锁定日期,则括号内的代码应该为现在代码总是运行的,即使DB字段为NULL。PHP不涉及这个问题。