Не понятно Есть объект. Он внутри себя собирает xml-дерево и записывает в одно из своих свойств. Этот объект на всех страничках одинаков, по-этому я посчитал что правильнее его будет серриализовать в сессии и потом в нужный момент ансериализовывать от туда. Не представите мое удивление, когда весь объект, кроме поля с деревом "вернулся" нормальный а на самое главное php мне ответил subj. Что может быть такое? Если чем поможет: дерево собирал simpleXML...
кхм.кхм... сами напросились В общем объект который собирает дерево: PHP: <?php class items { public $itemsXML; //В качестве параметра передаем собирать ли дерево при конструкте - труе - не собирать!!! function __construct($notFormsXMLTree=0) { if ($notFormsXMLTree) return 0; //Создаем хмл-дерево и корневой элемент $xmlStr ="<?xml version='1.0' encoding = 'UTF-8'?>\n<items>\n</items>"; $this->itemsXML = new simpleXMLElement($xmlStr); //Производим выборку базы данных и устанавливаем параметры корневого нода $query = "SELECT * FROM tbitems WHERE tbitems.id='0';"; $queryResult=mysql_query($query); if (!$queryResult) exit("Ошибка в запрсе при заполнении статей 0го уровня"); //Если есть элемент нулевого уровня if (mysql_num_rows($queryResult)) $this->getItems($queryResult); } public function getItems($queryResult, $currentItem=0) { if (!$currentItem) $currentItem = $this->itemsXML; //Определяем переменную-счетчик $i=0; while($itemData = mysql_fetch_assoc($queryResult)) { $currentItem->addChild('item'); $this->setItemData($itemData, $currentItem->item[$i]); $query = "SELECT * FROM tbitems WHERE tbitems.idMaster = '".$itemData['id']."' ORDER BY tbitems.sort ASC, tbitems.itemDate DESC"; $result = mysql_query($query); if (!$result) exit ("Ошибка в запросе"); if (mysql_num_rows($result)) { //Заполним рекурсивно все item'ы $this->getItems($result, $currentItem->item[$i]); } $i++; } } private function setItemData($itemData, $currentItem) { //Разберем полученные дынные foreach ($itemData as $attribute => $value) { //Заполним все непустые атрибуты. if (((!$value)&&($attribute!='id'))||(($attribute=='itemDate')||($attribute=='itemFullCaption')||($attribute=='itemShortCaption'))) continue; $currentItem->addAttribute($attribute, $value); } if (!$itemData['itemFullCaption']) $itemData['itemFullCaption'] = $itemData['itemFullCaption']; //Добавим узлы со значениями полного и короткого наименования $currentItem->addChild('itemShortCaption', $itemData['itemShortCaption']); $currentItem->addChild('itemFullCaption', $itemData['itemFullCaption']); } } ?> Теперь. Каждый раз при попадании на индексную главную страничку проверяем размер (и ваабще существование) массива $_GET и элемента массива $_SESSION['items']. Если они есть, то производим ансериалиазацию. Если не определено что-то - пересобираем объект заново. Тоже объект (clssPage), но он большой и по-этому выведу только кусок который за это отвечает. Так что не пугайтесь слова this: PHP: <?php $this->itemLevel=0; if (isset($_GET['idItem'])) { $this->itemLevel=count($_GET['idItem']); } if ((!$this->itemLevel)||(!isset($_SESSION['items']))) { //Заполним блоги из БД $idItem = array(); if (isset($_GET['idItem'])) $idItem=$_GET['idItem']; //Параметр 0 - неВыполнятьФормирование XML-дерева = Ложь. //Т.е. будет произведено формирование дерева $this->items = new items(False); } else { //В данном случае нет необходимости формировать дерево. Передадим его из сессии. //следовательно в качестве параметра для конструктора передадим true - не формировать дерево $this->items = new items(True); $this->items = unserialize($_SESSION['items']); } printr($this->items); ?> Вот такой вот код. Но сразу говорю, что когда то что сейчас xml-дерево было просто объектом все замечательно работало... Но пришло время повышать свой уровень
PHP не поддерживает десерриализацию объектов SimpleXML и DOM. Переводи в массив. http://php.ru/forum/viewtopic.php?t=7398
Как замечательно... Не понятно тогда для чего я это все делал.. проще не стало.. Да и в массивы смысла нет. Вложеннность объктов бешаная, а когда у меня было объектами, они еще и методы имели для работы с такими структурами. Тот же самый дом был. А если хранить в строке, а при работе ипмпортировать в симплХМЛ, думаю такое же возможно
Спасибо большое. Я уже выкрутился подобным же образом. Перед сериализацией все simplxml поля объекта пекидываешь в строку (asXML()). Потом спокойно сериализуешь. После ансериализации возвращаешь все обратно. Очень любопытно, конечно Но это, думаю, правильнее чем каждый раз делать бешеные выборки из БД. Sergey89 Респект и спасибо. Тема закрыта!