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

Главные вкладки

Аватар пользователя direqtor direqtor 15 января 2011 в 15:49

Довольно распространенный модуль 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

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

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

Комментарии

Аватар пользователя boratiche boratiche 10 февраля 2011 в 14:00

Добрый день.
После переустановке "LiveJournal crossposter" в типах материалов не появляется "Crosspost to LiveJournal".
У кого нибудь было подобное?

Аватар пользователя boratiche boratiche 10 февраля 2011 в 14:00

Добрый день.
После переустановке "LiveJournal crossposter" в типах материалов не появляется "Crosspost to LiveJournal".
У кого нибудь было подобное?

Аватар пользователя direqtor direqtor 10 февраля 2011 в 15:05

Эта галочка появляется, если у автор материала настроена учетка ЖЖ в профиле и если именно он залогинен на сайте.

Аватар пользователя boratiche boratiche 10 февраля 2011 в 16:50

Учетка настроена для админа, захожу под админом. Материал создан админом. В настройках LJXP указал какой тип материала можно кроспостить.
При первой установки LJXP все работает, после переустановки не добавляет к материалу галочку "Crosspost to LiveJourna".
Переустановку делаю путем: "модули" - убрал галочку на LJXP - сохранить конфигурацию - удалить - удаляю модуль, ну а потом устанавливаю.

Аватар пользователя direqtor direqtor 10 февраля 2011 в 17:19

"boratiche" wrote:
"модули" - убрал галочку на LJXP - сохранить конфигурацию - удалить - удаляю модуль, ну а потом устанавливаю.
Так там поля checkbox вообще нет или вам нужны галочки, проставленные в нем ранее?

Аватар пользователя boratiche boratiche 10 февраля 2011 в 17:37

"direqtor" wrote:
"модули" - убрал галочку на LJXP - сохранить конфигурацию - удалить - удаляю модуль, ну а потом устанавливаю.
Так там поля checkbox вообще нет или вам нужны галочки, проставленные в нем ранее?

Это я описал как делаю переустановку модуля LJXP.

Аватар пользователя boratiche boratiche 10 февраля 2011 в 17:37

"boratiche" wrote:
При первой установки LJXP все работает, после переустановки не добавляет к материалу галочку "Crosspost to LiveJourna".

Аватар пользователя direqtor direqtor 10 февраля 2011 в 19:27

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

Аватар пользователя comorg comorg 30 декабря 2011 в 11:33

Для того что бы плостить например картинку в lj, Я подпилил мод таким образом
Находим
$post_header .= '</b></p>';
Ниже дописываем:

$nids = db_query("SELECT filename FROM {file_managed} ORDER BY fid DESC LIMIT 1 ");
foreach ($nids as $record) {
  @$img_file .= $record->filename;
}
$post_header .= '<p><img src="http://cookies.dcroid.ru/sites/default/files/styles/blog_big/public/' . $img_file . '" alt="Toondra Stydio"></p>';

То есть теперь у нас будет браться последнее имя файла из базы file_managed таблицы filename и кроспосться html код отображения картинки.

Аватар пользователя comorg comorg 6 января 2012 в 9:56

Изначально файл один идет.
У меня хорошо работает, конечно это ни есть хорошо, делать запрос просто к последниму файлу.