Загрузка последнего сообщения из Twitter в профиль

идея была давно. а вот вчера посреди ночи проснулся и занялся реализацией. Просьба не кидать в меня помидоры, я не знаю ПХП. Лучше укажите недочеты, и помогите исправить :)
Итак.
1) Сначала попытался сделать это все на пхп. но знающие люди отговорили от этой идеи. все таки твиттер находится на удаленном сервере, поэтому, чтобы профиль не упал при падении твиттера, решил реализовать это на Яваскрипте
2) В свете того, что в предверии выхода версии движка 0.3 сообщество как то зло на все реагирует, хочу заявить. Я тут непричем, моей заслуги нет, код ворованый и тд и тп. Спасибо Максу aka ort за движок.
3) Баги есть и многое еще не доделано. но основной функционал сделан. Повторюсь, буду очень рад, если кто-нибудь поможет сделать из этого конфетку
4) как выглядит это безобразие можете посмотреть тут
file.kirovnet.ru/d/108648
простите ссылку на сайт дать не могу — мы за NAT :)
5) Поддерживается не только Twitter, но и любой сервер на движке laconi.ca
6) актуально для пре-0.3, для версии 0.2 тоже должно работать
Закончили с приветами и поздравлениями — Приступаем к работе

для начала создадим в бд в таблице prefix_user поле profile_user_twitter и ознакомимся вот с этим мануалом по созданию дополнительных полей в профиле.
в /templates/skin/new/actions/ActionProfile/sidebar.tpl добавляем сразу после
<ul>
                                        {if $oUserProfile->getProfileIcq()}
                                                <li class="icq"><a href="http://www.icq.com/people/about_me.php?uin={$oUserProfile->getProfileIcq$
                                        {/if}
                                </ul>

вот этот код

{if $oUserProfile->getProfileTwitter()}
                                                 <li class="micro">
<a href="http://www.twitter.com/{$oUserProfile->getProfileTwitter()|escape:'html'}" target="_blank">{$oUserProfile->getProfileTwitter()}</a></li>
                                         {/if}
                                </ul>

в classes/modules/user/mapper/User.mapper.class.php
user_profile_twitter = ?,

и
$oUser->getProfileTwitter(),


в classes/modules/user/entity/User.entity.class.php
public function getProfileTwitter() {
        return $this->_aData['user_profile_twitter'];
    }
  public function setProfileTwitter($data) {
        $this->_aData['user_profile_twitter']=$data;
    }

затем в Затем в classes/actions/ActionSetting.class после проверки ICQ
/**
                         * Проверяем Микроблоги
                         */
                        if (func_check(getRequest('profile_twitter'),'text',1,50)) {
                                $this->oUserCurrent->setProfileTwitter(getRequest('profile_twitter'));
                        } else {
                                $this->oUserCurrent->setProfileTwitter(null);
                        }

далее в /templates/skin/new/actions/ActionSettings/profile.tpl
<p><label for="profile_twitter">{$aLang.settings_profile_twitter}:</label><br /><input type="text"  class="w300" name="profile_twitter" id="profile_twitter" value="{$oUserCurrent->getProfileTwitter()|escape:'html'}"/></p>

в /templates/language/russian.php
'settings_profile_twitter' => 'Микроблоги',


Итак с подготовкой мы закончили. приступаем к реализации загрузки
качаем скрипт и кладем его в templates/skin/new/js/

затем в templates/skin/new/actions/ActionProfile/whois.tpl
сразу после
<div class="name">
                                        <img src="{$oUserProfile->getProfileAvatarPath(100)}" alt="avatar" class="avatar" />
                                        <p class="nickname">{$oUserProfile->getLogin()}</p>
                                        {if $oUserProfile->getProfileName()}
                                                <p class="realname">{$oUserProfile->getProfileName()|escape:'html'}</p>                          $
                                {/if}

вставляем код
<div id="tweet">
{if $oUserProfile->getProfileTwitter()}
<script type="text/javascript" src="{$DIR_WEB_ROOT}/templates/skin/new/js/twitter.js"></script>
<script type="text/javascript" charset="utf-8">
var data = '{$oUserProfile->getProfileTwitter()}';
{literal}
getTwitters('tweet', {
  id: data ,
  count: 1,
  enableLinks: true,
  ignoreReplies: true,
  clearContents: true,
  template: '"%text%" <a href="http://twitter.com/%user_screen_name%/statuses/%id%/">%time%</a>'
});
</script>
{/literal}
 <p>Подождите пока загрузится статус <img src="{$DIR_WEB_ROOT}/templates/skin/new/images/ajax-loader.gif" /></p>
{/if}
</div>

идем сюда и создаем себе индикатор на любой вкус и цвет. Складируем его сюда templates/skin/new/images/ и обретаем счастие :)

Ну и напоследок. Вина и фруктов тому, кто обрамит это красивым CSS.

Ну и самое последнее, тестировал только под FF 3.0.8. Как работает под остальными браузерами — не знаю, у меня их просто нет.

Приятного использования, все мысли в комментарии :)

Ой, совсем забыл :) Перенести никуда не могу — кармы нехватает :)
UPD: Спасибо eXtravert. надоумил — теперь, если в user_profile_twitter записи нет, то ничего не выводится, код поправил

17 комментариев

avatar
замечательный скрипт, спасибо вам… очень помогает разбираться на примерах в функционале движка…

только JavaScript и Java это абсолютно разные вещи, поправьте пожалуйста >.<
avatar
сорри. я больше суток не спал. вчера уснуть не мог, пока не реализовал :)
avatar
А пример где-нибудь можно глянуть? А то наобум устанавливать не хочется.
avatar
к сожалению нет, мы находимся за NAT, выхода в инет не имеем. Можете приехать в Киров и подключиться к провайдеру Multinex, посмотрите :)). а так вроде все расписано, проблем возникнуть не должно, может кто нибудь смелый поставит, тогда и будет видно :)
avatar
Все будет работать, если делать все внимательно. Будет как на хабре.
Вот скрин что недавно присылал мне ramdomtoy, надеюсь он не обидится.
avatar
эмм :) ну так я вроде в самом посте давал ссылку на скрин :) просто у меня счас нечем пожать картинку для нормальных размеров :)
avatar
у человека симпатично блог сделан: thehomepage.ru/3
avatar
Как это реализовать под 0.4?
avatar
Пишу, для того, чтобы поднять тему в прямом эфире.
Очень нужно, может кто знает?
avatar
Сейчас попробовал — вроде должно работать. но у меня что-то не правильно с полем твиттера… не хочет сохранять
avatar
Вы не ошиблись с тем что нужно создать поле profile_user_twitter, а не user_profile_twitter ???
avatar
не исключено. Но это был хак по 0.3

Под 0.4 скоро будет полноценный плагин
avatar
Фри или за денежку?
avatar
пока этот вопрос не стоял. скорее всего будет фри.
avatar
да я уже и сам всё сделал) кстати лишний раз убедился что плагин «Контакты и социальные сервисы» так коряво сделан…
avatar
Скоро? :)
avatar
сейчас пишу новый плагин «Контакты и социальные сервисы» в который собираюсь включить эту плюшку. Если интересно, обращайтесь в личку
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.