логин: 
<< предыдущая заметкаследующая заметка >>
15 октября 2010
Обращение к всплывающим окнам через get

Сделал довольно стремную штуку, но, по-моему, идеологически верную.

Как известно, в движке два вида информации — та, что грузится на странице и та, что появляется в распахивающихся окнах движка после обработки аякс-запроса. При этом страница имеет ссылку, а окно — нет. А иногда это надо.

Пример, меня просят прислать ссылки на заметки о путешествии на Сардинию. У меня есть тэг. И по тэгу откроется их список. Но как дать прямую ссылку? Пишем:

http://lleo.aha.ru/dnevnik/?module=search&a=tag&tag=%D0%A1%D0%B0%D1%80%D0%B4%D0%B8%D0%BD%D0%B8%D1%8F-2010

Принцип прост: ?module=(имя модуля без .php)&(все параметры, передаваемые модулю аяксом) При загрузке страницы она сразу идет аяксом на сервер и получает нужное окно. Такую конструкцию можно дописать как к любой странице, так и к корню блога — в этом случае откроется специальная шаблонка module.htm, которая будет пустая, чтоб ничто не отвлекало от появившегося окна.

Как сформировать адрес окна? Я в нижнем правом углу каждого окна вставил кнопочку , она и есть эта ссылка. Нажимать ее смысла нет — просто перезагрузится данная страница и распахнется это окно, но адрес запомнить и прислать кому-то можно.

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

<< предыдущая заметка следующая заметка >>
пожаловаться на эту публикацию администрации портала
Страницы, которые привлекли мое внимание за последние дни, рекомендую:
2017-11-22 В июне 1982
архив ссылок
Оставить комментарий
Linux Safari Chrome
0
0
vvzvlad (#528146)
1) как-то разьехался текст(у самого края, без отступа)
опера и хром, как обычно
2)по рсс страница стала отдаваться полностью
Nokia-E90 Safari
 Москва
0
0
Leonid Kaganov
Про какой РСС речь? У меня два разных дневника, в этом - отдается полностью.
Linux Safari Chrome
0
0
vvzvlad (#528146)
ага, вот оно что. тогда нормально - в первом так и остался анонс
Windows IE
0
0
D.iK.iJ
Что-то я явно делаю не так... Перегружает страницу. А окно на этой же не хочет открывать (
Идея же выше всяких похвал + дополнительная кроссбраузерность как я понимаю.
Nokia-E90 Safari
 Москва
0
0
Leonid Kaganov
Кто перезагружает? Кто не хочет? Не понятно.
Windows IE
0
0
D.iK.iJ
Как я понимаю, окно должно было открыться на этой же странице в качестве всплывающего окна?
У меня почему-то этого не происходит. Открывается новая страница и там текст.
Nokia-E90 Safari
 Москва
0
1
Leonid Kaganov
Зачем вам на этой странице окно? Речь о формировании внешней ссылки.
Linux Safari Chrome
 Зеленоград
0
0
Д.С. (#425067)
Не исключено, что идеологически более корректным, да и с точки зрения безопасности тоже лучшим, будет не отдавать что-то аяксовое наружу, а по-другому спроектировать интерфейс, чтоб то, на что может понадобится ссылка, открывалось прежде всего ссылкой.
Nokia-E90 Safari
 Москва
0
3
Leonid Kaganov
Ну уж нет, спасибо. Назад к пещерам мы ходить не станем, по каждому чиху новую страницу грузить вместо окна.
Linux Safari Chrome
 Зеленоград
0
0
Д.С. (#425067)
Зачем перезагружать? Если к простой ссылке на пост приписать, скажем, &ajax, то пост будет отдаваться без шапки, подвала и комментариев, что делает доступным использование подобного рода ссылок для вызова аяксом. А вот мешать между собой информацию служебного рода, отдаваемую аяксом, и неслужебного - это как раз таки, на мой взгляд, не совсем верно идеологически.
Nokia-E90 Safari
 Москва
0
1
Leonid Kaganov
Аякс отдает не пост и не кусок поста, а исполняемый код. Поэтому "смешение информации" предлагаете как раз вы.
Linux Safari Chrome
 Зеленоград
0
0
Д.С. (#425067)
Хорошо.
Windows Safari Chrome
2
0
Можно делать обыкновенные ссылки с обычным дизайном (как в пещерное время), но на onclick самой ссылки навешивать вывод окном с аяксом (как в будущем). Таким образом, если нажать просто — откроется окно. Если же копировать ссылку в буфер правой кнокой — то скопируется корректная ссылка, годная для передачи любым удобным способом.

Бонусом: если такую ссылку найдут через поисковик — увидят нормальную страницу, а не кастрированное нечто с окном посередине.

Также в качестве мелкого, но дополнительного бонуса это всё будет прекрасно работать без яваскрипта.

Также совсем мелким бонусом будет сокращение количества запросов к серверу в два раза для таких ссылок.
Linux Firefox
 Москва
0
0
Здесь вопрос в применимости.

Скопировать ссылку на некое служебное окно движка обычно нужно админу, но не посетителю.

Посетителю нужно скопировать ссылку на заметку, и очень иногда - ссылку на какой-то отдельный комментарий.

Поэтому тут не надо впахивать и строить фантастические комбайны - все это просто не имеет реального прикладного смысла.
Windows Safari Chrome
0
0
Совсем не обязательно комбайн
Даже на этом же движке ничего не меняя в серверном коде можно применить подобное: например на ссылку «тэги записи» сделать href ссылкой тот самый нововведенный адрес, который открывает аякс-окошко, а на onclick на ней же оставить вызов окна как и прежде.

Итого: практически с нулевыми затратами труда получится доп-функционал — мы сможем получить ссылку на список статей по тэгу просто нажав на тэг правой кнопкой и выбрав в меню «скопировать URL ссылки», не совершая лишних действий: вызова окна, а потом копирования ссылки из иконки в правом нижнем углу (той же правой кнопкой, плюс не интуитивно).

Также опять есть бонус :) — прочитав статью, можно будет нажать на тэг средней кнопкой мыши (помоему во всех современных браузерах это означает открыть ссылку в новой вкладке) и продолжить читать комменатрии, отложив прочтение остальных статей по тегу на другую вкладку.
Linux Firefox
 Москва
0
0
Вы меня упорно не хотите понять. Повторю.

Будем реалистами: какой процент читателей пожелает воспользоваться этим функционалом - получить список моих статей по определенному тэгу в виде ссылки? Я полагаю, один или ни одного.

Но для этого уже имеется инструмент - я сделал его.

Чего ради увеличивать код страницы, обвешивая его дополнительными длинными строчками a href=.........., если это никому не нужно? Получается, что 20000 моих читателей будут грузить лишнее говно в странице ради того, чтобы раз в год кому-то одному из них было на один клик удобнее получить какую-то там ссылку?

Забота о компактности кода - это тоже забота об удобстве читателя. Код для общего случая не должен быть загроможден говном, которое требуется в исключительных ситуациях.
Windows Safari Chrome
2
0
Насчёт размера кода страницы. У вас есть блоки id=loginobr и почти все вложенные в него. У всех них стиль находится в style='', хотя это можно было бы вынести в стилевой файл, тем самым сэкономив размер кода (ведь стилевой файл кешируется), но вы не стали этого делать.

Потом, например одна крохотная ссылка «предыдущая ссылка» обёрнута в огромную кучу тегов таблицы, вместо одного div'a (т.к. основная верстка страницы грамотная и блочная — понятно, что вы прекрасно знаете, как верстать блочно и ёмко. но не стали)

Значит, размер кода не имеет для вас такого значения, которое вы даёте ему на словах.
Так что вообще непонятно, с чего вдруг вы приводите «размер кода» как аргумент.

Какой процент читателей пользуется ajax-функцией лучше не представлять, а просто подсчитать скриптами. У вас довольно посещаемый блог, и потратить немного времени для улучшения пускай даже для одного процента посетителей — вы улучшите ситуацию для сотен человек в месяц.

И да, я вас понял изначально, упорно я хочу донести лишь свою мысль для улучшения движка :)
Linux Firefox
 Москва
0
0
Если у меня в верстке несуразности - то это потому, что мне не удалось сделать стилями как ни пытался (как в случае с "предыдущей ссылкой") или не стал морочиться по причинам экономии личного времени (как в случае loginobr).

Что касается процента читателей - речь не о том, сколько процентов пользуются всплывающими окнами (как минимум, все, кто пишут комментарии, это процентов 5-10). Речь о том, скольким из них придет в голову взять что-то "оконное" в виде ссылки в буфер обмена, чтобы отправить кому-то. Их никак не подсчитаешь, но понятно, что это 0.0001%. А если еще точнее - то только я сам, и то лишь потому, что меня недавно попросили прислать какие-то записи по тегам. Раньше это даже мне не приходило в голову.

Мораль: я стараюсь не тратить время на тех сервисы, которые никому не нужны. Особенно в ситуации, когда не реализована куча интересных фич, которые действительно могли бы быть полезны, а времени на них у меня нет. Если вы считаете, что это неправильно, то хотя бы объясните, какие именно ссылки на какие окна вы собрались кому-то отправлять.
Windows Firefox
2
0
zencd (#401392)
Уфф. Я уж подумал, очередной манифест.
Linux Safari Chrome
0
0
мне кажется или раньше комментарии не размазывались на всю ширину окна?
Windows Firefox
0
0
lleo.me/[email protected]Артем Павлов
Если нажать на кнопочку то кодировка меняется на какую-то хуйню: «РЎР°СЂРґРёРЅРёСЏ» вместо «Сардиния».
Linux Firefox
 Москва
0
0
Да. Позже переведу весь движок на UTF8, а пока это заплатка.
Windows
0
0
myopenid[email protected]Леша (lesha)
А ты не кодируешь русский текст в ссылке с помощью escape()?

Вся хитрость в том что для страницы указать кодировку можно, а вот для URL кодировку указать негде. В момент запроса к http серверу передается URL и не передается кодировка.

А учитывая что броузеры ведут себя по разному... кто текст как есть передает (как на текущей), кто в юникоде, кто в зависимости от настроек.....

Я в в ссылку добавляю переменную с текстом "Тест" и потом сверяю в каком виде он пришел в запросе, в ту кодировку и перекодирую tag. :)
Linux Firefox
 Москва
0
0
Мне кажется, браузеры сейчас все в UTF8, нет?
Windows
0
0
[email protected]Леша (lesha)
Есть настройка:
network.standard-url.encode-utf8;true
network.standard-url.escape-utf8;true
network.standard-url.encode-query-utf8;false

В IE тоже есть настройка.

Может уже у всех по умолчанию так и стоит. Не знаю.
Linux Firefox
 Москва
0
0
Не, ну раз такая разноголосица, надо в движке править, а не у каждого пользователя.
Windows IE
0
0
D.iK.iJ
Зачем тогда на новой странице этот текст?
> Это страница вызова окна. Если у вас на распахнулось никакое дополнительное окно - значит, у вас не работает Javascript.

У меня не распахнулось ((((

И ошибк на странице:
Сведения об ошибке на веб-странице
Агент пользователя: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; InfoPath.1)
штамп времени: Sun, 17 Oct 2010 10:47:29 UTC
Сообщение: Требуется объект
Строка: 53
Символ: 3
Код: 0
URI-код: http://lleo.aha.ru/blog/2010/10/15.html
Сообщение: Требуется объект
Строка: 53
Символ: 3
Код: 0
URI-код: http://lleo.aha.ru/blog/2010/10/15.html

А то что идея классная - я говорил уже.
Linux Firefox
 Москва
0
0
Видимо, у меня строка 53 другая - там вообще нет ничего похожего на JS-код.

всего комментариев: 28

<< предыдущая заметка следующая заметка >>