Создать файл XML из цикла PHP

Я создаю 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 под вводом текста, когда мы нажимаем на предложение. Но это уже другая проблема …

Любая помощь будет оценена. 🙂

0

Решение

Я думаю, что проблема в том, что когда вы строите первый $pages массив, ваше использование dirname($x), Это берет имя каталога каталога. Таким образом, glob () возвращает путь faq/professionals/1 и вы берете имя каталога этого, вы в конечном итоге faq/professionals,

Поэтому я думаю, что все, что вам нужно изменить, это настройка URL …

$pages [] = array(
'title' => file_get_contents($x.'/question.txt'),
'url' => $x
);
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]