Друпалер 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, вы поймете, почему в заголовке я
написал о какой-то "капле". :)
Процесс пошел. На 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"). У кого пока нет - пишите здесь.
<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:
Это касается не только страниц с волной, встроенной с помощью Wave
Embed API , но и страниц, которые создает робот-публикатор. Есть
сейчас несколько таких. Один создает персональный блог в Blogger для
автора волны и вставляет туда его публичные волны, а другой делает для
волн внешние страницы на wavepublisher.appspot.com. Вот так, например,
- http://wavepublisher.appspot.com/index.jsp?q=3082
Нашлось еще одно осмысленное применение 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";
}
Таким образом, если вы не залогинены в "песочнице", вы не увидите
никаких следов волны.