如何打印HTML代码,以便我只需编写一次?

4
我正在开发一个Web应用程序,我正在进行一些重构工作。
这样做时,我陷入了两难境地:我的页面中有一些相似甚至相同的部分,我希望将它们压缩成一个部分,以便只需编辑一次即可进行编辑,因为编辑已经变得很痛苦。
但是如何做到这一点?我正在使用php、js和jquery。
使用php echos来完成这一点是绝对不行的;管理所有括号非常困难,而且这并不像我最优雅的解决方案,而且我需要对我打印的内容进行一些控制。
我想到了一些函数,但由于我没有太多的经验,我真的不知道在哪里碰头。提前感谢您。
编辑:我被要求提供一些示例。
<form action="insert.php" method="POST" class="big" style="display:none;">
<h3> Insert Contact </h3>
    <fieldset class="col2">
    <!-- Some inputs here -->
    </fieldset>

    <div>
        <input type="submit" value="Send">
        <input type="reset" value="Clean Form">
    </div>
    <input type="text" name="insert" value="1" style="display:none;">
    <input type="text" name="modify" value="1" style="display:none;">
    <input type="text" name="secret" value="<? echo($perm); ?>" class="hidden">
</form>

比如说,这是一个我想要在某些页面中添加的表单。但是,在其他一些页面中,我不需要它。然而,举个例子,根据调用页面的不同,我需要切换一些参数或更改一些值,我认为这是无法通过php包含实现的。


1
你是否看过使用PHP的include()函数来包含文件?http://php.net/manual/en/function.include.php - Adam Konieska
因此,添加具有可调用方法的常见文件。 - epascarello
我知道这不是你要求的,而且作为练习和学习编码的方式,你肯定应该继续这样做。但是,当你的应用程序变得越来越庞大时,它将变得越来越难以维护,你将不得不编写大量复杂的代码来实现你想要的功能。使用框架或者类似WordPress的东西会给你带来很大的好处。只是说一下 :) - giorgio
是的,我知道框架。如果我知道的话,我本来会使用它们的。但现在有点太晚了,而且我的应用程序并不太复杂,此外我正在进行一些重构,因为我有一些空闲时间,并且这是我第一个Web应用程序。现在一切都在掌控之中 :) - Marco-dev
4个回答

3
您可以使用PHP的include()函数在文件中包含HTML。

使用您提供的HTML的示例

form.php

<form action="insert.php" method="POST" class="big" style="display:none;">
<h3> Insert Contact </h3>
    <fieldset class="col2">
    <!-- Some inputs here -->
    </fieldset>

    <div>
        <input type="submit" value="Send">
        <input type="reset" value="Clean Form">
    </div>
    <input type="text" name="insert" value="1" style="display:none;">
    <input type="text" name="modify" value="1" style="display:none;">
    <input type="text" name="secret" value="<? echo($perm); ?>" class="hidden">
</form>

header.php

<div>Hello World!</div>
<?php $value = 10; ?>

index.php

<html>
    <head>
    </head>
    <body>
        <?php include(header.php); ?>
        <div>This is some content.  The number is <?php echo($value); ?></div>
        <?php include(form.php); ?>
    </body>
</html>

输出HTML

<html>
    <head>
    </head>
    <body>
        <div>Hello World!</div>
        <div>This is some content.  The number is 10</div>
        <form action="insert.php" method="POST" class="big" style="display:none;">
        <h3> Insert Contact </h3>
        <fieldset class="col2">
        <!-- Some inputs here -->
        </fieldset>

        <div>
            <input type="submit" value="Send">
            <input type="reset" value="Clean Form">
        </div>
        <input type="text" name="insert" value="1" style="display:none;">
        <input type="text" name="modify" value="1" style="display:none;">
        <input type="text" name="secret" value="<? echo($perm); ?>" class="hidden">
        </form>
    </body>
</html>

如果你想在两种不同的表单之间进行选择,可以使用以下任一方法:

方法1:在不同的页面上包含相关表单

insert.php

<?php include("insert-form.php"); ?>

edit.php

<?php include("edit-form.php"); ?>

方法二:根据条件包含相关表单

index.php

<?php
$formchoose = "insert";

if($formchoose == "insert") {
    include("form-insert.php");
} else {
    include("form-default.php");
}
?>

方法三:在包含文件中进行条件判断(这是您在评论中提到的方法)

index.php

<?php
$formchoose = "insert";
include(forms.php);
?>

forms.php

switch ($formchoose) {
    case "insert":
        ?>
            <form id="insert-form">
            <!-- form here-->
            </form>
        <?
    break;
    case "edit":
        ?>
            <form id="edit-form">
            <!-- form here-->
            </form>
        <?
    break;
    default:
    break;
}

Documentation

http://php.net/manual/en/function.include.php


如果我只想添加包含文件的一部分怎么办?我最担心的是到处都是“include.php”的文件。例如,我可以创建一个form.php,在其中选择要采取的内容。但是我最终还是会使用“echo”。 - Marco-dev
你不需要使用echo来包含HTML。我更新了答案,展示了如何在你的问题中包含你发布的表单。你可以使用不同的include()语句来包含不同的文件。 - Adam Konieska
在form(s).php中编写其他表单并提供一些参数进行选择怎么样?例如:如果($formchoose == "insert"),则打印表单。但是再次强调,不要使用echo。只需使用大括号{}将所有内容自动包含其中即可。 - Marco-dev
@MarkWuji 当然可以。有几种不同的方法可以实现这个目标。我更新了答案,展示了几个选项。 - Adam Konieska
好的,这样会起作用吗?如果是的话,那正是我想要的,我会尝试一下,我没想到这样也可以工作 :) 但是,在一个"case"之后不需要加上"break"吗? - Marco-dev
是的,你需要使用break。 - Adam Konieska

0

另一个可以帮助制作动态表单的想法:

some_dynamic_form.php

<?php
function getDynamic($form)
{
    switch ($form) {
        case 'form1':
            return array('hello', 'world', '1');
        case 'form2':
            return array('hello', 'from', '2');
    }
}

?>

index.html

<?php
require_once 'some_dynamic_form.php';
$dynamicForm = getDynamic('form1');
?>
<html>
<body>
<form action="#">
    <?php foreach ($dynamicForm as $param): ?>
        <input type="text" name="<?php echo $param ?>" />
    <?php endforeach; ?>
</form>
</body>
</html>

你可以随意发挥,让它变得更好 :) 创建一个表单类使其成为 OPP


我有一个非常类似的想法,但问题是,我不想使用echo,因为它带有括号并且看起来很丑,但我想我没有太多选择... - Marco-dev
你可以随时使用已知的MVC框架,这些框架可能会为你提供所有工具,使代码看起来更易读(推荐 - Laravel)。 - Yair.R
好吧,现在加入一个框架可能有点晚了!因为如果我早知道它们的话,我会在第一时间添加它们的!这是我的第一个项目,所以我还没有准备好应对所有情况 :) - Marco-dev

0

你可以查看PHP include()(包含示例)。

它很容易使用,你只需要写: <?php include 'my_file.php'; ?>

由于你可以在一个.php文件中编写HTML/JS,因此可以使用它来包含页面的部分内容。


我想在不同的页面上打印不同的内容。使用那种方法,似乎我需要为所需的每个部分都创建一个文件!而且我无法真正控制内容... - Marco-dev
1
@MarkWuji,您可以在任何地方包含相同的文件,并在该文件中使用条件来控制输出,根据加载的页面进行操作。无论如何,您应该注意到includerequire使用的是服务器路径,而不是域名路径。 - Qirel
你可以尝试使用 Mustache https://github.com/janl/mustache.js 这样的模板引擎。你的页面将作为“基础”,JS 将填补空白(你也可以在 PHP 中做模板,http://www.smashingmagazine.com/2011/10/getting-started-with-php-templating/)。 - Lauromine

-1
我建议使用MVC方法来分离你的模型(数据),视图和控制器(应用程序的大脑)。
你还应该考虑使用像Twig这样的模板引擎。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接