Я создаю livesearch для FAQ, и для этого мне нужен XML-документ, в котором будут храниться предложения livesearch.
Проблема в том, что часто задаваемые вопросы будут обновляться, и я не хочу каждый раз прикасаться к коду.
Поэтому я пытаюсь создать PHP-файл, который генерирует новый XML-файл при его открытии. Поскольку в разных папках находится много пунктов FAQ, мне нужно, чтобы скрипт автоматически находил все пункты FAQ в определенных каталогах. Элементы FAQ хранятся в TXT-файлах, которые хранятся в каталогах, в которых в качестве имен файлов (1, 2, 3 и т. Д.) Используются числа, поэтому я могу с легкостью добавлять, изменять, удалять их.
Путь будет выглядеть так: FAQs / Сфера / 1 / question.txt или же FAQs / Сфера / 2 / question.txt для второго пункта часто задаваемых вопросов или же FAQs / студентов / 1 / question.txt для пункта часто задаваемых вопросов в другой теме.
Например, если я хочу добавить новый элемент FAQ, я бы просто создал папку, скажем, «3», и добавил 2 текстовых файла внутри (question.txt а также answer.txt). Затем я запускаю сценарий PHP, чтобы файл XML обновлял предложения с учетом нового пункта часто задаваемых вопросов «3».
Мне удалось создать сценарий, который создает файл XML на основе содержимого файла TXT. Однако я не могу заставить его «обнаружить» все папки (где находятся элементы 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 под вводом текста, когда мы нажимаем на предложение. Но это уже другая проблема …
Любая помощь будет оценена. 🙂
Я думаю, что проблема в том, что когда вы строите первый $pages
массив, ваше использование dirname($x)
, Это берет имя каталога каталога. Таким образом, glob () возвращает путь faq/professionals/1
и вы берете имя каталога этого, вы в конечном итоге faq/professionals
,
Поэтому я думаю, что все, что вам нужно изменить, это настройка URL …
$pages [] = array(
'title' => file_get_contents($x.'/question.txt'),
'url' => $x
);
Других решений пока нет …