希望有人能提供帮助,我目前正在为游戏手册编写页面,我正在使用这里找到的两个函数,一个是从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";
希望我已经解释了我自己和我想问的问题。
提前感谢大家的阅读:)
发布于 2018-03-28 07:52:58
你应该学习现代web框架是如何工作的。它们将view, the model and the controller分开。模型是应用程序的逻辑体系结构,控制器是路由和呈现每个页面的代码,视图是所有html输出和样式。
查看你的代码,我会首先分离视图。在这里,我已经完成了我所说的第一步。这只是第一步,我推荐你到learn a few (a lot of) programming concepts,使用composer组件,深入研究百万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自负
https://stackoverflow.com/questions/49516542
复制