Еще про Drupal и Google Wave: как вставить "волну" в "каплю"

12 views
Skip to first unread message

vadbars

unread,
Jul 2, 2009, 3:02:33 PM7/2/09
to Google Wave Россия
Продолжая тему об интеграции GW с Drupal (да и вообще с другими CMS).
Есть и более конкретный вопрос, чем тот, что был в первом моем
сообщении.

Друпалер Jeffrey Scott получил доступ к <<волно-песочнице>> и дал
довольно интересный обзор Wave Sandbox'а изнутри -
http://webdevnews.net/2009/06/google-wave-sandbox-developers-preview/.

Он же начал тему об интеграции с Drupal и пытается вставить "волну" на
страницу Drupal - http://www.typehost.com/blog/google-wave-embed-first-test
(правда, мы с вами вместо "волны" сейчас там можем видеть только
"заглушку" с wave-сервера, поскольку у нас нет доступа к sandbox'у).

Сама по себе вставка (embed) - довольно простое дело. Google дает
туториал - http://code.google.com/intl/ru/apis/wave/embed/guide.html
Можно, например, для страниц с "волной" сделать шаблон определенного
типа материалов ("wave"), в котором прописать необходимую html- и js-
конструкцию.
Jeffry ищет варианты, как передавать туда переменную с идентификатором
"волны" - waveID. Нужно понять, как получать для этого идентификаторы
пользователей, зарегистрированных в Drupal и на wave-сервере.

p.s. Если вы видели логотип Drupal, вы поймете, почему в заголовке я
написал о какой-то "капле". :)

Vadim Barsukov (vadbars)

unread,
Jul 25, 2009, 11:38:35 PM7/25/09
to Google Wave Россия
Новости с "полей" интеграции GW с Drupal. Точнее с "волн". :)

Процесс пошел. На drupal.org выложили первый приличный модуль Emwave
(точнее, субмодуль к Emfield/CCK) для встраивания волны -
http://drupal.org/node/530526.
В нем реализована другая идея, чем через вставку кода в текст
материала (см. ниже) - тут создается новый тип поля "волна" для CCK.
Плюс такого решения: стандартизация. Минус: не во всех проектах
требуется использование "большого" модуля CCK.
Субмодуль emwave имеет хорошую админскую часть - настраивается
практически все, что предоставляется Wave Embed API. (За исключением,
разве что, двух callback'ов в js-скрипте. Ну это пока экзотика, хотя
их можно тоже использовать, например, для вывода сообщений на странице
с "волной" или каких-либо модификаций структуры страницы).

Самый простой вариант интеграции - вставлять embed код прямо в
материал (node, в терминах Drupal). Можно это делать вручную, причем
достаточно такого кода (вместо рекомендованного в API):
<script src="http://wave-api.appspot.com/public/embed.js" type="text/
javascript"></script>
<script type="text/javascript">
function initialize() {
var wavePanel = new WavePanel('http://wave.google.com/a/
wavesandbox.com/');
wavePanel.loadWave('wavesandbox.com!w+2Bi7arMxYM%25A');
wavePanel.init(document.getElementById('waveframe'));
}
</script>
<body onload="initialize()">
<div id="waveframe" style="width: 100%; height: 100%"></div>
</body>
Это наверняка некорректно с точки зрения html-кода (второй тег body на
одной странице), но работает. Вместо "2Bi7arMxYM%25A" надо подставлять
WaveID нужной волны.
Но такой вариант, конечно, не для "среднего" пользователя. Нужно как-
то автоматизировать процесс вставки.

В плагине для WordPress (http://code.google.com/p/wp-wave-shortcodes/)
это решили через вставку макросов (или как это у них там называется)
по нажатию кнопки редактора. Нажал, появляется форма, которую
пользователь заполняет, указывая в т.ч. WaveID. Оп, и в текст
вставляется код (что-то типа [wave=1234]), который при выводе страницы
превращается в код js-скрипта для вставки "волны".
В Drupal это можно сделать как добавочный фильтр ввода и кнопку для
BuEditor (или другого редактора).
Kipp Watson уже выложил на code.google.com пример интеграции (http://
sites.google.com/site/drupalwave/). Но там пока фактически просто
вставка стандартного js-кода из документации по Embed API. Все еще в
самом начале.

Если тема интересует, присоединяйтесь. У кого есть доступ в песочницу
- волна wavesandbox.com!w+i7arMxYM%A (или просто наберите в панели
поиска "drupal"). У кого пока нет - пишите здесь.

Vadim Barsukov (vadbars)

unread,
Jul 26, 2009, 4:00:18 PM7/26/09
to Google Wave Россия
Проведем улучшения - избавимся от повторного тега body.
Еще используем возможности, предоставляемые Wave Embed API на данный
момент - добавим кнопки "Подключиться к этой волне", "Ответить",
раскрасим волну и сделаем вызов callback при загрузке волны:

<script src="http://wave-api.appspot.com/public/embed.js" type="text/
javascript"></script>

<div id="waveframe" style="width: 100%; height: 100%"></div>

// Выведем здесь какое-либо значение, например, имя пользователя.
// Или его волновой адрес, если он его указал в своем профиле.
// Все это не обязательно выводить именно здесь, можно использовать
любой элемент на странице.
<span id="waveuser"><?php global $user; print $user->name;?></span>

<form id="comment_form">
<button type="button" onclick="wavePanel.addReply()">Говорить
сюда</button>
<button type="button" onclick="wavePanel.addParticipant()">Следуй
за кроликом</button>
</form>
<script>
var wavePanel = new WavePanel('https://wave.google.com/a/
wavesandbox.com/');
// Настроим дизайн под оформление сайта (фон, текст, шрифт, кегль)
wavePanel.setUIConfig('#446666', '#cceedd', 'verdana', '9pt');
// Для примера добавим вызов функции с приветствием пользователю, в
котором используем его имя.
// Аналогично добавляется callback к wavePanel.init
wavePanel.loadWave('wavesandbox.com!w+i7arMxYM%A', welcomeMsg("Welcome
to World Wide Wave, "));
wavePanel.init(document.getElementById('waveframe'));

// Собственно callback функция, которая в этом примере формирует
приветственное сообщение
function welcomeMsg(text) {
var item=document.getElementById("waveuser");
if(item) {
item.innerHTML=text + item.innerHTML + "!";
}
}
</script>

Конечно, аналогично можно использовать API и в других CMS, форумах,
просто страницах и т.п.
Можно развивать это дело дальше. К примеру, разработчик бота Bloggy
(публикует волну в блог на Bloger) добавил к кнопке добавления
участника к волне еще выбор имени, под которым хочешь добавиться.


On 26 июл, 09:38, "Vadim Barsukov (vadbars)" <vadb...@gmail.com>
wrote:

Mokusoff

unread,
Jul 30, 2009, 6:52:07 AM7/30/09
to Google Wave Россия
Добрый день!
Хотелось бы посмотреть хотя бы на "опытную страницу" с работающим
модулем.

Vadim Barsukov (vadbars)

unread,
Jul 30, 2009, 7:14:46 AM7/30/09
to Google Wave Россия
Если вы не залогинены в Волне (причем, кажется, в одном и том же
браузере), то вы увидите на такой странице только "заглушку" с
сообщением о необходимости получить доступ в "песочницу" (или
залогиниться в ней).
Разработчики сообщали, что работают над режимом, в котором доступ
предоставляется и анонимным пользователям тоже. Но пока - увы, видят
содержание только участники волны.

Это касается не только страниц с волной, встроенной с помощью Wave
Embed API , но и страниц, которые создает робот-публикатор. Есть
сейчас несколько таких. Один создает персональный блог в Blogger для
автора волны и вставляет туда его публичные волны, а другой делает для
волн внешние страницы на wavepublisher.appspot.com. Вот так, например,
- http://wavepublisher.appspot.com/index.jsp?q=3082

Rudevich

unread,
Aug 2, 2009, 4:37:54 AM8/2/09
to Google Wave Россия
У меня получается встраивать Wave'ы, но не все. Те в которых до 10
блипов свободно встраиваются, остальные (где больше 10 блипов)
отказываются и выскакивает Dr.Wave...

Vadim Barsukov (vadbars)

unread,
Aug 3, 2009, 1:05:06 PM8/3/09
to Google Wave Россия
Rudevich, по поводу того, что показывается не более десятка блипов:
ну что поделать, это ведь даже еще не "бета"... Только сообщать о
багах и ждать релиза.

Нашлось еще одно осмысленное применение callback-функции.
Как известно, если встраивать волну на страницу сайта, то ее увидят
только обладатели аккаунта в "песочницу". Обычные посетители будут
натыкаться на "заглушку" с сообщением о необходимости залогиниться на
wavesandbox.com. Чтобы не смущать простых смертных этим огорчительным
неравноправием, можно воспользоваться таким трюком:

1. Делаем изначально невидимым тот div, в котором будет показываться
волна.
<div id="waveframe" style="width:100%; height: 100%;
visibility:hidden;"></div>

2. А при инициализации волны вызываем callback-функцию, которая делает
"visible" этот div
window.wavePanel.init(document.getElementById('waveframe'),
initCallback);

function initCallback() {
document.getElementById("waveframe").style.visibility="visible";
}

Таким образом, если вы не залогинены в "песочнице", вы не увидите
никаких следов волны.

Rudevich

unread,
Aug 4, 2009, 7:30:34 AM8/4/09
to Google Wave Россия
Понятно :) Спасибо за идею с callback.

vadbars

unread,
Aug 7, 2009, 11:36:16 PM8/7/09
to Google Wave Россия
Свел воедино все, что уже было написано здесь про встраивание и
оформил в виде статьи на Хабр:
http://habrahabr.ru/blogs/google/66509/
Лежит и у нас в Страницах:
http://groups.google.com/group/google-wave-russia/web/gw---cms-drupal
Reply all
Reply to author
Forward
0 new messages