Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.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
Perl 存储HTML中变量的插值_Perl - Fatal编程技术网

Perl 存储HTML中变量的插值

Perl 存储HTML中变量的插值,perl,Perl,我正在用Perl编写一个web应用程序。它有一个包含联系信息的表单,目前的布局如下: $form_htm = <<EOF <input value="$in{firstname}" name="firstname"> <input value="$in{surname}" name="surname"> ...etc... EOF $form_htm=这里有一些不好的方法和一些好的方法来处理这个问题 坏方法 在代码中加入HTML。 现在用户体验用户可以自己管

我正在用Perl编写一个web应用程序。它有一个包含联系信息的表单,目前的布局如下:

$form_htm = <<EOF
<input value="$in{firstname}" name="firstname">
<input value="$in{surname}" name="surname">
...etc...
EOF

$form_htm=这里有一些不好的方法和一些好的方法来处理这个问题

坏方法 在代码中加入HTML。 现在用户体验用户可以自己管理HTML模板。他们仍然需要学习一种模板语言,但它至少是一种有很好文档记录的语言。有限的语言不鼓励在模板中放入太多的代码,在视图和其余代码之间创建一种防火墙

但是所有格式化模板的工作仍然必须在服务器端完成。用户体验用户仍然需要学习一种特殊的模板语言。这给我们带来了最好的方法

纯HTML、CSS和Javascript。 在这种模式下,HTML没有在服务器端处理模板并向其中插入变量,而是使用Javascript请求所需的数据,并根据需要显示。这有很大的好处

它将视图与代码的其余部分完全分离。这使得用户体验人员能够很好地控制应用程序的行为。他们决定每页需要什么数据。他们决定如何操纵和展示。开发人员可以专注于提供数据

另一个优点是使用Javascript。Javascript已经成为web设计师必须知道的实际编程语言。用户体验人员不需要学习特殊的模板语言,他们使用的HTML、CSS和Javascript与他们一直使用的相同

最后,这意味着大部分格式化工作在客户端完成,从而减少了服务器上的负载

主要缺点是这需要对现有系统进行重大的重新架构。现在,服务器代码不再生成HTML页面,而是生成Javascript,供Javascript通过操作

混合模板+Javascript 现有系统的一个很好的混合方法是使用模板,但不要使用特殊的模板语言,而是使用Javascript。简单的标量变量(如名称和数量)仍然可以作为模板变量提供,但更大的单位(如列表和哈希)将作为JSON注入模板

例如,此模板

var people = [% people %]
将提供
people=encode\u json(\@people)
,它可能扩展到:

var people = ["Jack", "Jill", "Jane", "Joe"]
然后用户体验人员可以使用这个Javascript
people
array做任何他们想做的事情

不利的一面是,这仍然让开发人员对站点的工作方式有太多的控制,因为他们决定使用什么模板和提供什么数据,这仍然意味着模板必须在服务器端进行扩展


从好处看,它让用户体验人员能够以他们熟悉的方式操作数据,它在视图和代码的其余部分之间强制执行清晰的分隔,并且您可以将现有代码转换为一次使用这些类型的模板。

您需要的是模板系统。是其中之一,但还有很多其他的。比如说,你没有告诉我们你在使用什么样的技术。这是一个带有CGI.pm的CGI应用程序,还是一个更现代的舞者应用程序?更现代的方法与模板引擎配合得很好。谢谢所有这些,@simbabque。我的应用程序使用CGI.pm和我几年前学会的一些getcgivars()子组件。可能应该只是使用其中一个,但还没有整理好。谢谢@choroba,是的,我在其他地方发布了这个问题,现在我在我的原始帖子中添加了一个更新来反映这一点。一个令人印象深刻的回复,Schwern!非常感谢。我的情况是,我是唯一一个在这个项目上工作的人,而且我真的不懂JavaScript。你会建议什么样的选择来快速、轻松地在我的表格中实现这一点?我没有使用Dancer或类似的工具。我有这样的建议:@Terry我建议你学习Javascript。它现在无处不在,将非常有用。它与Perl没有太大区别,基本的数据结构将是熟悉的。有。至于“我是唯一一个在这个项目上工作的人”,重要的是让其他人可以在这个项目上工作。否则,您将永远是唯一一个处理该项目的人。@Terry最快的方法是将您的内联HTML替换为。然后看一下用类似Dancer的东西替换路由代码(即“用户请求search.html,我该怎么做?”)。模板工具包能否处理这种复杂性:“$dis{}”散列包含“disabled”(如果字段被禁用),否则“@Terry是的,这是简单的变量扩展。您可能会反转数据结构,以便传入一个散列,如
my$vars={firstname=>{class=>“foo”,value=>“bar”,is_disabled=>0}$tt->process('thing.html',$vars)和模板类似于
。我特意从提供的数据中删除了HTML的所有痕迹。这就是为什么
firstname.is_disabled
是布尔值而不是字符串“disabled”。
Dear [% name %],

It has come to our attention that your account is in 
arrears to the sum of [% debt %].

Please settle your account before [% deadline %] or we 
will be forced to revoke your Licence to Thrill.

The Management.
var people = [% people %]
var people = ["Jack", "Jill", "Jane", "Joe"]