blok
Moikrug и hcard
Пару недель назад при помощи Сергея Белова удалось убедить команду «Моего круга» сделать в профиле пользователя hCard. Теперь у меня на сайте пользователи, авторизующиеся через «Мой круг», отображаются с юзерпиками и именем с фамилией.
К сожалению, пришлось отказаться от стороннего сервиса, который разбирает hCard (он не работает с кодировками отличными
P.S. Хочу сказать очередное спасибо моему хостеру — фирме «Докер», когда библиотеке для парсинга hCard понадобился модуль tidy, они его очень быстро поставили.
«Акын»: исходник
Кто там интересовался исходником шаблонизатора «Акын»? Я его выложил без всяких причёсываний. Это означает, что он частично завязан на мою архитектуру: вызов action, некоторые спецзначения. Так что если хочется просто посмотреть на код — welcome, а если использовать, то нужно сначала убрать оттуда специфические штуки.
Акын: блоки
Я тут, если помните, принялся описывать свой шаблонизатор «Акын», многие просили. Сейчас попробую продолжить. Итак, часть вторая: блоки.
Частые паттерны — скрыть целый блок разметки или повторить его несколько раз, решается в «Акыне» одной конструкцией: описанием блока. Что именно будет происходить с блоком, шаблон «не знает». Блок идентифицируется своим именем и описывается следующим образом:
<:имя>
Значение переменной: <b>{$var}</b><br />
</:имя>В API шаблонизатора есть два
Пусть блок, описанный выше, нужно повторить три раза, заменяя «var» каждый раз на определённый текст, вот как это выглядит в коде:
$t = rt::t('template');
for ($i = 0; $i<3; $i++) {
$t->var = $i;
$t->iterate('имя');
}
echo $t;Чтобы просто показать содержимое этого блока можно вызвать
В предыдущей части я забыл упонянуть ещё одну важную конструкцию, позволяющую включать один шаблон в другой. Выглядит она, на мой взгляд, очень логично:
<$+шаблон>
<$+шаблон секция>Конструкция предпроцессорная (обрабатывается первым проходом), т. е. все блоки, переменные и прочее будут включены в шаблон из которого она вызвана.
В следующий раз опишу actions, а так же дальнейшие планы. На этом описательная часть закончится, если по этой части не потребуются разъяснения.
Blok и комментарии: часть IV
Взята последняя высота: теперь я беру юзерпики в том числе и из микроформата hCard, в итоге мой движок в комментариях понимает:
Akyn: синтаксис (переменные)
Как я уже писал, несколько дней назад я заменил шаблонизатор на своём сайте на новый. Вы просили, чтобы я рассказал как он устроен, я постараюсь. Сразу, едином наскоком у меня это сделать не получилось, поэтому я решил попробовать сделать это по частям. Начну с синтаксиса. Сразу скажу, что в будущем мне хотелось бы
Идея, которую я считаю хорошей несколько последних лет — шаблон должен содержать минимум логики и весь HTML должен содержаться в шаблонах. Тут она одна из центральных.
Шаблонизатор работает с файлами (у меня на сайте всё работает на файлах), в простейшем случае файл содержит одни шаблон, в более сложном — несколько секций шаблона. Секции записываются между двумя тегами комментария с именем секции внутри (обратите внимание на закрывающий тег):
<!--имя секции-->
HTML-код секции
<!--/имя секции-->Самое простое, что есть в шаблоне — переменные. Они записываются как {$name}. Переменная уникальна в своей секции или шаблоне (если шаблон без секций). Установить переменную можно присвоив шаблону свойство с её именем. У меня открытие шаблона сделано в глобальном toolkit и всё описанное выглядит вот так:
$t = rt::t('menu', 'меню сверху');
$t->link = '/';
echo $t;В данном примере в секции «меню сверху» шаблона «menu» переменной link я присвоил значение ’/’. Шаблон выполнится при любом преобразовании объекта в string (например, когда я сделаю echo). Если переменной присвоить null, то атрибут тега, в котором она находится пропадёт. А если переменная входит в тег, то удалится сам тег. В следующем шаблоне, если я присвою переменной «hide» null, пропадёт тег «b» и атрибут title тега «a»:
<a href="/" title="{$hide}"><{$hide}b>текст<{$hide}/b>Минимальная логика, которая есть в шаблоне на данный момент — возможность подстановки значения переменных из списка и отрицание переменной. Выглядит это вот так: {$var?value1?value2?value3}, значений valueN может быть сколько угодно, нумерация начинается с нуля, значения выбираются по номеру (для тех кто в теме — и по модулю длины выбираемой последовательности). Пустое значение считается
Частный случай такой конструкции — конструкция {$!var}, которая на значение эквивалентное false вернёт пусто (не null), а на значение эквивалентное true — null.
Эта условная конструкция полезна шаблону тем, что позволяет сосредоточить максимум данных о шаблоне в самом шаблоне, например, в циклических конструкциях туда можно поместить имена стилей, которые должны применяться. Отрицание полезно в случаях подобных этому:
<{$hide}b><{$!hide}i>Текст<{$!hide>/i><{$hide}/b>тут, в зависимости от состояния переменной hide, появится либо тег «b», либо «i».
Переменные подставляются в момент выполнения шаблона, так что иметь значение будет последнее выставленное значение.
В следующий раз я рассмотрю циклическую конструкцию, конструкцию управления видимостью блока, а после этого — API и выложу исходный код.
Blok: akyn
Шаблонизатор называется (у Бирмана каждая строчка кода носит
Юзерпики на моём сайте
У меня на сайте, в комментариях широко используются юзерпики. Я уже неоднократно писал как я их показываю. Естественно, каждый сервис выдаёт юзерпики своего размера, у меня на сайте принят размер 41×41 пикселей. Ранее я ставил ширину и высоту картинки в 41 пиксель, многие неквадратные картинки искажались. Теперь этого не происходит, благодаря небольшому изменению
.avatar { max-width: 41px; max-heigth; 41px }
.avatar, x\:* { max-width: auto; max-height: auto; zoom: expression(41 / Math.max(this.width, this.height)) }Для всех браузеров, кроме IE выставлены максимальная ширина и высота картинки, в IE используется нестандартное свойство zoom, позволяющее масштабировать элемент.
Аватары на сайте, OpenID, Pavatar.
Многие знают, что у меня на сайте поддерживается OpenID — удобная система, позволяющая использовать логин одного сайта на других сайтах без дополнительно регистрации. Система не новая, были и более ранние аналоги, мы с другими разработчиками популярного некогда движка блогов «Регистр» задумывались о такой, но так и не сделали.
Вкратце, предположим вы зарегистрировались на любой сайте, поддерживающем OpenID, к примеру, в той же «Яруше». Чтобы оставить комментарий у меня, вам достаточно написать адреса вашей страницы на ya.ru. Т. е. ваш адрес
Просто адреса для идентификации — это скучно, на помощь приходят аватары, маленькие картинки, идентифицирующие пользователя. В комментариях у меня теперь поддерживаются: аватары ЖЖ, аватары Яруши, Gravatar и Pavatar.
Т. е. если вы используете адрес из ЖЖ или «Яруши», то мой сайт возьмёт аватару оттуда. Gravatar и Pavatar — это два решения проблемы единых аватаров на всех сайтах. Первый — централизованный, для идентификации используется ваш адрес
Завести свой pavatar («Personal Avatar»), если у вас есть блог, очень просто. Самый простой способ — положить в корень сайта картинку pavatar.png. Картинка должна быть размером 80x80 пикселей, не более 4Кб. Есть два способа указать альтернативное расположение —
<link rel="pavatar" href="URL">или
<link rel="pavatar" href="URL" />Pavatar должен быть изображением в форматах JPEG, GIF или PNG.
Внимание: сменилась навигация на сайте!
Итак, на сайте сменилась навигация (я постепенно двигаюсь по плану модификации сайта, времени только не хватает).
- я выкинул календарь, до тех пор, пока не доделаю навигацию по месяцам
- стрелки вернулись к прежней схеме: влево — в прошлое, вправо — в будущее (это самое важное)
- поиск занял место в меню, лишившись отдельной страницы
- на странице коментариев к заметке убрал стрелочку, назначение которой мало кто понимал
Кроме того, ко мне вернулся Google Page Rank, ура. Яндекс, где мой тИЦ?
Ссылки на английском-2
Многим по разным причинам не понравилась реализация выделения ссылок на английском. Попробуем другой вариант. Пока он работает под Internet Explorer, FireFox и Safari (и не работает под «Оперой», где нет поддержки custom cursor). Тестовый образец лежит у меня в «файлах», можно попробовать.
Так лучше?
Линк на английские тексты

Сделал у себя на блоге хорошую, на мой взгляд, функцию — подсветку ссылок на тексты на английском языке. Сам я не люблю читать английские тексты, так как знаю язык недостаточно, и, кликнув на ссылку, которая ведёт на английский текст, раздражаюсь. Думаю, я не одинок. Для таких как я, сделал специальный флажок на ссылке (появляется при наведении на ссылку), на скриншоте его видно. Для таких как я он означает «по ссылке можно не ходить».
Логотип Blok

Как многие наверное знают, движок моего блога называется «Blok». Основные особенности — всё на файлах (никаких баз данных, так интереснее) , никакого интерфейса администрирования через веб, максимальное использование чужих сервисов и RSS как средство оповещения о чём угодно.
У такого замечательного движка до сих пор не было логотипа. Я
Сейчас придёт Смирнов и скажет, что логотип полная лажа.
Загрузка изображений в Blok
Проблема с загрузкой изображений через «Semagic» решилась куда проще (напомню, что у меня на сайте нет
Мой движок анализирует нет ли во введённых данных тега IMG с data URL, выдёргивает из него данные, кладёт на диск в виде изображения, а обратно отдаёт тег уже
BLOK: MetaWeblog API, FotoBuilder API
Я, когда писал движок для своего сайта (до сих пор недописанный, кстати), сразу расчитывал на то, что
Протокол достаточно простой, но описан очень плохо. Как бы то ни было, я его реализовал. Один недостаток — загрузка изображений. В протоколе flat такой возможности нет. Почесав репку, я посмотрел на обилие описанный протоколов и выбрал очень простой MetaWeblog. Протокол излишне многословен (даже по меркам XML, как мне кажется), но зато реализуется за час.
Теперь ещё хочу посмотреть Windows Live Writer, но через штатный инсталлятор мне поставить его не удаётся, грешу на прокси. В общем, остаюсь пока на Semagic, но с загрузкой изображений надо
Попытался сделать это наскоком, не удалось. Видимо (это обычно для документации LiveJournal) пропустили
[LJ2ME] Подписка на комментарии
Долго думал как лучше сделать подписку на комментарии на сайте. Очевидный способ — подписка через электронную почту мне не нравится. У меня на сайте нет собственной системы авторизации, а умеющих отдавать адрес почты OpenID пока ещё очень мало.
На деле, есть более естественный способ узнавать об изменениях на сайте — это RSS. На мой взгляд, это значительно удобнее подписки по почте — не нужно никуда заходить,чтобы отписаться от уже ненужной темы, не нужно покидать браузер, чтобы подписаться. Уже сейчас на сайте доступны
[LJ2ME] Blоk и сотовые телефоны
Самое приятное в том, что я отказался
Blok и комментарии, часть III.
Пользователи ЖЖ теперь тоже могут воспользоваться сервисом «Граватар», чтобы завести себе аватары, которые будут отображаться у меня на сайте. Напоминаю, что «Граватар» — централизованный сервис, позволяющих использовать одну и ту же аватару на разных сайтах, аватара идентифицируется по адресу
Пользователи ЖЖ идентифицируются
Что интересно, в будущем «Граватар» будет поддерживать идентификацию по URL, вместе (или вместо)
Blok и комментарии, часть II
Учусь использовать чужие сервисы дальше. Сделал в комментариях аватары через Gravatar. Сервис очень простой — регистрируетесь, указываете свой
Оказывается, OpenID+Gravatar сочетание частое. Например, Апача в комментариях так и сделано. Но есть разница — там нужно указать адрес
Для визуальной идентификации тех, чей OpenID не отдаёт
Комментарии на Blok
Сделал комментарии на блок, через OpenID (поддерживается так же Simple Registration Extension) как и собирался. Пока, можно сказать, в стадии
P.S. Дима, можешь написать прямо на сайте какую глупость я написал.
7 лет в блогосфере
Оказывается,
По мотивам плаката на пятилетие студии Лебедева, конечно же. Если Остальные — смотрите
