我正在开发一个项目,这是一种用HTML和PHP(基于Bootstrap)制作的常见问题解答。
一些HTML / PHP知识有限的人需要定期更新它,所以我决定使用PHP中的“include”功能来调用一些.txt文件。然后,将更新它的人只需要修改简单的.txt文件,这不需要任何编码知识。
文本文件存储在faq / main-category / sub-category / 1 / question.txt中,与“answer.php”相同(均在同一文件夹中)。
常见问题项目用数字标识(您可以在下面的屏幕截图中看到)。这些数字指的是文件所在的目录(上面的.txt文件路径中的“1”)。
Screenshot of list of FAQ items
现在,问题是:我想允许修改它的人轻松添加一些新的FAQ项目。他们的想法是只需要在FTP服务器上创建一个新文件夹(比方说“4”),它就会自动列在常见问题解答中。
为此,我需要插件检测FTP服务器中的所有项目并列出所有项目。我相信循环是可能的,但是,我不知道如何......
任何人都可以帮忙吗?任何帮助将不胜感激! :)
以下是截图中第一个FAQ项目的当前代码:
<div id="accordion" role="tablist">
<div class="card">
<div class="card-header d-flex w-100 justify-content-between" role="tab" id="headingOne">
<h5 class="mb-0">
<a data-toggle="collapse" href="#collapseOne" role="button" aria-expanded="true" aria-controls="collapseOne">
<?php include('../faqs/professionals/eligibility-conditions/1/question.txt'); ?>
</a>
</h5>
<small>1</small>
</div>
<div id="collapseOne" class="collapse" role="tabpanel" aria-labelledby="headingOne" data-parent="#accordion">
<div class="card-body">
<div><p><?php include('../faqs/professionals/eligibility-conditions/1/answer.txt'); ?></p></div>
</div>
</div>
</div>
您将看到两个“包含”代码,用于调用问题和答案的.txt文件。
答案 0 :(得分:0)
<?php
foreach (glob("../faqs/professionals/eligibility-conditions/*",GLOB_ONLYDIR) as $foldername) {
?>
<div id="accordion" role="tablist">
<div class="card">
<div class="card-header d-flex w-100 justify-content-between" role="tab" id="headingOne">
<h5 class="mb-0">
<a data-toggle="collapse" href="#collapseOne" role="button" aria-expanded="true" aria-controls="collapseOne">
<?php include($foldername.'/question.txt'); ?>
</a>
</h5>
<small>1</small>
</div>
<div id="collapseOne" class="collapse" role="tabpanel" aria-labelledby="headingOne" data-parent="#accordion">
<div class="card-body">
<div><p><?php include($foldername.'/answer.txt'); ?></p></div>
</div>
</div>
</div>
<?php
}
?>
答案 1 :(得分:0)
我不确定你的应用程序结构是什么,也许你正在使用MVC架构,但你可以像下面这样做。
创建一个PHP函数,它将返回一个带有问题和答案的数组
<?php
function get_faqs(){
$folderpath = 'faqs/shared/'; //change as per your desired path
if(scandir($folderpath)){
$file_arr = scandir($folderpath);
foreach ($file_arr as $val){
if($val == '.' || $val == '..'){
continue;
} else if(scandir($folderpath.$val)){
$faq_arr = scandir($folderpath.$val);
foreach ($faq_arr as $file){
if($file == '.' || $file == '..'){
continue;
} else if($file == 'question.txt'){
$faq_final[$val]['question'] = file_get_contents($folderpath.$val.'/'.$file);
} else if($file == 'answer.txt'){
$faq_final[$val]['answer'] = file_get_contents($folderpath.$val.'/'.$file);
}
}
}
}
}
return $faq_final;
}
?>
然后在HTML中迭代该数组,如下所示
<?php
$faqs = get_faqs(); // you need to call this in controller if you have MVC application
?>
<div id="accordion" role="tablist">
<?php foreach ($faqs as $num => $data) { ?>
<div class="card">
<div class="card-header d-flex w-100 justify-content-between" role="tab" id="headingOne">
<h5 class="mb-0">
<a data-toggle="collapse" href="#collapseOne" role="button" aria-expanded="true" aria-controls="collapseOne">
<?php echo $data['question']; ?>
</a>
</h5>
<small><?php echo $num; ?></small>
</div>
<div id="collapseOne" class="collapse" role="tabpanel" aria-labelledby="headingOne" data-parent="#accordion">
<div class="card-body">
<div><p><?php echo $data['answer']; ?></p></div>
</div>
</div>
</div>
<?php } ?>
</div>