我正在为常见问题解答构建一个livesearch,为了做到这一点,我需要一个XML文档来存储livesearch建议。
问题是常见问题解答会经常更新,我不想每次都要触摸代码。
因此,我正在尝试创建一个PHP文件,在我们打开它时会生成一个新的XML文件。由于不同文件夹中有许多FAQ项,我需要脚本自动查找某些目录中的所有FAQ项。 FAQ项目存储在TXT文件中,这些文件存储在使用数字作为文件名(1,2,3等)的目录中,因此我可以轻松添加/修改/删除它们。
路径如下所示: faqs / professionals / 1 / question.txt 或 faqs / professionals / 2 / question.txt 对于第二个常见问题解答项目或 faqs / students / 1 / question.txt ,查看其他主题中的常见问题项目。
例如,如果我想添加一个新的常见问题项目,我只想创建一个文件夹,让我们说" 3",并在里面添加2个文本文件(问题。 txt 和 answer.txt )。然后,我将运行PHP脚本,以便XML文件更新建议,同时考虑新的FAQ项目" 3"。
我能够创建一个基于TXT文件内容构建XML文件的脚本。但是,我无法做到"检测"所有文件夹(FAQ项目所在的位置)并将它们添加到XML文件中。
该脚本基于此页面:w3schools.com/php/php_ajax_livesearch.asp
以下是代码:
<?php
foreach (glob("../faqs/professionals/*",GLOB_ONLYDIR) as $x) {
$pages = array();
$pages [] = array(
'title' => file_get_contents($x.'/question.txt'),
'url' => dirname($x),
);
}
$doc = new DOMDocument();
$doc->formatOutput = true;
$r = $doc->createElement( "pages" );
$doc->appendChild( $r );
foreach( $pages as $link )
{
$b = $doc->createElement( "link" );
$title = $doc->createElement( "title" );
$title->appendChild(
$doc->createTextNode( $link['title'] )
);
$b->appendChild( $title );
$url = $doc->createElement( "url" );
$url->appendChild(
$doc->createTextNode( $link['url'] )
);
$b->appendChild( $url );
$r->appendChild( $b );
}
echo $doc->saveXML();
$doc->save("links.xml")
?>
一旦这个脚本工作,我会尝试让livesearch在点击建议时显示文本输入下面的answer.txt的内容。但这已经是另一个问题......
任何帮助将不胜感激。 :)
答案 0 :(得分:0)
我认为问题在于,当您构建第一个$pages
数组时,使用dirname($x)
。这是获取目录的目录名称。因此,glob()返回faq/professionals/1
的路径,并且您获取此目录名称,最终得到faq/professionals
。
所以我认为您需要改变的是设置网址...
$pages [] = array(
'title' => file_get_contents($x.'/question.txt'),
'url' => $x
);