Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Smarty将包含新行的文本转换为JavaScript新行_Javascript_Php_String_Smarty_Newline - Fatal编程技术网

如何使用Smarty将包含新行的文本转换为JavaScript新行

如何使用Smarty将包含新行的文本转换为JavaScript新行,javascript,php,string,smarty,newline,Javascript,Php,String,Smarty,Newline,我有一个在我正在构建的SugarCRM模块中使用Smart的模板 下面是讨论中的smarty代码,它基本上迭代PHP数组,为每个数组项调用JavaScript函数 {foreach from=$TASKS key=key item=task} add_task_row("{$task.task_id}","{$ID}","{$task.name}","{$task.description}","{$task.status}","{$task.priority}","{$task.type

我有一个在我正在构建的SugarCRM模块中使用Smart的模板

下面是讨论中的smarty代码,它基本上迭代PHP数组,为每个数组项调用JavaScript函数

{foreach from=$TASKS key=key item=task}
    add_task_row("{$task.task_id}","{$ID}","{$task.name}","{$task.description}","{$task.status}","{$task.priority}","{$task.type}","{$task.sort_order}","{$task.heading}");
{/foreach}
下面是上面显示的JavaScript函数

function add_task_row(taskid,projectid,name,description,status,priority,type,sort,heading){

    var ii = document.getElementById("project_tasks");
    var num = document.getElementById("tasks_count").value;

    // If TaskID is EMPTY, then assign it a new one from the row count
    var taskIDTimeStamp = new Date().getTime();
    //console.log('ID1: '+id);
    if(taskid){
        var taskid = taskid;
    }else{
        var taskid = taskIDTimeStamp;
    }

    num++;

    //var prioritySelHtml = createOptions(priority);

    var e = document.createElement("div");
    e.setAttribute('id','task_'+num);
    e.setAttribute('class','task_row');

    e.innerHTML =  '<span class="handle"></span>';

    e.innerHTML +=  '<input name="taskid_'+num+'" id="taskid_'+num+'" size=15 type="hidden" value="'+taskid+'">';

    e.innerHTML +=  '<input name="projectid_'+num+'" id="projectid_'+num+'" size=15 type="hidden" value="'+projectid+'">';

    e.innerHTML +=  '<input name="sort_order_'+num+'" id="sort_order_'+num+'" class="sort_order" size=15 type="hidden" value="'+sort+'">';

    e.innerHTML +=  '<input name="heading_'+num+'" id="heading_'+num+'" class="heading" size=15 type="hidden" value="'+heading+'">';


    if(heading == 1){

        // Add a Task Heading
        e.innerHTML +=  '<input name="name_'+num+'" id="name_'+num+'" class="task-heading" size=45 type="text" value="'+name+'" placeholder="Type a Project Task List Heading Here...">';
        e.innerHTML += '<div style="display:none; float: left; width:  400px;"><textarea name="description_'+num+'" id="description_'+num+'" rows="4" cols="50">'+description+'</textarea></div>';
        e.innerHTML += '<div style="display:none; float: left; width:  100px;"><select name="status_'+num+'" id="status_'+num+'" class="status">'+buildFormSelection(statusArray, status)+'</select></div>';
        e.innerHTML += '<div style="display:none; float: left; width:  90px;"><select name="priority_'+num+'" id="priority_'+num+'" class="priority">'+buildFormSelection(prioritiesArray, priority)+'</select></div>';
        e.innerHTML += '<div style="display:none; float: left; width:  100px;"><select name="type_'+num+'" id="type_'+num+'" class="type">'+buildFormSelection(typesArray, type)+'</select></div>';
    }else{


    // Add a Task
    e.innerHTML +=  '<input name="name_'+num+'" id="name_'+num+'" size=45 type="text" value="'+name+'">';

        //e.innerHTML += '<input name="description_'+num+'" id="description_'+num+'" size=45 type="text" value="'+description+'">';
        e.innerHTML += '<textarea name="description_'+num+'" id="description_'+num+'" class="edit_description" rows="1" cols="50">'+description+'</textarea>';
        e.innerHTML += '<select name="status_'+num+'" id="status_'+num+'" class="status">'+buildFormSelection(statusArray, status)+'</select>';
        e.innerHTML += '<select name="priority_'+num+'" id="priority_'+num+'" class="priority">'+buildFormSelection(prioritiesArray, priority)+'</select>';
        e.innerHTML += '<select name="type_'+num+'" id="type_'+num+'" class="type">'+buildFormSelection(typesArray, type)+'</select>';
    }

    //e.innerHTML += '<button type="button" onclick="remove_item_row('+num+')"><img src="index.php?entryPoint=getImage&imageName=id-ff-clear.png"></button>';
    e.innerHTML += '<button type="button" onclick="remove_item_row('+num+')"><img src="./modules/apoll_Web_Projects/assets/images/cross.png"></button>';

    e.innerHTML += '<br style="clear:both;">';

    document.getElementById("tasks_count").value = num;
    ii.appendChild(e);

}
因此,在上面的代码中,您可以看到由于某种原因,这个长数据库值没有用引号括起来

你知道如何解决这个问题吗?这个问题只有在DB值看起来有特殊字符时才会发生


更新,进一步检查后,我发现长值用引号括起来,经过更多测试,导致问题的不是特殊字符,而是换行

add_task_row("1411445999407","205e34c6-7381-92eb-e6ab-54125429cd2a","ghjfghjh","gdf;dgdfdfg 679px;width: 679px;width: 679px;
dsgdfgsdfg


dfgsdfgsdfg


dfgsdfg","In Progress","Low","Other","3","0");

您知道如何使用这些换行符生成字符串而不会导致JavaScript错误吗?

这就是将JavaScript字符串放入源代码的方式。您不能简单地转到新线路

例如,下面的代码正在工作

alert('1 2 3 4');
但以下情况并非如此:

alert('1
2 3 4');
以下方法同样有效:

alert('1' +
'2 3 4');
如果您想在Smarty中进行任何更改,可以通过以下方式进行:

{assign var="string" value="1
2
3
4"}
<script>

    alert ("{$string|replace:array("\n","\r"):array(' ', '')}");
</script>
现在处于警戒状态,您将显示新行

因此,在您的情况下,您可能应该更改行:

add_task_row("{$task.task_id}","{$ID}","{$task.name}","{$task.description}","{$task.status}","{$task.priority}","{$task.type}","{$task.sort_order}","{$task.heading}");
进入


最好的办法可能是通过JSON编码器发出字符串。非常感谢您的帮助,我尝试了这个方法,但没有成功,但让我走上了正确的轨道来查看Smarty字符串修饰符,我必须使用regex版本,然后运行两次,以获得像这样的所需输出<代码>{$task.description | regex_replace:'/[\n\r]/':'\n'\n':'\n'}我知道它看起来很奇怪,但我尝试了20个组合,这是一个最终工作完美的组合,然后在我的另一个视图中,我使用
nl2br
修饰符将它们转换为HTML视图中的断开标记,这样一切都很好。谢谢你的帮助
{assign var="string" value="1
2
3
4"}
<script>

alert ("{$string|replace:array("\n","\r"):array('\n', '\n')}");
</script>
add_task_row("{$task.task_id}","{$ID}","{$task.name}","{$task.description}","{$task.status}","{$task.priority}","{$task.type}","{$task.sort_order}","{$task.heading}");
add_task_row("{$task.task_id}","{$ID}","{$task.name}","{$task.description|replace:array("\n","\r"):array('\n', '\n')}","{$task.status}","{$task.priority}","{$task.type}","{$task.sort_order}","{$task.heading}");