Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Работа с частями страницы (блоками)


Автор: 12345c 28.8.2006, 15:37
В настоящее время мы массово умеем работать с частями страницы обычно в 2 вариантах:
1) делать якоря на внутренностях страницы, чтобы организовать навигацию;
2) скрывать/показывать блоки кликом на управляющем объекте - заголовке или пункте меню.

Технология Ajax позволяет работать с содержимым более широко, появилась удобная и развиваемая возможность подгружать части страницы. Из -за объёма хранимой на странице информации продолжает быть актуальным сокрытие части страницы в свёрнутых блоках информации. Отдельно якоря и простые скрипты свёртки уже не подходят для управления страницей. Назревает необходимость сделать инстумент управления с рядом частоиспользуемых функций. Идеи по отображению содержимого страниц описывались в рамках темы "http://forum.vingrad.ru/index.php?showtopic=105344 ". Там шла речь о многообразии представлений одних и тех же данных сайта и описывались возможные представления их: 
Цитата
Содержимое контейнера данных может быть:
просто часть документа, html-текст;
...
список  - следующий уровень структуры;
список с внедрёнными в поток подсказками.
Здесь попробуем ограничить рамки осмотра представлений блоком - частью страницы, занимающим всю её ширину.

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

Автор: 12345c 28.8.2006, 18:39
Ссылка по теме: http://webplanet.ru/column/service/shepelev/2006/08/22/semanticweb.html

Цитата
Интересно, что в этом контексте понемногу всплывают недооцененные когда-то элементы систем "правильного гипертекста" - те, что готовы работать в поддержку Четырех Ценностей. Скажем, давняя идея Дугласа Энгельбарта о том, что ссылаться можно не только на статью целиком, но и на абсолютно любую ее часть, постепенно "находит себя" - сначала в ссылках-якорях, потом в http://www.eekim.com/software/purple/purple.html, и совсем недавно - в http://www.deepquote.net/, который позволяет сослаться на любую цитату на странице, не изменяя саму эту страницу. И это - определенно удобно. Даже претенциозный Сами-Знаете-Кто убрал из своего Ководства некогда активно пропагандируемое "якорям - нет" и снабдил каждый абзац Ководства purple number'ом (но у нас "все ходы записаны").



Автор: Sardar 28.8.2006, 23:39
12345c, а в чём  вопрос/проблема/идея?
Тенически тебе придёться указать адрес текста, который будет содержать параметры скрипту. Якоря будут работать хорошо если отдавать страницу селиком, где якор присутствует, будем сразу прыгать куда надо. Если реально отдавать малую часть по запросу,  то якорь можно принимать сктиптами и выдавать инфу, например:
.http://localhost/xml/workers/Sam Carter#birthday
выдаст <date timestamp="###" format="yyyy-mm-dd">1974-02-15</date>

В то время если обратиться:
.http://localhost/workers/Sam Carter
Выдаст персональную страницу. Тут всё от фантазии разработчика и заказчика.

В чём проблема то была? smile

Автор: 12345c 29.8.2006, 01:35
Или я подхожу издалека, или ты спешишь узнать, что будет дальше smile

Есть тут идея, я пишу её для порождения ассоциаций у читателей и вызывания подсказок с их стороны. Но если всё расскажу сам, это может быть неинтересно? Идея поставлена так: нужно иметь навигацию по частям страниц сайта. Примитивная механика якорей не подходит. Надо сделать удобную, юзабельную подсистему.

Автор: Sardar 29.8.2006, 02:08
Цитата(12345c @  29.8.2006,  00:35 Найти цитируемый пост)
Идея поставлена так: нужно иметь навигацию по частям страниц сайта. Примитивная механика якорей не подходит. Надо сделать удобную, юзабельную подсистему. 

Выше я привёл как я бы делал. Т.е. сделал бы три точки входа:
  •  / - для веб страничек, отдают HTML не зависимо от UserAgent (могут подстраиваться под поисковики)
  •  /xml - отдают XML, обычно маленькие инфо сервисы
  •  /wml - никогда не реализовывал, но реврайт ставлю... может руки дойдут smile
Далее путь до самого ресурса разбираемый картой ресурсов, обычно это модуль + аргументы. Просто аргументы в [], навигация (например /news/archive/2006/07/12) путями. Таким образом можно узнать только то, что я хочу отдать, а именно какие модули доступны у движка. Отсюда не могу понять в чём всё таки идея, ведь каждый реализует подобное уже не первый год. Или хочешь выработать какие то рекомендации для общественности? smile

Автор: 12345c 29.8.2006, 15:41
Каждый реализует (не первый год) динамическое управление блоками страницы? Что-то первый раз об этом слышу.

Автор: Sardar 29.8.2006, 16:35
12345c, тогда я не понял о чём ты. Обрисуй пример, обрисуй как "для дурака", т.е. клик сюда, будет то то smile

Автор: 12345c 29.8.2006, 20:26
Берём эту страницу, которая фигурировала в недавней теме как пример: http://js2.ru/files/article-DOM.shtml . У неё около 10 частей, из них 8 нижних свёрнуты. Разворачиваются по клику на боковой полосе бордюра возле текста.

Если внутренние ссылки указывают на свёрнутый блок, они не сработают. Клик по якорю прокрутит страницу не очень удобно (начало текста вверху). Указанный блок не подсветится. Много ещё можно придумать удобств для навигации, которые не мешает реализовать.

1. Например, сейчас скрипт сворачивания не очень заметен. Надо сделать, чтобы активная область для разворачивания переходила на заголовок.
2. Не очень хорошо описано понятие заголовка - каждый раз конкретный тег. Полезно будет, если при отсутствии выделенного заголовка скрипт сам бы выбирал начало текста.
3. Нет подсказки, какой размер блока скрыт под заголовком.
4. клик по скрытому якорю - логично, чтобы разворачивал блок с ним и подкручивал страницу. Если конец страницы - всё равно бы подкручивал так, чтобы указанный фрагмент с якорем был бы в середине окна. 
5. Отдельная функция перехода по якорю - подсветка фрагмента (сменить фон, нарисовать рамку, полосу слева или сделать серым весь остальной фон).
6. Другая функция - подгрузка раздела вместо разворачивания.

Это называется управление частями страницы.

Автор: dm9 30.8.2006, 14:05
Я думал об этом, очень интересная тема. Особенно всвязи с AJAX, который не модифицирует адресную строку и оставляет передачу ссылок на нашей программерской совести.

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

Автор: Sardar 30.8.2006, 14:45
Цитата(dm9 @  30.8.2006,  13:05 Найти цитируемый пост)
разумеется, после перехода по такой ссылке адресная строка должна чиститься, а информация передаваться через сессию.

dm9, на текущий момент ситуация: или аякс или смена адреса. Что бы сменить адрес нужна перезагрузка, только смена якоря перезагрузку страницы не вызывает, но! никак не отслеживаеться через JS. Можно отследить пользуя скрытую флешку (была тут тема, хотя не помню было ли там событие или всё таки по таймеру проверяли), но это изврат.

ИМХО, в смене адреса нет необходимости если есть хорошо видная ссылка на "текущую страницу" (в хлебных крошках например). Естественно по прямой ссылке сервер должен выдавать нужный контент, а после уже аякс вступает в работу.

Автор: dm9 30.8.2006, 15:15
Сардар, мы про одно и то же, но разными словами smile

Предположим, мы имеем AJAX-приложение и хотим зафиксировать его текущее состояние с тем, чтобы «передать ссылку другу». Компонентная модель подразумевает рекурсивный опрос всех компонентов страницы, и генерацию «текущего адреса». Это псевдо-адрес, на самом деле. Его нет. Это всего лишь главная страница (у AJAX-приложения только главная и есть) плюс куча параметров по подгрузке/разворачиванию компонентов.

Я там написал «Небольшая заметка», и это действительно так. Я подразумевал, что мы запрашиваем что-то вроде domain.com/1=c&1_4=wqw&1_5=112&1_5_6_6=asdzcZxc, расшифруем эти параметры, понимаем, какие компоненты надо подгрузить и пишем эти параметры в сессию. А потом делаем `Location: domain.com`, чтобы не портить адресную строку. А портить её нельзя потом, что состояние компонентов может измениться и не соответствовать текущему URL-у.

Вопрос о методе сериализации состояния компонентов в набор параметров остаётся для меня пока открытым.

Автор: 12345c 30.8.2006, 15:27
Sardar, отследить нельзя было только переходы по браузерным кнопкам истории в IE. Остальное всё работало (и те же кнопки в FF, Opera). Клики по ссылкам тоже хорошо отслеживаются. Поэтому на задействование отображения якорей в Аяксе в адресной строке немного недостаёт возможностей IE, и то при работе с кнопками истории. Выход - делать дублирующие кнопки истории для IE, а при попытке нажать браузерные выдавать предупреждение о желательности работы с дублирующими.

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


dm9, в плане связки с Аяксом я понимаю так, что должны существовать 2 представления УРЛа: нормальное и подгружаемое. Вид нормального представления адресной строки - обычный автоматический - каталог, страница, параметры. При навигации через Аякс (которая может начаться с любой страницы) адресная строка до значка "#" замирает или мы один раз принудительно переходим в красиво смотрящийся каталог, а затем вся информация после "#" должна содержать все параметры (каталог, страница, параметры), существующие в нормальном представлении. Например,

http://<какой-то сайт>/files/js/books/reference33.php?page=44
равносильно
http://<какой-то сайт>/#files/js/books/reference33.php?page=44
где всё, что после "#" - это имя якоря.

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

Добавлено @ 15:31 
Цитата(12345c @  30.8.2006,  15:27 Найти цитируемый пост)
а при попытке нажать браузерные выдавать предупреждение о желательности работы с дублирующими.
(мои опыты показали, что первое нажатие в ИЕ кнопки "Назад" отслеживается через _увеличение_ history.length по таймеру, а больше никак, последующие вообще никак. Но этого достаточно, чтобы предупредить пользователя о некорректности работы этих кнопок.)

Автор: Sardar 30.8.2006, 15:34
dm9, ИМХО всегда считал такой подход не правильным, вдруг у юзера нет JS или аякс глючит, всё убьёться smile

Любая страница, любой ресурс должен уметь генерить обычную страницу + аякс, который сразу после загрузки ловит и обрабатывает все ссылки сам. Затем запросы идут аяксом, отдаёться только контент в XML кратко. Конечно на сервере потребуеться делать две точки входа (например реврайт на /, /xml и /print ), где XML версия очень проста, ведь не нужно подгружать меню и прочие модули.

Плюсы подхода: всё продолжает работать где угодно, хотя не аяксовая версия почти всегда сильно урезана по функционалу. Такова цена за любовь к левым браузерам. Минусы: в адресной строке стоит адрес самой первой страницы. Лечиться твоим методом, но потребуеться открыть сессию или времено адрес положить в куки + лишний редирект, хотя не страшно smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)