Всем привет. Передо мной поставили задачу - реализовать каталог. Что такое каталог в моём понимании: это иерархическая структура, имеющая один корень и множество ветвей. У каждой ветви может быть много подветвей. На концах ветвей - листья. Лист должен содержать в себе текстовое описание, ссылку на HTML файл с описанием, ссылку на картинку. Для каталога должна быть административная часть, позволяющая добавлять/удалять/редактировать ветви и листья. Реализация на php + MySQL. В чём, собственно, у меня проблема. Я могу реализовать структуру, движок и т.п. Вопрос в том, как удобно сделать выбор HTML файлов и файлов-картинок для листьев? В каталоге может быть больше 100 листьев на одной ветке. Как реализовать в административной части выбор этих файлов для каждого листа? И как организовать хранение этих файлов на сервере? Как организовать каталоги?
взял выбрал всё, разбил по страницам. вывел для нужной страници нужные файлы. каталоги как удобно. если не можете этого сделать, нечего на работу устраиваться.
гм. Я спрашиваю про удобную реализацию административной части. Если не умеете читать - нечего советовать.
Hight, для хранения иерархической структуры гораздо лучше использовать структуру типа nested sets. То, что Вы предложили, подходит для очень маленьких сайтов. Меня интересует вопрос связи файлов с листьями
Ну добавь в таблицу уровень вложенности. В чём проблема. Хм. А хранить путь и имя файла в таблице, не?
С какими листьями? Файл это такой же узел дерева. Только он не может иметь потомков в отличии от каталога.
Nested sets - это не только уровни вложенности. Это принципиально другой подход к иерархической структуре. Ребят, с созданием таблицы в БД у меня всё просто. Этот вопрос уже решён. Листья, как я уже писал - это крайние элементы иерархической структуры. (см. пилотный пост). Лист состоит из заголовка (имени), описания, картинки и HTML файла. Конечно, могут быть и другие поля. Но это сейчас не принципиально. Т.е. в каждый лист - каждый элемент каталога - администратор может прикрепить картинку и файл. В таблице БД будет предусмотрено для них два поля. Вот только что хранить в этих полях? Самое простое решение - "в лоб" - это хранить пути к нужным файлам относительно папки /upload/, например. Но это - потенциальная уязвимость сайта, ибо передавать пути в чистом виде (/upload/images/12.jpg) не рекомендуется, чтобы не раскрывать структуру сайта. Да и к тому же, как организовать хранение этих файлов на сервере тогда? В каких папках? Все картинки вместе? Тогда в одной папке может быть несколько тысяч файлов. Как из них выбирать?
Мда, что-то всех пробило. Один die() использует чтобы ошибки не показывать. Второй не хочет выдавать путь к картинкам на сайте. В чем прикол? Вот есть у вас дерево категорий? Вот и отобразите его структуру на файловую систему 1 к 1му. Что может быть проще?
PHP: <?php define('_DS', DIRECTORY_SEPARATOR); $path = 'files'; $path .= _DS.((int)($id / 1000))._DS.$id; ну вот так, например, храните свои файлы. Путь будет привязан к id и с тормозами ФС не скоро столкнётесь
1/0. /images/parent_id/id.jpg ИМХО, еще лучше - повторить иерархию на структуре каталогов, но если узел поменяет родителя, то и каталог с файлами должен переместиться.