希望有人可以提供协助,我目前正在为游戏手册编写页面,我正在使用我在这里找到的两个函数,一个用于从html文件中提取文本/格式,另一个用于从CSV文件中提取数据并插入进入一张桌子。如果我在页面中包含多个部分,那么我一直在复制代码。可以找到结果的示例here
正如您所看到的,该页面显示了三个部分,这是我想要的结果。我想知道的是,如果有一种比我目前正在做的更有效的方法,那就是复制代码并只更改我要导入的每个文件的变量?如您所见,变量名称由页面名称设置。以下是我正在使用的代码。
//function to display csv as table
function csvimport($filename, $header = false)
{
$handle = fopen($filename, "r");
echo '<table id="subman">';
//display header row if true
if ($header) {
$csvcontents = fgetcsv($handle);
echo '<tr>';
foreach ($csvcontents as $headercolumn) {
echo "<th>$headercolumn</th>";
}
echo '</tr>';
}
// displaying contents
while ($csvcontents = fgetcsv($handle)) {
echo '<tr>';
foreach ($csvcontents as $column) {
echo "<td>$column</td>";
}
echo '</tr>';
}
echo '</table>';
fclose($handle);
}
然后我使用以下内容选择要使用的CSV文件并显示为表格。
csvimport("$data", "true");
由变量$ data
定义//get page name from link or use manual as default
$page = $_GET['page'] ?? 'manual';
//combine page name with suffix and set page variables
$data = "{$page}.csv";
我对html使用类似的内容,如下所示。
$myfile = fopen("$text", "r") or die("Unable to open file!");
echo fread($myfile, filesize("$text"));
fclose($myfile);
所以我可以显示多个文件,以便复制代码并添加这些变量。
$data = "{$page}.csv";
$data2 = "{$page}2.csv";
$data3 = "{$page}3.csv";
希望我已经解释过自己以及我想要问的内容。
提前感谢大家阅读:)
答案 0 :(得分:0)
您应该了解现代Web框架的工作原理。他们将view, the model and the controller分开。 模型是应用程序的逻辑体系结构,控制器是路由和呈现每个页面的代码,视图是所有html输出和造型。
查看代码我将首先分开视图。在这里,我已经完成了我所说的第一步。这只是第一步,我建议你learn a few (a lot of) programming concepts使用作曲家组件深入研究百万个php(微)frameworks或roll your own中的一个。现在有许多机会要做php the right way。
分离控制器和模板
的index.php
function csvimport($filename, $delimiter = ',') {
$handle = fopen($filename, "r");
$output = [];
while ($csvcontents = fgetcsv($handle, 1024, $delimiter)) {
$output[] = $csvcontents;
}
fclose($handle);
return $output;
}
function tpl($fileName, $data = false) {
$rendered = "";
if (file_exists($fileName)) {
ob_start();
extract($data);
require($fileName);
$rendered = ob_get_contents();
ob_end_clean();
}
return $rendered;
}
$data['header'] = true;
$data['csvcontents'] = csvimport(CSV_FILE, ';');
echo tpl('table.tpl.php', $data);
table.tpl.php
<table id="subman">
<?php
$first = true;
foreach ($csvcontents as $row) :
if ($first) :
$first = false;
if ($header) :
$tag = 'th';
else:
continue;
endif;
else:
$tag = 'td';
endif;
?>
<tr>
<?php foreach ($row as $column) : ?>
<<?= $tag ?>><?= $column ?></<?= $tag ?>>
<?php endforeach; ?>
</tr>
<?php endforeach; ?>
</table>
索引有一些函数可以读取csv并渲染任何模板,模板包含所有html输出。这只是第一种方法,远不是生产就绪代码,使用风险自负never trust user input