![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| WolfAlone |
|
|||
![]() В экстазе ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 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 наше фсё! (с) Евгений Вольф |
|||
|
||||
| KLeonid |
|
|||
![]() 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 |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
с фреймами? Если без фреймов, то все содержимое страницы однозначно определяется url страницы. Если думать про ajax, то Вариант 1. Сваливаем все на клиента. Просто добавляем параметры после "якоря". После перезагрузки JS анализирует "якорные" значения и подгружает в нужные места нужные данные отдельными ajax запросами. Вариант 2. Сохраняем состояние в нужный момент. Картинку рисует сервер. Для ajax единственным способом связи с сервером, если не использовать url, остаются куки. В момент, когда юзер нажимает на "перезагрузка", срабатывает onbeforeclose, объекта window и в нем нужно сохранить в специально обученную куку урлы всех нужных дивов. На сервере специально обученный контроллер разберется с кукой и заполнит нужные дивы нужным содержимым. Кука должна ставится на пару- тройку секунд, и принудительно удаляться после получения страницы, чтобы не мешать нормальной работе сайта. С Оперой будут глюки, но глюки - это их принципиальная позиция... -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| KLeonid |
|
|||
![]() Entropy ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 5.7.2007 Где: Shpongleland Репутация: 1 Всего: 1 |
Для этого есть готовое решение - http://plugins.jquery.com/plugin-tags/route . Хотя, честно говоря, я ее использовать не стал, сделал свой более простой и легкий аналог, который имеет только необходимый мне функционал. |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
-------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| WolfAlone |
|
|||
![]() В экстазе ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1010 Регистрация: 16.9.2008 Где: Рай Репутация: 1 Всего: 5 |
ksnk, подведём, так сказать итоги?
-------------------- И сказал Бог: "Тогда я построю свой мир с блэк-джеком и шлюхами!" Ф топку Ubuntu, Debian наше фсё! (с) Евгений Вольф |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
А что там подводить? Что требуется получить? в первом варианте появляется возможность сохранить ссылку и кликнув по ней получить то-же наполнение, что и было накликано. Это большая и непреходящая польза, однако предполагает дополнительный(ые) запросы на сервер при первом клике. В добавок адресная строка может вместить только ограниченное количество информации. во втором варианте просто решается проблема кнопки "reload". Никакого сохранения состояния приложения нет и не предполагается. Я не ощущаю потребности привязывать эти решения к какому-то фреймворку, однако , вероятно, народ понаписал чего-то про это - искать по словам "ajax history <мой любимый фреймворк>" -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| KLeonid |
|
|||
![]() Entropy ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 5.7.2007 Где: Shpongleland Репутация: 1 Всего: 1 |
ksnk, то, что я не использовал готовый плагин, не говорит о том, что он плохой
Просто в моем случае его функционал избыточен. Т.к. мне не нужно восстанавливать ВСЕ возможные действия, а только несколько из них. А это поиск объектов (#module/search/searchtext), поиск и загрузка данных конкретного объекта (#module/load/objid), поиск с загрузкой и отображением данных объекта в информационном диалоговом окне (#module/view/objid). И служит это не для навигации (обработка "назад" не работает), а для сохранения и обмена ссылками на конкретные объекты. Код JS занимает около 20 строк, а в PHP вообще ничего добавлять не нужно. И действительно, PHP-фреймворк тут не важен Если касаться фреймворков, то тут можно кешировать шаблоны, части шаблонов (партиалы), DQL запросы и ответы в Doctrine, хранить состояния целых объектов со всей related-иерархией, сессии, настройки и прочие переменные. Вот тут как раз симфони и доктрина очень помогают. WolfAlone, если вас интересует именно серверное кеширование состояния объектов, то могу рассказать как это можно реализовать. Это сообщение отредактировал(а) KLeonid - 4.4.2011, 18:00 |
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |