«так как он наиболее понятен пользователю»?
хм, как пример вот у нас на Хабре есть раздел «новое» попробуйте за одно действие найти например первую запись за 1 апреля.
вот, не надо. Новое вполне может быть «надуровнем» «нового за час» или за день или за месяц и так далее, по временным периодам, что позволило бы отсортировать куда более гармонично чем сейчас с цифровым «пагинатором» который практически не несет ни какой информации.
О_О а почему у меня не с последнего :( и у меня топики по идее устаревать должны моментально, по вашей логике.
В общем, с чего бы это вдруг?
Неужели вы мыслите только на этом уровне абстракций новое/старое? И у вас нет промежуточных этапов таких как вчерашний, прошлогодний и тд и тп?
мои доводы не изменились. но вначале ты что-то видел, а потом перестал… что это было? потеря зрения? буйная фантазия? или обрыв коннекта с матрицей? =)
Ну вот, например, клацнул я кнопочку «обновить» справа.
И жду.
И жду.
И жду.
И ничего не обновляется.
Потом я клацаю кнопочку «обновить» снова.
И получаю результат: нет обновлений.
Это потому что первый запрос прошел, но результата почему-то я не получил на экране. ХЗ почему, теперь это уже не узнаешь. А второй запрос на обновление естественно выдал что ничего нового нет.
Если бы была возможность не автоматического обновления, а скажем за «последние 5 минут», или как в почтовике выставлять галочки — «прочитано»/«непрочитано», то мне было бы гораздо удобнее.
Подобное отследить несколько сложно, разве что отравлять ответ серверу только при удачном обновлении, в голове вертится решение но что-то сформулировать не могу.
Но если что в данной ветке разговор идет немого о другом уровне а не о комментариях к статье которые в данному случае выводятся общим списком в отличии от постраничного вывода топиков.
ну, например после загрузки страницы через три секунды аяксом отправляется на сервер сообщение, что страница действительно доставлена пользователю. если подтверждение на сервер не пришло, то страница считается не загруженной и /new не изменится. как вариант, задержку можно устанавливать вручную в профиле пользователя.
а, вот еще пример. У меня братан делал управление электростанцией через веб-интерфейс. Скорее всего, им еще пользуются.
Рядом, конечно, только маленькая деревенька, и если что — жертв будет не так много :)
А причем ту третий вариант, раздел Новое и 1 апреля, не вижу связи между обычной постраничной навигации как в книге(третий вариант) и тем что Вы описали. На хабре как раз используется третий вариант, но причем тут конкретная дата я понять не могу.
Сейчас дописываем модуль для «бесстраничного» вывода данных с автоматической выгрузкой и загрузкой новых элементов через js.
Страницы это рудимент «физических» изданий (книги, журналы & etc). Обосновано разве, что замена цифрового «пагинатора» смылловым-содержанием, другими словами делить не по количеству записей а по их содержанию группировать.
Но.
Это ПОЛЬЗОВАТЕЛЬ видит сайт как веб-приложение.
А вот поисковик видит его как набор страниц. Это даже ужасней, чем печатное издание.
И с точки зрения эффективности рекламы, мнение поисковика о том, как должен быть устроен сайт — в явном приоритете.
И если это обычный сайт компании, то делается он не для изысков на JS, а для того чтобы повысить продажи.
Смотрите во первых при отключенном js на странице будет присутствовать пагинатор в том или ином виде, соответственно поисковик все запарсит без проблем а пользователь перешедший по ссылке попадет именно к той части общего списка которая соответствует его поисковому запросу.
«А вот поисковик видит его как набор страниц.»
По вашему какая инфа была бы релевантней для документа который разбит на несколько страниц и пагинатор в первом случае был бы: 1,2,3..., а во втором: предисловие, вступление, глава первая — «вакханалия в старом замке»...?
Ога, в книжке еще есть обложка из-за которой раньше считалось за правило делать сплэш-страницы, а еще есть «от автора» из которого на множестве сайтов встречались блоки бессмысленного обращения к посетителям с восторженными приветствиями. можно долго еще продолжать…
Да это реально преимущества второго варианта.
Но лично Я в таких случаях когда не доежает страница, то я просто ее обновлю и не буду ничего вписывать в урл
1. «так уж повелось, что все теперь мыслят путями к файлам»
исключительно веб-разработчики на PHP мыслят адрес сайта как путь к файлу. Обычные люди даже примерно не представляют, как это работает (то что скриптики кладутся в папочку по FTP).
разработчики на Java/Python парсят URL с помощью роутера, управляющего сайтом. На сайте обычно вообще нет никаких «скриптов», к которым можно обращаться.
Если вспомнить матчасть, URI — это идентификатор ресурса. WWW перед именем домена обозначает что всё, что находится в этой области — так или иначе открывается веб-браузером, или по крайней мере имеет отношение к вебу.
То что «3.jpg» является обязательно JPEG-файлом — это легенда пользователей Windows, ведь винда не умеет распознавать файлы иначе. Но даже в Windows по умолчанию отключены расширения, поэтому пользователь всегда видит файл с названием «3».
В Линуксе с этим как-то попроще. Например, в проводнике можно посмотреть первые строчки текстового файла прямо на иконке этого файла.
Но это еще не всё. Пусть его, этот самый JPG, в конце концов это статический файл.
А вот при обращении к _ресурсу_ example.com/news/3/ — это очень сложное обращение. Сначала серверу example.com отправляется желание пользователя получить какой-то абстрактный ресурс "/news/3/". Потом, в зависимости от технологии, сервер выбирает веб-приложение, которое будет обрабатывать этот запрос. Например, "/news" обрабатывается программой NewsDispatcher. Потом этой самой программе отправляется запрос на получение ресурса "/3/". Она его анализирует, определяет что нужно выдать и уже выдает.
Причем, в принципе, по одному и тому же адресу может выдавать разные вещи. То есть, например, на сайте example.com в профиле пользователя можно поставить галочку «выдавать все ресурсы через RSS», и тогда по адресу «example.com/news/3/» будет лежать RSS, а можно выдавать по ATOM, а можно вообще по браузерочитаемому HTML.
Говорить что ресурс /3/, обрабатываемый программой NewsDispatcher — это «просто веб-страничка» значит ничего не сказать простому юзверю, а веб-разработчика ввести в неприятное заблуждение о статичности получаемого контента.
Вот, кстати, с приходом возможности создавать «красивые ссылки» и ЧПУ я ни как не могу понять глубинный смысл постфиксов типа .html, веры в то что это чудо делается из благих намерений для поисковиков — нет :)
— mod_rewrite решает эту проблему на стороне web-сервера Apache.
— Django «Django runs through each URL pattern, in order, and stops at the first one that matches the requested URL.». т.е. это выполняет не we-сервер, а сам framework. не вижу тут какого-либо плюса.
это на первый взгляд по поводу сложности со стороны тех. части.
— настройка mod_rewrite для красивых URL занимает не больше 5-ти минут.
...?start=1&end=10
не применяю т.к это дает вольность пользователю, а еще лучше роботу и хакеру. Можно ввести ...?start=1&end=100000000000, а значит нужно делать дополнительные проверки.
Использую вариант три всегда, т.е /page/2/ и так далее, а размер страницы константа в коде.
на каждый тип страницы у тебя будет по маппингу. сотня типов — сотня маппингов.
вывод списка секций и вывод одной секции — это совсем разные вещи. зачем их все роутить на один хэндлер?
Да, естественно, что каждый тип — свой хэндлер и свой маппинг.
Но я не представляю себе проект, где будут сотни разных типов объектов :)
У меня в самых толстых проектах не бывало больше нескольких десятков типов объектов.
И в любом случае смотреть надо не на абсолютные, а на относительные цифры. Даже в случае, когда объект состоит из десятка строк кода и десятка строк шаблона, одна строка привязки — это ничтожно :) А уж когда объект ещё более сложный…
Наконец — объекты _в любом_ случае нужно как-то привязывать к ссылкам. Так почему бы в этой привязке сразу же и механизм постраничного разбиения не указать?
значит у тебя не было действительно толстых проектов ;-)
почему бы не использовать единое правило роутинга для всех хэндлеров?
я, например, параметры передаю так: d-o-b.ru/?article:hiqus
а конкретный хэндлер определяется по набору ключей.
например, для упомянутой выше ссылки будет вызван action/article/get.inc
а для ссылки ?article/list будет вызван action/article/list/get.inc
при этом глядя на ссылку я чётко понимаю какой файл вызывается и нет необходимости мысленно матчить реврайты…
когда тебе потребуется внутри /sections/ поместить кучу разных страниц — придётся писать либо кучу реврайтов, либо прописывать все дочерние хэндлеры в sections_loader, что есть те же яйца, но в профиль.
затем, чтобы по урлу было видно либо он роутится на хэндлер, либо нет. а зачем делать псевдостатику и потом ковыряться в конфликтах между реврайтами и реальными файлами?
>кверистринг «статическому кэшированию» тоже как бы не особо мешает
Мешает абсолютно :)
/section/?action=list
и
/section/?action=new
будут указывать на один файл.
>пользователь тыкает на ссылки, а вот с урлами приходится возиться программисту.
Ну, это очень трудно догадаться, что класс, обрабатывающий /section/list/ надо искать в classes/section/list.php, а /section/new/ в classes/section/new.php :)
ну это в простейшем случае. а вот что-нить по сложнее:
/posts/2009/04/03/3/20/xxx/
как тут можно догадаться, что это посты по тэгу xxx на третее апреля сего года с третьей страницы при кол-ве 20 штук на страницу?
2. Если же это что-то типа унифицированного по примеру ранее /parts/posts/2009/04/03/3/20/xxx/ — то тупо передавать 2009/04/03/3/20/xxx внутрь класса parts_posts и пусть он сам разбирается, что с этим форматом делать. list($year, $month, $day, $page, $per_page) = explode('/', $id);
при «статическом кэшировании» до этой точки запрос не доходит
вот, о чём я и говорил — чтобы узнать какой хэндлер будет вызван, нужно прошерстить все правила на предмет совпадения. и кто-нибудь обязательно перепутает page и amount местами. и параметр из середины придётся указывать всегда, без возможности положиться на дэфолт.
А как Вы делаете Pagination на своих сайтах