У меня есть приложение, которое отображает файлы в каталоге (определяется $starting_file_path
), и когда нажимается на каталог, я использую jquery для ссылки $.post()
для ссылки на страницу и добавляю содержимое, предоставляющее мне содержимое каталога, который был нажмите. Все работает до сих пор. Единственная проблема заключается в том, что это работает только в одном каталоге. Если я попытаюсь нажать на каталог из недавно добавленного списка, он ничего не сделает. Я знаю, почему это так, потому что путь неправильный. Я не могу найти способ получить путь на основе уже заданного родительского пути.
здесь путь, по которому идет link
- это просто имя каталога
include "../app/bootstrap.php";
include "../src/controllers/DisplayContentsController.php";
$data = new DisplayContentsController();
$link = (isset($_POST['link']) ? $_POST['link'] : null);
if ($link != null)
{
$data->show($twig, $starting_file_path . '/' . $link);
}
else
{
$data->show($twig, $starting_file_path);
}
в if, где я добавляю имя файла в исходный путь. Это работает только для первого каталога. Мне нужно, чтобы он работал для каждого после этого. Так, например, это работает, если есть каталог css
потому что начальный путь - ../../
но когда я нажимаю на папку внутри css
скажу block_styles
он отправляет ../../block_styles
который не существует. Мне нужно отправить его ../../css/block_styles
. Может ли кто-нибудь помочь мне узнать, как это сделать динамически?
Проблема заключается в значениях, которые отправляются на сервер - это похоже на то, что единственным отправленным значением является последний узел в пути (например, путь: ../../css/block_styles
и браузер отправляет block_styles
),
Если вы хотите, чтобы он отправил ../../css/block_styles
, браузер должен знать полный путь. Вероятно, вам нужно вернуть полный путь из вашего вызова AJAX и сохранить его где-нибудь, отправив его вместе со следующим запросом.
EDIT: Хорошо, я попытаюсь расширить этот ответ. Здесь много предположений о том, как вы это делаете, потому что в вашем вопросе недостаточно подробностей - я не знаю, как выглядит HTML.
Итак, предполагая, что пользователь нажимает на ссылки (теги <a>
), он может выглядеть примерно так:
<a class="folder" id="../../css">css</a>
<script>
$("a.folder").on("click", function(event){
// get the path from the ID of the clicked element
var path = $(event.currentTarget).attr("id");
// do your AJAX POST, pass the path value, and update
// the DOM accordingly...
$.post(...);
});
</script>
Примечание. Я не уверен, поддерживает ли HTML значение ID .
и /
символы в нем - если нет, base64_encode
его с помощью base64_encode
или собственной схемы кодирования.
В этом примере идентификатор каждого элемента папки <a>
будет полным путем к папке, на которую он ссылается, и сервер получит полный путь. Все, что вам нужно сделать, это убедиться, что каждый тег <a>
имеет правильное значение id
.