Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Хранение состояния объектов 
:(
    Опции темы
WolfAlone
Дата 3.4.2011, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


В экстазе
***


Профиль
Группа: Завсегдатай
Сообщений: 1010
Регистрация: 16.9.2008
Где: Рай

Репутация: 1
Всего: 5



Доброго времени суток! Вопрос немного абстрактен, но я постараюсь его расписать как можно подробнее.

Представим себе, что у нас есть некий сайт, на котором загрузка всего контента производиться через AJAX. То есть, мы имеем главную (основную) страницу с именованными (id='xyz') слоями (div). На уровне FrameWork'a реализуется элементарно. Сначала с помощью JS (AJAX) во все необходимые слои подгружаются "куски HTML-кода", а затем при помощи того же AJAX в какой-то конкретный слой загружается некий другой, необходимый нам кусок HTML-кода (например в слой <div id="content"></div>, загружается очередная страница фото галереи).

Вопрос заключается вот в чём: при использовании AJAX всё, что было загружено в какие-то конкретные части страницы остаётся, так сказать, "не тронутым". То есть, не изменяет своего содержимого. При использовании классического способа (без JS и AJAX) - нам необходимо "запоминать", куда и что было загружено, что бы при перезагрузке страницы загрузить это же, туда же повторно. То есть, проще говоря, некоторый объект должен хранить своё состояние.

Собственно сам вопрос: хотелось бы узнать, как подобный функционал реализуете ВЫ? То есть, хотелось бы услышать конкретно Ваш способ решения данного вопроса. Хотя, теоретические доводы я тоже выслушаю с удовольствием.

P.S. Больше всего интересует решение этого вопроса в трёх вариантах:
1. CodeIgniter 2
2. Yii 1.1
3. "Чистый" PHP 5


--------------------
И сказал Бог: "Тогда я построю свой мир с блэк-джеком и шлюхами!"

Ф топку Ubuntu, Debian наше фсё!

(с) Евгений Вольф
PM MAIL WWW ICQ Skype   Вверх
KLeonid
Дата 4.4.2011, 07:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Entropy
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 5.7.2007
Где: Shpongleland

Репутация: 1
Всего: 1



Не очень понятна суть вопроса. Что и где сохранять?
Я как раз работаю над проектом, где грузится одна страница, и далее все управление передается ajax. Т.е. сначала грузится только общий функционал, и управление имеющимися на странице контроллерами (кнопки, ползунки, поля, переключатели...), а затем, при вызове какой-либо ф-ции может подгружаться дополнительный код, например для управления открывшимся диалоговым окном. Все подгруженные ajax'ом json-объекты кешируются в браузере и сохраняются до перезагрузки страницы. На стороне сервера объекты (Doctrine ORM) кешируются в APC.
Использую symfony framework и JQuery.
Как по мне, с кешированием никаких проблем, а вот взаимодействие JS/DOM<->PHP как раз таки достаточно проблемное место. Правда сложность не всегда видна на начальных этапах разработки, но в последствии вылазит раздутым и запутанным кодом.
Короче нет нормального контроллера... пришлось писать свой, но он пока далек от идеала.

Это сообщение отредактировал(а) KLeonid - 4.4.2011, 07:29
PM MAIL   Вверх
ksnk
Дата 4.4.2011, 08:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Цитата(WolfAlone @  3.4.2011,  23:58 Найти цитируемый пост)
При использовании классического способа (без JS и AJAX) 

с фреймами? 
Если без фреймов, то все содержимое страницы однозначно определяется url страницы.

Если думать про ajax, то 

Вариант 1. Сваливаем все на клиента.
Просто добавляем параметры после "якоря". После перезагрузки JS анализирует "якорные" значения и подгружает в нужные места нужные данные отдельными ajax запросами.

Вариант 2. Сохраняем состояние в нужный момент. Картинку рисует сервер.
Для ajax единственным способом связи с сервером, если не использовать url, остаются куки. В момент, когда юзер нажимает на "перезагрузка", срабатывает onbeforeclose, объекта window и в нем нужно сохранить в специально обученную куку урлы всех нужных дивов.
На сервере специально обученный контроллер разберется с кукой и заполнит нужные дивы нужным содержимым. Кука должна ставится на пару- тройку секунд, и принудительно удаляться после получения страницы, чтобы не мешать нормальной работе сайта. С Оперой будут глюки, но глюки - это их принципиальная позиция...



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
KLeonid
Дата 4.4.2011, 08:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Entropy
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 5.7.2007
Где: Shpongleland

Репутация: 1
Всего: 1



Цитата

После перезагрузки JS анализирует "якорные" значения и подгружает в нужные места нужные данные отдельными ajax запросами.

Для этого есть готовое решение - http://plugins.jquery.com/plugin-tags/route .
Хотя, честно говоря, я ее использовать не стал, сделал свой более простой и легкий аналог, который имеет только необходимый мне функционал.
PM MAIL   Вверх
ksnk
Дата 4.4.2011, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Цитата(KLeonid @  4.4.2011,  08:25 Найти цитируемый пост)
Для этого есть готовое решение - http://plugins.jquery.com/plugin-tags/route


Цитата(KLeonid @  4.4.2011,  08:25 Найти цитируемый пост)
 я ее использовать не стал


Цитата(KLeonid @  4.4.2011,  08:25 Найти цитируемый пост)
сделал свой более простой и легкий аналог

 smile 


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
WolfAlone
Дата 4.4.2011, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


В экстазе
***


Профиль
Группа: Завсегдатай
Сообщений: 1010
Регистрация: 16.9.2008
Где: Рай

Репутация: 1
Всего: 5



ksnk, подведём, так сказать итоги?  smile 


--------------------
И сказал Бог: "Тогда я построю свой мир с блэк-джеком и шлюхами!"

Ф топку Ubuntu, Debian наше фсё!

(с) Евгений Вольф
PM MAIL WWW ICQ Skype   Вверх
ksnk
Дата 4.4.2011, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Цитата(WolfAlone @  4.4.2011,  16:45 Найти цитируемый пост)
ksnk, подведём, так сказать итоги? 

А что там подводить? Что требуется получить?

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

во втором варианте просто решается проблема кнопки "reload". Никакого сохранения состояния приложения нет и не предполагается.

Я не ощущаю потребности привязывать эти решения к какому-то фреймворку, однако , вероятно, народ понаписал чего-то про это - искать по словам "ajax history <мой любимый фреймворк>"


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
KLeonid
Дата 4.4.2011, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Entropy
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 5.7.2007
Где: Shpongleland

Репутация: 1
Всего: 1



ksnk, то, что я не использовал готовый плагин, не говорит о том, что он плохой smile.
Просто в моем случае его функционал избыточен. Т.к. мне не нужно восстанавливать ВСЕ возможные действия, а только несколько из них. А это поиск объектов (#module/search/searchtext), поиск и загрузка данных конкретного объекта (#module/load/objid), поиск с загрузкой и отображением данных объекта в информационном диалоговом окне (#module/view/objid). И служит это не для навигации (обработка "назад" не работает), а для сохранения и обмена ссылками на конкретные объекты. Код JS занимает около 20 строк, а в PHP вообще ничего добавлять не нужно.

И действительно, PHP-фреймворк тут не важен smile. Ведь никакого состояния объектов мы не сохраняем, только путь к их определенным состояниям. Вообще мы ведем речь о навигации, а кеширование - это несколько другая тема smile.
Если касаться фреймворков, то тут можно кешировать шаблоны, части шаблонов (партиалы), DQL запросы и ответы в Doctrine, хранить состояния целых объектов со всей related-иерархией, сессии, настройки и прочие переменные.
Вот тут как раз симфони и доктрина очень помогают.
WolfAlone, если вас интересует именно серверное кеширование состояния объектов, то могу рассказать как это можно реализовать.

Это сообщение отредактировал(а) KLeonid - 4.4.2011, 18:00
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0474 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.