如何使我的 HTML 模板对 1 个以上的表格有用?

How can I make my HTML template useful for more than 1 table?

提问人:VeroBot 提问时间:11/9/2023 更新时间:11/9/2023 访问量:31

问:

我制作了一个HTML文件,其中包含表格的模板。

<body>

**#HeadingGoesHere#**

<table>
        <thead>
            <tr>
            **#TableHeading#**      
            </tr>
        </thead>
        <tbody>
    **#TableBody#**
    </tbody>
    <tfoot>
    **#TableTotals#**
    </tfoot>
</table>
</body>

我有一个PHP程序,它使用str_replace来填充表格。这对于创建 1 个表非常有用,但是我需要为 1 个或多个表实现这一点。使用我的 HTML 模板,我认为这是不可能的,因为它只允许创建一个表,而我需要创建 1 个或多个表。

我在 HTML 和 PHP 方面不是很有经验,所以我不确定是否有办法使用 HTML 模板来做到这一点,但我没有找到任何东西。

php html-表格

评论

0赞 KIKO Software 11/9/2023
表格可能会有很大差异。如果你想使用 PHP 生成它们,为什么不使用 OOP?例如:github.com/donquixote/cellbrush 我自己没有用过这个,但看起来很容易使用。像这样的生成器还有很多,或者你可以自己编写。
0赞 ADyson 11/9/2023
删除正文标签。然后你就得到了一个可重复使用的片段,你可以随意插入到一个更大的文档中。P.s. 已经有许多可用于 php(和 javascript)的模板引擎。我会谨慎地重新发明已经存在的东西,并且可能比你的解决方案更成熟 - 当然,除非你有一些现有工具无法满足的特定要求

答:

0赞 Kevin Waterson 11/9/2023 #1

我会使用使用DOM的现有解决方案。 这将为您提供所需的灵活性,并确保输出的 HTML 格式正确。 下面的这个基本示例演示了如何开始,并创建了一个可重用的类,可用于在任何项目中生成任何表。

<?php
    
        class table extends DomDocument{
    
            /**
             * This variable holds the table
             * @access      private
             */
            private $table;
    
            /**
             * Constructor, sets up the root element
             */
            public function __construct(){
                    parent::__construct();
                    $table = self::createElement('table');
                    $this->table = parent::appendChild($table);
            }
    
            /**
             * Appends a child to the root node ($table)
             * @access      public
             * @param       domNode $child
             * @return      void
             */
            public function appendChild(domNode $child):void {
                    $this->table->appendChild($child);
            }
    
            /**
             * Returns a string representation of the table
             * @access      public
             * @return      string
             */
            public function __toString() :string{
                    return parent::saveHTML();
            }
    }

    $table = new table;
    
    // create the <thead>
    $thead = $table->createElement('thead');
    // create the table column headings
    $th = $table->createElement('th', 'Heading 1');
    $thead->appendChild($th);
    $th = $table->createElement('th', 'Heading 1');
    $thead->appendChild($th);
    $th = $table->createElement('th', 'Heading 1');
    $thead->appendChild($th);
    // add the head to the table
    
    
    // create the <tbody>
    $tbody = $table->createElement('tbody');
    
    // create a table row
    $tr = $table->createElement('tr');
    // create a table data cell
    $td = $table->createElement('td', 'Col1 Row 1');
    $tr->appendChild($td);
    $td = $table->createElement('td', 'Col2 Row 1');
    $tr->appendChild($td);
    $td = $table->createElement('td', 'Col3 Row 1');
    $tr->appendChild($td);
    // add the above row to the tbody
    $tbody->appendChild($tr);
    // create a second table row
    $tr = $table->createElement('tr');
    // create a table data cell
    $td = $table->createElement('td', 'Col1 Row 2');
    $tr->appendChild($td);
    $td = $table->createElement('td', 'Col2 Row 2');
    $tr->appendChild($td);
    $td = $table->createElement('td', 'Col3 Row 2');
    $tr->appendChild($td);
    // add the above row to the tbody
    $tbody->appendChild($tr);
    
    
    // create the <tfoot>
    $tfoot = $table->createElement('tfoot');
    // create the table column headings
    $th = $table->createElement('th', 'Foot 1');
    $thead->appendChild($th);
    $th = $table->createElement('th', 'Foot 2');
    $thead->appendChild($th);
    $th = $table->createElement('th', 'Foot 3');
    $tfoot->appendChild($th);
    
    // add the thead to the table
    $table->appendChild($thead);
    // add the tbody to the table
    $table->appendChild($tbody);
    // add the tfoot to the table
    $table->appendChild($tfoot);
    echo $table;