Как сохранить структуру моего меню - PullRequest
0 голосов
/ 11 июня 2011

Я создаю веб-сайт и хочу, чтобы меню создавались динамически. Факторами, которые могут влиять на меню, являются положение страницы в иерархии сайта, уровень доступа пользователя, просматривающего страницу, и тип страницы (публикация новостей, сведения о событии, страница продукта и т. Д.).

Изначально я думал о создании базы данных mysql, содержащей элементы меню с внешними ключами и дополнительную информацию для каждого элемента (целевой URL-адрес элемента меню, родительский элемент меню, заголовок элемента и т. Д.). Но я начал сталкиваться с проблемами упорядочения элементов, многослойных меню и нескольких меню.

Тогда я подумал, зачем использовать плоскую реляционную базу данных, если у меня может быть xml-файл, у которого явно указаны структура и порядок. Это редко изменится, страницам придется запрашивать базу данных MySQL, чтобы получить их содержимое, в нее могут входить некоторые идентификаторы меню.

Можете ли вы увидеть какие-либо подводные камни этого метода? У меня нет большого опыта работы с XML, кроме как использовать его в качестве шаблона, который я использую для создания других структур. Насколько легко манипулировать в php и javascript?

Ответы [ 2 ]

1 голос
/ 11 июня 2011

Если иерархия меню должна была быть создана один раз и обновляться крайне редко, вы можете сохранить объект как сериализованный массив / объект по вашему выбору. Преимущество здесь в том, что serialize() / deserialize() значительно быстрее, чем синтаксический анализ XML. Для этого вам придется написать код для обновления сериализованного объекта / массива, но вы должны сделать это и для XML. Это также сохранит предпочтение кода быть XML и уменьшит переносимость. Con для этого не слишком переносим за пределами PHP, а Pro это действительно быстро

Вы можете применить json_encode / json_decode вместо сериализации, если хотите сохранить его более переносимым. Con для этого json_encode медленнее, чем сериализация, pro более переносима на другие языки, такие как saayyy, Javascript.

В защите MySQL вы можете хранить / добавлять / удалять элементы в иерархии без использования описанного вами метода, используя список смежности , что делает вещи немного более компактными. Слегка искривляйте разум, чтобы быстрее обдумать его, быстрее, если список станет большим и вечно изменяемым во многих различных форматах.

0 голосов
/ 11 июня 2011

Он будет работать с XML, например, с SimpleXML. Однако XML немного потребляет память и процессор.

Самый удобный способ - когда вы можете держать структуру меню дырки как вложенный массив. Так, может быть, вы можете определить свою структуру непосредственно в нативном PHP? Вы можете создать один файл:

<?php return array(
/* put your nested array structure here */
);

И назовите эту структуру в своей логике так:

<?php
$structure = include('structure.php');

Эта техника не так хорошо известна, но она действительно легкая и прямолинейная!

В противном случае вы можете использовать parse_ini_file () или остаться с XML или проанализировать его непосредственно в массиве.

Когда вы возвращаетесь к базе данных решений, возможно, «вложенные наборы» могут вам помочь однажды (если вам нравятся сложные, но умные вещи ;-)).

...