我知道这听起来有点令人困惑,但请允许我进一步解释。
我有一个php函数打印表格顶部,包括html标签,如下所示:
function print_table_head (){
echo "<table>
<thead>
<tr>
<th>URL Link</th>
<th>Date Start</th>
<th>Date End</th>
<th>Total Budget</th>
<th>Daily Budget</th>
<th>Model Price</th>
<th>Unit Rate</th>
<th>Target Info</th>
<th>Product</th>
<th>Status</th>
<th>Total Units</th>
</tr>
</thead>
<tbody>";
}
我还有一个用html表结束标记关闭表的函数,如下所示:
function print_table_bottom(){
echo "</tbody>
</table>";
}
现在,桌子打印得很好,花花公子到这里。我得到了正确的表格和每件事。但我无法打印桌面和内容。这是我的主要功能用于打印整个表格的内容,包括它的正文和内容:
function print_table ( $status, $model, $bid, $url, $target, $tBudget,$dBudget, $tUnits, $sMonth, $sDay, $sYear, $eMonth, $eDay, $eYear ){
print_table_head();
echo "<tr>
<td><?php $url[0]; ?></td>
<td><?php $sMonth[0] / $sDay[0] / $sYear[0]; ?></td>
<td><?php $eMonth[0]; / $eDay[0]; / $eYear[0]; ?></td>
<td><?php $tBudget[0]; ?></td>
<td><?php $dBudget[0]; ?></td>
<td><?php $model[0]; ?></td>
<td><?php $targeting[0]; ?></td>
<td><?php $product[0]; ?></td>
<td><?php $status[0]; ?></td>
<td><?php $tUnits[0]; ?></td>
</tr>";
print_table_bottom();
}
每次调用“print_table”函数时,它都会打印表格顶部的标题。但它不会打印表格行/单元格。我不确定我做错了什么。有人可以为我清楚这一点并告诉我我做错了什么吗?
注意=我正在使用foundation-5。不确定这是否重要。
此外,使用的每个变量都是一个数组(它们都有1个元素......是的我知道,我可能没有为每个变量使用数组,但我想。)
编辑:
根据评论者的要求,我将提供调用print_table的代码:
<?php
//if the length of the array "status" is 1.
if (count($status)==1){
print_table ( $status, $model, $bid, $url, $target, $tBudget,$dBudget, $tUnits,$sMonth,$sDay,$sYear,$eMonth, $eDay, $eYear );
}
// please ignore this function.
else
print_table_with_multiple_rows ( $status, $model, $bid, $url, $target, $tBudget,$dBudget, $tUnits,$sMonth,$sDay,$sYear,$eMonth, $eDay, $eYear );
?>
答案 0 :(得分:2)
最简单的选择是重新格式化您的数据结构并使用此代码:
$data = // Structure: array([0] => array('url' => '', 'sMonth' => '', 'eMonth' => '', ...), [1] => array(...));
include 'templates/table.php';
<table>
<thead>
<tr>
<th>URL Link</th>
<th>Date Start</th>
<th>Date End</th>
<th>Total Budget</th>
<th>Daily Budget</th>
<th>Model Price</th>
<th>Unit Rate</th>
<th>Target Info</th>
<th>Product</th>
<th>Status</th>
<th>Total Units</th>
</tr>
</thead>
<tbody>
<?php foreach($data as $row) : ?>
<td><?php echo $row->url ?></td>
<td><?php echo $row->sMonth . "/" . $row->sDay . "/" . $row->sYear; ?></td>
<td><?php echo $row->eMonth . "/" . $eDay . "/" . $eYear; ?></td>
<td><?php echo $row->tBudget; ?></td>
<td><?php echo $row->dBudget; ?></td>
<td><?php echo $row->model; ?></td>
<td><?php echo $row->targeting; ?></td>
<td><?php echo $row->product; ?></td>
<td><?php echo $row->status; ?></td>
<td><?php echo $row->tUnits; ?></td>
<?php endforeach; ?>
</tbody>
</table>
这可能比其他代码更先进,但它通常是编写(OO)PHP的更合适的方法。但是,它可能需要重组您的所有代码。
目录结构:
--models
--informationmodel.php
--controllers
--abstractcontroller.php
--informationcontroller.php
--templates
--information
--table.php
首先是模型类。此模型反映了特定类型的数据 - 在这种情况下,您在表中显示的任何类型的信息。这个类不应该操纵数据 - 它只是一个存储所需数据的类。
class InformationModel { //Where "Information" is changed to describe this data type
private $data;
public function __construct($data = array()) { //pass the things as an associative array
$this->data = $data;
}
public function __set($key, $value) {
$this->data[$key] = $value;
}
public function setData($data) {
$this->data = $data;
}
}
这是一个抽象控制器。控制器是存储应用程序逻辑的位置。这应该包括数据操作,模型检索等。每个控制器使用抽象类来访问所有控制器通用的特定函数。
abstract class AbstractController {
// add more functions for all controllers here
public function renderTemplate($template, $data) {
include $template;
}
}
这是实际的控制器。在这个控制器中我们可以定义动作 - 在这种情况下,我们将定义一个表动作。这意味着我们可以调用此操作来呈现包含我们提供的数据的表。这很有用,因为如果我们想要改变数据的呈现方式,就很容易这样做。如果我们将其设置为允许您指定数据,我们甚至可以使数据以不同于HTML的格式呈现。现在,我们只需要一个简单的操作:加载数据,并将其提供给模板。
require_once 'models/informationmodel.php'; // note: autoloading would be preferable
class InformationController extends AbstractController {
public function tableAction($rawData) {
$data = new InformationModel($rawData);
$this->renderTemplate('templates/information/table.php', $data);
}
}
这是一个模板。您可以在此处定义希望显示代码的方式。如果你想更进一步,请查看模板引擎,如Twig(我的个人推荐)。这纯粹是为了呈现数据。正如您将看到的,我将模板放入一个文件夹中以显示特定类型的信息:数据类型“信息”的表格(或者您将其更改为的任何内容)。这有助于您保持模板的有序性。
<table>
<thead>
<tr>
<th>URL Link</th>
<th>Date Start</th>
<th>Date End</th>
<th>Total Budget</th>
<th>Daily Budget</th>
<th>Model Price</th>
<th>Unit Rate</th>
<th>Target Info</th>
<th>Product</th>
<th>Status</th>
<th>Total Units</th>
</tr>
</thead>
<tbody>
<?php foreach($data as $row) : ?>
<td><?php echo $row->url ?></td>
<td><?php echo $row->sMonth . "/" . $row->sDay . "/" . $row->sYear; ?></td>
<td><?php echo $row->eMonth . "/" . $eDay . "/" . $eYear; ?></td>
<td><?php echo $row->tBudget; ?></td>
<td><?php echo $row->dBudget; ?></td>
<td><?php echo $row->model; ?></td>
<td><?php echo $row->targeting; ?></td>
<td><?php echo $row->product; ?></td>
<td><?php echo $row->status; ?></td>
<td><?php echo $row->tUnits; ?></td>
<?php endforeach; ?>
</tbody>
</table>
如您所见,我更改了数据结构:数据按行进行操作,这些行每个只包含一个元素。使用模板引擎将减少<?php echo $row->status ?>
结构的丑陋 - 在Twig中,它看起来像:{{ row.status }}
。
然后,实际使用此代码:
require_once "controllers/informationcontroller.php"; //even better: use autoloading
// $data = get your data in here somewhere.
$info = new InformationController();
$info->tableAction($data); // prints out a table;
显然这是很多新信息,但它很有用。如果你花时间学习面向对象的PHP(OOPHP),MVC,模板等等,你将是一个更好的程序员,你的代码将更容易编写和维护。更多主题:Twig,自动加载,依赖注入/控制反转,命名空间,路由
现在,模型类实际上没有做任何事情,我没有使用依赖注入(控制器中的模型类直接依赖,这是不赞成的),但基本概念在这里。现在,您可以直接将数据传递给控制器,甚至直接传递给模板。
免责声明:我尚未测试此代码。但是,无论如何都需要进行一些修改。如果你真的想用PHP编写网站,你应该考虑用这种方式构建它。
答案 1 :(得分:1)
function print_table ( $status, $model, $bid, $url, $target, $tBudget,$dBudget, $tUnits, $sMonth, $sDay, $sYear, $eMonth, $eDay, $eYear ){
print_table_head();
echo "<tr>
<td>{$url[0]}</td>
<td>{$sMonth[0]} / {$sDay[0]} / {$sYear[0]}</td>
<td>{$eMonth[0]} / {$eDay[0]} / {$eYear[0]}</td>
<td>{$tBudget[0]}</td>
<td>{$dBudget[0]}</td>
<td>{$model[0]}</td>
<td>{$targeting[0]}</td>
<td>{$product[0]}</td>
<td>{$status[0]}</td>
<td>{$tUnits[0]}</td>
</tr>";
print_table_bottom();
}
答案 2 :(得分:0)
我个人觉得这个更具可读性:
function print_table ( $status, $model, $bid, $url, $target, $tBudget,$dBudget, $tUnits, $sMonth, $sDay, $sYear, $eMonth, $eDay, $eYear ){
print_table_head();
?>
<tr>
<td><?= array_shift($url); ?></td>
<td><?= array_shift($sMonth), "/", array_shift($sDay), "/", array_shift($sYear); ?></td>
<td><?= array_shift($eMonth), "/", array_shift($eDay), "/", array_shift($eYear); ?></td>
<td><?= array_shift($tBudget); ?></td>
<td><?= array_shift($dBudget); ?></td>
<td><?= array_shift($model); ?></td>
<td><?= array_shift($targeting); ?></td>
<td><?= array_shift($product); ?></td>
<td><?= array_shift($status); ?></td>
<td><?= array_shift($tUnits); ?></td>
</tr>
<?php
print_table_bottom();
}
注意:如果它不起作用,可能是因为您的PHP不接受<?=
。在这种情况下,取代<?=
<?php echo
的所有内容。