Быстрый хак модуля Livejournal Crossposter (ljxp) для работы с полями CCK

Довольно распространенный модуль Livejournal Crossposter (ljxp) предназначен для автоматической публикации материалов Drupal-сайтов на Livejournal-совместимых сервисах. Я уже как-то писал о его установке и настройке у себя в блоге и на Drupal.ru. Но у модуля есть один существенный недостаток - он кросспостит в ЖЖ только стандартные заголовки ноды и ее тело (body) в виде тизера или полного текста. Поля CCK в нем полностью игнорируются. И устранить этот недостаток пока можно только хаком.

Сам модуль ljxp достаточно прост по своему устройству. Чтобы найти код, который формирует части сообщения передаваемого в ЖЖ через xmlrpc откроем основной файл модуля ljxp.module (я использовал последнюю версию 1.6). Найдем в нем функцию ljxp_post() в строке 402. Именно она и формирует из ноды требуемое по спецификации API ЖЖ сообщение и передает его на сайт. Если вы не используете системное body, то поля переменной $node->teaser и $node->body содержат пустое значение. Именно здесь мы их и можем заполнить любым содержанием.

В принципе на этом идея хака понятна, но приведу один практический пример из собственных проектов. Я редко использую body, а для имитации его функционала применяю два поля: Анонс (field_resume) и Полный текст (field_text). В моем случае хак выглядит так (со строки 403):

// begin of hack
  $node->teaser = $node->field_resume[0]['value'];
  $node->body = $node->field_resume[0]['value'] . $node->field_text[0]['value'];
// end of hack

В вашем случае потребуется написать другой код, зависящий от названий ваших полей и от того что вы желаете видеть до ЖЖ-ката, а что после.

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

// begin of hack
  $node->teaser = node_view($node, TRUE, FALSE, FALSE);
  $node->body = node_view($node, FALSE, FALSE, FALSE);
// end of hack

Из недостатков, вы не сможете запостить таким образом поля со ссылками, файлы или картинки. Работа хака проверена только на текстовых полях.

Да, знаю хак это плохо, но в данном случае иначе никак.

У меня ljxp тоже ломатый - не

У меня ljxp тоже ломатый - не понравилось как он "читать далее" в сам жж вставлят - сначала клиенту, потом я свынужден был согласиться что там лажа :-) . Может патчи им предложим?

Вообще что тело кросспоста нельзя, как минимум, темизировать никак - это плохо.

Надо это сделать

Думаю надо это сделать. Тем более я такие хаки уже как минимум на трех проектах сделал. Но вот времени все не хватает.

> Тем более я такие хаки уже

> Тем более я такие хаки уже как минимум на трех проектах сделал

Можно глянуть на эти проекты?

Проекты

http://primamed-dv.ru - http://primamed.livejournal.com

http://malinafoto.ru - http://malinafoto.livejournal.com

Третий сайт, к сожалению, перед НГ почил в бозе.

Каюсь, тоже хакала, так как

Каюсь, тоже хакала, так как других методов(своих хуков, ф-ий темизация, пр.) модуль не предоставляет. + Использовала check_plain, а то мало ли что пользователь введет в поле.

В текстовых полях фильтры

В текстовых полях фильтры стоят. И вывод уже обработан.