Но вот на что хочется обратить особое внимание: посещаемость выросла практически вдвое (на графике выше - понедельные визиты по Google Analytics). И произошел этот рост - в течение пары недель, после чего посещаемость стабилизировалась.
Дело не в моей писучести - как писал 10-15 текстов в месяц, так и пишу. Более того, количество постоянных подписчиков (RSS и ЖЖ-френды) таким скачком не выросло, рост есть, ну процентов может на 15 за три месяца.
Половину роста дали поисковики, им (не знаю почему) Drupal оказался более люб. Вторая половина - просто не понимаю откуда (direct traffic, согласно Google Analytics). Чудеса. Но факт - вот он, на лице.
Делаем категории тегами (чтобы не заполнять значения).
Импортируем.
Меняем тип таксономии категории на "Multiple select/Mandatory".
Правим пути к категориям.
Увы, но где-то на этом пути теряются категории у изрядной части записей и теги - у единиц, повторный импорт лечит только частично.
Я подозреваю, что крышу рвет, если есть теги, совпадающие с категориями, но не уточнял.Теги портит LJ Sync, пришлось его еще шашкой....
Пришлось написать скрипт (качать тут), который правит эту проблему, анализируя таблицу mt_posts
самостоятельно (запускать после импорта, когда все теги/категории уже созданы).
Описанная ниже методика предназначена для заливки пустого сайта на Drupal. Задача доливки контента на сайт, где уже что-то есть - не ставилась.
Более того, на стадии импорта комментариев все старые комментарии точно будут стерты.
Если вам нужно пополнение имеющегося сайта, то описанные ниже скрипты нужно взять за основу и допилить.
Кроме того, никакими enterprise-features, вроде транзакций или обработки ошибок я категорически не заморачивался. Предполагается, какбэ, что импортом данных
мы занимаемся тихо в уголочке, поступлением новых данных на старый сайт можем управлять, а после завершения импорта просто подменим сайт на скаку.
Импорт записей
Задача: вытащить записи (посты) из БД MovableType и запихать их в БД Drupal в виде объектов типа Story. Создание Drupal-объекта связано с заполнением
нескольких таблиц (node, node_revisions и прочие node_*, url_aliases), пополнением таблицы тегов, другими словами эту работу не хочется делать вручную
(SQL-запросами), а хочется перевесить на внутреннюю механику Drupal (ведь при создании записи оно как-то само все делается...).
План работ тривиален и прост:
Ставим модули Table Wizard и Migrate.
Добавляем нужные поля в структуру данных записи Story (не вручную, включением готовых модулей).
Запускаем скрипт, который перенесет нам данные постов в БД Drupal.
Импортируем образованную таблицу с постами в Table Wizard.
Первый пункт особых вопросов вызвать не должен, обычные модули. За собой потянут Views и Schema, их тоже надо выкачать и поставить,
до кучи полезен и Views UI.
Я понимаю, что читать такой сугубо специфический текст может быть скучно, особенно на каникулах. В то же время, я не нашел разумных русскоязычных текстов на эту тему, поэтому мои записки могут оказаться полезными тем, кто столкнется с подобной задачей.
Короче, не нравится - не читайте :)
Статус этих записок
Записки пишутся по горячему, с небольшой задержкой относительно реальных действий. На момент написания первой части (которую вы сейчас читаете) есть ощущение, что все получится, но реальный перенос данных даже на тестовой машине сделан частично. Но уже есть ощущение успеха, минимально необходимая функциональность точно будет, а дальше будем посмотреть.
Зачем переезжать
Моя причина очень простая: мне надоело поддерживать две платформы (Drupal и Movable Type). При этом, по комплексу свойств Друпал побеждает, а значит с MT пора прощаться. А новогодние каникулы - хороший повод позаниматься чем-то полезным.
Q: On http://www.movabletype.jp/documentation/mt5/db/mysql-from-sqlite.html I read:
From the Movable Type 5, SQLite and PostgreSQL are no longer supported.
A: Yes, it's true. MT5 will deprecate core support for SQLite and PostgreSQL. But, these databases can still be used with MT if a plugin is written to add support; the Enterprise Pack defines the drivers necessary to use the Oracle database with MT.
Вот и выяснилось, чем придется заниматься на новогодних каникулах, писать тестировать LJ-кросспост для Друпала (оказалось, он уже есть, что же я торможу?)
Если кто-то общается с командой MT, передайте им при случае, чтобы думали верхней жопой передней головой, платформа их была выбрана мной исключительно за поддержку PgSQL и только это ее и берегло.
Решил по случаю воскресенья поапргейдить блоговый движок. C Movable Type 4.21 на 4.23.
Обнаружил неприятность: в поиске (включая поиск по тегу) пролюбили локализацию дат. То бишь, независимо от настроек блога, название месяцев пишутся английские, а формат даты тоже тамошний (Месяц, число год).
По совету Николая Сиварева удалось избавиться от главного недостатка моего предыдущего noindex-патча для Movable Type: неудобства при открытии ссылки по правой кнопке.
Правда патч усложнился и теперь состоит из двух частей.
На Movable Type нужно наложить вот этот вот патч: patch-nofollow-img-js2.gz. В результате все внешние ссылки получат вид <a href="#link" onClick="return 'http://link-target';">
В темплейт, где-то в районе footer нужно добавить следующий Javascript-код:
var links = document.getElementsByTagName('A');
for(var i=0; i < links.length; i++)
{
if(links[i].href.match(/\#link/) && typeof links[i].onclick == 'function'){
links[i].href=links[i].onclick();
}
}
После чего наступит одержание и полное счастье. Подобный патч к Drupal тоже в ближайшее время изготовлю.
По совету Николая Сиварева удалось избавиться от главного недостатка моего предыдущего noindex-патча для Movable Type: неудобства при открытии ссылки по правой кнопке.
Правда патч усложнился и теперь состоит из двух частей.
На Movable Type нужно наложить вот этот вот патч: patch-nofollow-img-js2.gz. В результате все внешние ссылки получат вид <a href="#link" onClick="return 'http://link-target';">
В темплейт, где-то в районе footer нужно добавить следующий Javascript-код:
var links = document.getElementsByTagName('A');
for(var i=0; i < links.length; i++)
{
if(links[i].href.match(/\#link/) && typeof links[i].onclick == 'function'){
links[i].href=links[i].onclick();
}
}
После чего наступит одержание и полное счастье. Подобный патч к Drupal тоже в ближайшее время изготовлю.
Ответ по заявкам телезрителей (пришло в личную почту) на вопрос про сапам в комменатриях.
На удивление, простые народные средства помогают не тратить на эту проблему больше нескольких минут в день (на 5 сайтах с открытыми комментариями и приличным pagerank).
Хочется думать, что помогает в первую очередь бессмысленность спама по каментам: noindex+nofollow везде, отчего нет смысла тратить много усилий. Но безумные роботы таких тонкостей не знают и их реально много.
Задача: публиковать автоматические ленты новостей на сайтах. Новости берутся с веба, обрабатываются (распознается тематика, присваиваются теги), после чего появляются на сайте.
По идее, для этого предназначен Aggregator, но его интеграция с Taxonomy запланирована только в Drupal 7. Кроме того, pull мне очень не понравился, хочется push. Для push есть BlogAPI, там даже поддерживается установка категорий (тоже довольно диким способом, ибо информация о словарях недоступна, можно получить только список терминов), но вот установка тегов (т.е. терминов, которых в словаре может не быть) через стандартный BlogAPI невозможна. mt_tags - не поддерживаются и не обрабатываются.
Я уже почти поправил BlogAPI (всего то нужно задать один параметр конфигурации - в какой словарь класть теги, остальное все тривиально) и оно уже почти работало, но нашлось готовое решение.
Inline Tags делает все что нужно. Не стандартным путем (т.е. использовать готовое поле tags в blog-редакторе и передачу значений в mt_tags), но вполне приемлемым: список тегов пишется в [tags][/tags] и все работает (проверено).
В статусной строке не отображается URL. Это тоже лечится яваскриптом, но уже лень т.к. просто присвоение windows.status= не работает в Firefox/Opera, нужно таймеры ставить.
Потерялось открытие ссылки в отдельном окне. Можно, наоборот, сделать через window.open, но тогда потеряется открытие в текущем. Счастья нет.
В этом блоге, впрочем, используется несколько другая версия патча, которая оставляет ссылки на мои сайты прямыми, а остальные открывает в новом окне. Не публикую т.к. не нашел разумного способа вытащить хотя бы URL текущего блога в том месте, где зовется nofollowfy();
Поапгрейдил варез на MovableType 4.21 (коммерческий, раз уж его всем раздают). Работает. Стало местами поприятнее выглядеть, а так я кардинальной разницы не вижу. Ну плагин для тредовых комментариев теперь прямо в поставке, но он у меня и так был.
Раз уж засунул туда нос, переделал свой патч для <noindex>. У старого была проблема в том, что сам текст ссылки не индексировался Яндексом (ибо ссылка была запихана в noindex целиком). Теперь ссылка устроена иначе - текст подчеркивается, а сама ссылка теперь в иконке (позаимствованной у Википедии).
Пример можно посмотреть в любых комментариях, например тут.
Скачать патч можно тут:
patch-nofollow-img.gz. Возможно, вам захочется поправить URL картинки, но это уже сами.
Чтобы два раза не вставать, полный список остальных моих патчей к MT 4.x:
patch-monday-mt41.gz делает понедельник первым днем недели в стандартном календаре.
patch-rudate.gz - русские названия дат (переведен блок для итальянского языка, его и нужно ставить в настройках блога).
patch-dirify.gz - добавляет русские буквы в таблицы "дирификации".
Меня и бета-версии MovableType не особо пугают, поэтому сразу после выхода MT 4.1 я поапргейдился.
Если вы используете стандартный набор исходников, то все происходит абсолютно штатно: перенакатили исходники сверху, зашли в админку, согласились на апгрейд, через минуту все работает.
Если вы используете, например, мой метод русификации, то почти все старые патчи подходят, кроме одного (изменилось имя файла темплейта стандартного календаря.
Вот этот патч: patch-monday-mt41.gz - он делает понедельник первым днем недели в стандартном календаре.
Впрочем, если вы используете правильный (мой) Calendar Widget, то можно использовать старый вариант (программа patch либо не найдет одного из файлов, либо скажет что патч уже приложен, во втором случае на оба ее вопроса нужно ответить отрицательно).
Чтобы два раза не вставать, полный список остальных моих патчей к MT 4.x:
patch-nofollow.gz - добавляет к стандартному rel=nofollow на внешних ссылках (в комментариях и трэкбеках) еще и <noindex>, для поддержки российских реалий).
patch-rudate.gz - русские названия дат (переведен блок для итальянского языка, его и нужно ставить в настройках блога).
patch-dirify.gz - добавляет русские буквы в таблицы "дирификации".
Стандартное предупреждение: если вы не знаете что такое патч, то вам все это не нужно, пользуйтесь стандартными настройками MT.
Еще 31 августа я спрашивал как синхронизировать комментарии в основном блоге и в трансляциях. Основная идея в том, чтобы пересечь аудитории разных площадок.
Готового счастья не оказалось, как всегда, пришлось дожидаться свободной пары дней (4 месяца ждал) и своими руками сваять первый вариант:
Все комментарии из ЖЖ сейчас копируются в основной блог, где на них можно отвечать. Увы, ответы обратно в ЖЖ пока не транслируются. Трансляция не реалтаймовая (и вообще, пока из рук).
Если идея заживет (появятся ответы на скопированное из ЖЖ), будем работать дальше, например наладим двустороннюю трансляцию.
P.S. До августа я насильно загонял всех комментаторов из ЖЖ/Я.беты комментировать к себе. Это оказалось совсем дурной идеей, народ идет от привычной поляны очень неохотно, только если очень сильно зацепило.
Сначала картинка. А вы так можете (не по цифрам, а по группировке данных)? Более подробные картинки будут ниже.
Я не знаю, есть ли нормальные средства статистики для блоггеров. Наверное, для простых случаев — есть. В ЖЖ можно поставить один из множества ЖЖ-счетчиков (уж не знаю, хороши ли они), на standalone-блог можно поставить обычный счетчик. Но это — для простого случая.
Сегодня меня порадовали, дескать подписка на комментарии в твоем блоге не работает.
Действительно, на ряде записей ссылка "подписаться на комментарии к этой записи по RSS" была битая, вела на несуществующий фид.
Разбирательство показало, что:
Это касается только записей, где последняя буква (буквы) в title - непечатная (мягкий-твердый знак или знаки препинания). Эти символы дирифицируются в подчеркивание.
Сами такие записи имели URL вида date/bla_bla_.html (фиды: bla_bla_.xml).
Ссылки из списков записей (по месяцам, по рубрикам) были правильными.
А вот ссылки, сформированные через <$MTEntryBaseName$> вели на bla_bla.html.
Засучив рукава, я полез читать исходники MovableType и мне открылось страшное.
Предыдущий вариант скрипта экспортирует только те темптейты, которые уже описаны в конфиг-файле от Template Installer
В некоторых случаях это неудобно, хочется экспортировать все, включая widgets, системные темплейты и так далее. Поэтому родился новый вариант (скачать tmpl_export_full.zip).
Использование предполагается совместно с Template Installer:
./tmpl_export_full.pl OutDir [BlogID] [DSN]OutDir - обязательный параметр, что-то вроде
cgi-bin/mt/plugins/TemplateInstaller/template_sets/mycatalog
(mycatalog будет создан если не существует)
BlogID - ID блога (можно подсмотреть в параметрах mt.cgi при администрировании
конкретного блога.
DSN - Data Source в терминах DBI (dbi:Pg:movabletype - умолчание)
После исполнения скрипта, в каталоге OutDir появится набор темплейтов, который будет доступен плагину Template Installer.