papilio

Архив на October, 2007

Самый маленький плагин к WordPress MU

У нашего WordPress MU есть небольшой глюк: даже, если в панели управления в настройках синдикации поставить, чтобы для каждой статьи показывался полный текст, всё равно он будет в RSS со ссылкой more:

Ссылка more в RSS

Но это плохо, так как подписчикам лучше давать полный текст статьи: не все заходят на сайт, и не у всех есть такая возможность (например, чтение с мобильных устройств). Чуть-чуть покопавшись в коде, я понял, как это исправить.

За RSS2 отвечает файл wp-includes/feed-rss2.php. Первые же его строчки говорят нам что-то о нужном нам more:

[cc lang="php"]header ('Content-Type: text/xml; charset=' . get_option ('blog_charset'), true);
$more = 1;[/cc]

Решив узнать, откуда идёт переменная $more, я открыл файл wp-includes/post-template.php и обнаружил функцию, отвечающую за вывод текста, как полного, так и укороченного:

[cc lang="php"]function get_the_content ($more_link_text = '(more...)', $stripteaser = 0, $more_file = '') {
global $id, $post, $more, $single, $withcomments, $page, $pages, $multipage, $numpages;
/*
Разный код
*/
if ( count ($content) > 1 ) {
if ( $more ) {
$output .= ''.$content[1];
} else {
$output = balanceTags ($output);
if ( ! empty ($more_link_text) )
$output .= ' $more_link_text";
}
}[/cc]

Из этого кода становится ясно, зачем программисты явно указали $more = 1 в файле вывода RSS — они просто хотели, чтобы при установленной опции Показывать полный текст всё работало правильно. Однако, ничего не работает. Я подумал, что это дело в том, что переменную просто не видно, следовательно, надо создать функцию, которая изменит глобальную переменную. Не желая что-либо изменять в коде, я решил попробовать написать плагин для WordPress MU.

Просмотрев документацию по плагинам, я понял, что есть Actions и Filters: первые делают что-то до выполнения операции, а вторые меняют (фильтруют) данные. В API по Actions я нашёл нужное мне действие rss2_head, которое выполняется сразу же после заголовка RSS, но перед выводом записей. Осталось теперь только написать функцию в плагине и посмотреть результат.

В WordPress MU существует два вида плагинов: одни располагаются в папке mu-plugins и выполняются сразу же, а другие в папке plugins, и их надо включать отдельно для каждого блога. Фактически первые плагины попросту являются глобальными: именно поэтому я и создал файл wpmu_more_feed.php в папке wp-content/mu-plugins:

[cc lang="php"]function wpmu_more_feed () {
global $more;
$more = 1;
}

add_filter ('rss2_head','wpmu_more_feed');[/cc]

После этого всё работает. Я уже обратился к разработчикам.

Метки: , , , , ,

Как удалить дубликаты писем

Занимаясь переносом всех писем из моего ящика на mail.ru на GMail, я столкнулся с довольно серьёзной проблемой: в моём почтовом ящике оказалось очень много дубликатов писем. Всё получилось из-за того, что я неосторожно воспользовался копированием из папки архива в папку Входящие (для того, чтобы этот архив скачал сборщик почты на GMail) через IMAP от mail.ru в программе Thunderbird. В итоге у меня оказалось более 18000 писем.

Как удалить дубликаты писем? Встроенной функции в web-интерфейсе я не нашёл, но зато обнаружил два способа решения этой проблемы.

Если вы под Linux/Unix (хотя можно и просто подключиться через SSH, например), то можно воспользоваться IMAP Tools: это скрипты-приложения на все случаи жизни. Чтобы удалить дубликаты, достаточно ввести команду:

delIMAPdups -S host/user/password

Скрипт работает довольно быстро и справляется даже с большими объёмами. А если вы пользуетесь программой Thunderbird, то можно воспользоваться дополнением Remove Duplicate Messages (Alternate):

Как удалить дубликаты писем: Remove Duplicate Messages (Alternate)

Удобного решения для POP3 я не нашёл.

Метки: , , , ,

Полный переход на GMail

В ближайшее время буду совершать три глобальных перехода:

  • Переход на Ubuntu 7.10
  • Переход на GMail
  • И ещё кое-что :-)

Вот сегодня я решил начать со второго. У меня сейчас достаточно запутанная система сбора почты:

система с mail.ru

Почта всегда хранится на сервере mail.ru для архива. Раньше скачивал письма по протоколу POP3, но после того, как у меня глюкнул TheBat!, я стал просматривать почту программой Thunderbird по протоколу IMAP4.

Меня уже давно не устраивал mail.ru, хоть он и предлагал больше возможностей, чем, например, тот же Яндекс. Во-первых, у него неограниченный объём почтового ящика и, во-вторых, есть поддержка IMAP4. Но эта поддержка достаточно кривая, поэтому постоянно возникали проблемы. А из-за большого числа спама пришлось воспользоваться сервисом Спамооборона от Яндекса.

Но я решил перейти на GMail, и на это есть причины.

  • Появилась поддержка IMAP4! (Уже есть описание в помощи Google).
  • Очень большой объём памяти (около 3 Gb и эта цифра постоянно увеличивается).
  • Возможность отправлять письма со своим адресом почты (что для меня очень важно и что нигде не поддерживалось).
  • При отправке по SMTP письма остаются в отправленных на сервере!

И много других возможностей. Аккаунт на GMail у меня был уже давно, поэтому остаётся только перенести всю почту с mail.ru на GMail. А это нелегко, так как у меня её достаточно много:

папки

Я решил, что на GMail просто включу сборщик писем, а на mail.ru буду последовательно переносить во входящие все свои папки. В итоге за несколько этапов я перенесу всю почту. Интересно также, что я могу сохранить такое же разбиение и на GMail, указав, чтобы при получении писем им ставилась определённая метка.

Итак, процесс пошёл =) интересно, что GMail автоматически очищает мне почту от спама:

spam

Теперь осталось настроить пересылку на ящик на GMail и пользоваться нормальным IMAP с нормальным SMTP.

Метки: , , , , ,

:-) всем привет!

Совсем забыл написать, о чём будет этот блог (точнее — эта лента на Piclab), хотя сделал уже три записи.

Изначально я вообще не хотел заводить собственную ленту, так как не особо-то и привык писать много. Да и одно дело писать в общий блог (например, регруппа), а другое дело — вести собственную ленту, где все записи твои. Но после того, как промучался с установкой WordPress MU, решил всё это подробно описать.

(Конечно, давно уже возникали мысли, что стоит писать об Web 2.0, об интернете и может быть о Linux. Vladimir предлагал писать только об Web 2.0, а идея о Linux его как-то не порадовала.)

Но я всё-таки решил, что в этой ленте буду писать не обо всём, что знаю, или копипастить со всего интернета, а буду писать по узкоспециализированным темам: во-первых, это WordPress, а во-вторых, это вёрстка и web-дизайн. А уж, если получится, то попробую почаще исследовать Web 2.0.

Говорят, что писать на узкоспециализированные темы хорошо для SMO. Да я и сам думаю, что посетителям легче, когда в блоге говорят о чём-то одном, конкретном, чем обо всём вообще. Вот и проверим это. месяца через два-три я напишу о том, что из этого получилось. Главным показателем будет количество подписчиков (а не, например, количество посетителей).

А писать я собираюсь скорее редко, чем часто: будет, наверное, как у Ильи — вдруг чего напишу...

Спасибо, что читаете меня ;-)

Метки: , , , , ,

Вёрстка, когда много мониторов

Недавно делал сайт, который содержит в середине всего лишь одну фотографию, края у которой закруглены, на полосатом фоне:

Вёрстка: фотография с закруглеными углами

Всё было бы легко, если фотография была бы небольшого размера (не более, чем 640×480) — я бы просто её отцентровал и больше бы не парился. Но нет так-то всё просто: фотография размером почти 1280×800 и при этом её нельзя ужимать, (поставив в качестве ширины, например, 100%), так как должны сохраниться оригинальные размеры.

Если такую фотографию просто разместить на сайте, то для маленьких мониторов тут же появятся полосы прокрутки, поэтому я решил сделать её фоном, размещённым по центру:

div#splash {
	position:absolute;
	z-index:2;
	background: url('/images/splash.jpg') 50% 50% no-repeat;
	width:100%; height:100%;
}

Всё получилось: я разместил и полосатый фон, и изображение-фотографию. Но ведь у фотографии края закруглены, а это означает, что в этом месте у изображения должен быть либо полосатый фон, либо прозрачность, через которую виден основной фон — вот в этом и была основная проблема. Во-первых, у JPEG нет прозрачности, и ставить фон в краях оказалось нецелесообразным, так как он попросту мог не совместиться с основным фоном. Во-вторых, можно было попробовать использовать PNG-24, но из-за большого размера и из-за плохой совместимости с IE6 и это решение было отвергнуто. В итоге прошлось немного извращаться поэкспериментировать с фоном: я создал очень большой (3000×3000) полосатый фон в формате GIF с прозрачным отверстием посередине, вставил ещё туда текст и стал его использовать в качестве основного:

Вёрстка: фон с отверстием
div#wrap {
	position:absolute;
	z-index:3;
	background: transparent url('/images/bg.gif') 50% 50%;
	width:100%; height:100%;
}

А фотографию сохранил в JPG без всяких закруглений:

Вёрстка: одна фотография

Проставил z-index в двух этих слоях, где у фона был наибольший, поэтому фактически всё получилось:

Вёрстка: фотография с фоном

Вот такое трюк я и сделал на elinalipona.eu. Этот сайт прекрасно отображается на различных мониторах:

Вёрстка: elinalipona.eu

Метки: , , , , ,

Удаление /blog из WordPress MU

Сразу же после установки WordPress MU permalink (постоянные ссылки) для основного блога имеют префикс /blog. Например:

http://blog.piclab.ru/blog/2007/10/24/novyie-lentyi.html

Но до установки новой версии ссылки не содержали в себе /blog:

http://blog.piclab.ru/2007/10/24/novyie-lentyi.html

И это достаточно плохо, так как permalink на то и permalink, чтобы оставаться постоянными — это и поисковые системы, это и закладки пользователей. Покопавшись в интернете, я нашёл более-менее простое решение по удалению /.

1) wp-admin/option-permalink.php
Надо заменить все «/blog» на «/» (но в принципе это делать не надо)

2) wpmu-settings.php
Надо изменить изменить массив, добавив в него слова 'tag', 'category', '2009', '2008', '2007', '2006':
$blognames = array(
'tag', 'category', '2009', '2008', '2007', '2006',
'page', 'comments', 'blog', 'wp-admin', 'wp-includes', 'wp-content', 'files', 'feed' );

3) В таблице wp_1_options надо изменить permalink_structure. А после изменить её панели управления в кладке Постоянные ссылки (Permalink)

После этого у нас на сайте всё заработало.

Метки: , ,

Обновление до WordPress MU

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

There are good reasons not to use it, and I would urge you to consider them carefully. I recommend WordPress μ.

По началу вроде бы всё было прекрасно и плагин успешно справлялся со своей задачей, однако постепенно появилось несколько проблем:

  • Можно было случайно заменить запись и комментарий другого пользователя, если прежде принудительно не сменить Presses (ленту в панели управления)
  • Чтобы создать пользователя, необходимо было, во-первых, обновить .htaccess, а во-вторых, создать каталог с именем ленты, а затем в панели управления совершить достаточно много кликов мышкой, чтобы всё настроить.
  • Иногда всё работало крайне медленно
  • Пользователь ленты практически обладал минимум прав, хотя фактически он был администратором.
  • Не работали плагины (было пару глюков) и были проблемы с их персонализированной настройкой.

Поэтому, когда стало необходимо создать сразу нескольких лент, пришла мысль о том, чтобы пора бы обновится до WordPress MU. Но нет так-то всё было просто...

Во-первых, наш блог был уже морально устаревшим — версия 2.0.9! Хотя уже больше месяца, как состоялся релиз WordPress 2.3. Именно из-за этого и возникли самые большие трудности. Сразу перескочить на WordPress MU было, конечно же, невозможно. Поэтому я решил сначала обновить отдельно каждую ленту до 2.3, а затем каким-нибудь образом вставить в MU.

Сначала подключился по SSH к серверу и сделал дамп всей базы (вначале безуспешно ;-) наверное, кто-то заметил, как всё плохо было в воскресение):

#mysqldump data_base -ulogin -ppassword > dump.sql

А затем уж у себя дома восстановил его:

c:\path\to\mysql.exe -Ddata_base -uroot --default-character-set=utf8 < C:\path\to\dump.sql

Полностью скопировал все файлы блога к себе... и фактически получил локальную версию блога :-) и с этого момента я стал обновлять каждую ленту в отдельности (то есть сначала все таблицы wp_, потом их удалял, а все таблицы wp_2_ переименовывал в wp_, потом wp_3_ и т.д.). Обновлял до WordPress 2.3, взятого с официального сайта (я сначала хотел взять сборку от Макса, но она выдавала какие-то странные ошибки). Так я обновил таблицы. А затем в панели управления сделал импорт тэгов из Ultimate Tag Warrior.

Потом поставил последнюю версию WordPress MU — 1.2.5. И тут оказалось, что она... без поддержки тэгов! Я, конечно, это не ожидал :-) но порывшись в интернете, нашёл сайт разработчиков и версии от Donncha — http://trac.mu.wordpress.org/browser/trunk. Хотя они и тестовые, но работают хорошо — как я понял, они в процессе исправления ошибок, которые не так-то и заметны обычному пользователю. Но главное, что там есть поддержка тэгов!

А всё дальше было просто :-) копипастинг — и блог работал. Теперь, чтобы создать новую ленту, надо нажать всего лишь на одну кнопку (кнопка Создать).

Метки: , , , ,