ShoutBox - integracja z serwisem

Często dostaję pytania o integrację shoutboxa z Waszymi serwisami, w szczególności z systemem autoryzacji. Z racji, iż jest tego stosunkowo dużo, postaram się tu Wam przedstawić integrację shoutboxa z Waszym serwisem (na przykładzie wymyślonego serwisu). Integrację opiszę na najnowszej wersji ShoutBoxa czyli 1.3.1 - podejrzewam, iż na innych wersjach (tych przyszłych i tych wcześniejszych) wyglądać to będzie podobnie.

Autoryzacja

Zacznijmy od wymyślenia systemu autoryzacji w naszym zmyślonym serwisie, z którym będziemy integrować shoutbox. Pójdę na łatwiznę, nie będę wymyślał żadnych obiektów użytkownika itp. Cała autoryzacja będzie zapisana w sesji:

  • $_SESSION['id'] - id zalogowane użytkownika
    Brak ustawionej tej wartości oznaczać będzie, iż użytkownik nie jest zalogowany
  • $_SESSION['login'] - login zalogowane użytkownika
  • $_SESSION['role'] - rola zalogowanego użytkownika
    Załóżmy, że użytkownicy mogą posiadać role, dające im różne uprawnienia. Niech to będą np.:
    • 1 - zwykły użytkownik
    • 2 - moderator
    • 3 - admin

Wszystkie te wartości ustawiane są w momencie logowania do serwisu, a czyszczone w momencie wylogowania.

Baza danych

Ok, teraz zajmiemy się przygotowanie bazy danych. Zakładam, że chcemy skorzystać ze wszystkich możliwości shoutboxa. W paczce shoutboxa znajduje się kod sql, do stworzenia tabel shoutboxa. Z racji, iż Wy już w swoim serwisie posiadacie tabelę użytkowników, nie musicie tworzyć mojej tabeli użytkowników (ShoutBoxUser). Tabela ta jednak zawiera kolor użytkownika. Aby więc tej informacji nie stracić, musicie pole COLOR dodać do swojej tabeli użytkowników poniższym kodem sql (zakładam, iż Wasza tabela użytkowników nazywa się np. user)

alter table user add column `COLOR` varchar(6) default NULL

No i jeszcze musicie utworzyc tabelę ShoutBox - jej kod sql znajduje się w pliku ShoutBox.sql

Konfiguracja

Załóżmy, że pliki shoutboxa z paczki wgracie do katalogu shoutbox do głównego katalogu swojej aplikacji (pliki: sblogin.php, sblogout.php, ShoutBoxDisplay.php - możecie wywalić - nie będą potrzebne.) W pliku cfg.inc.php znajduje się konfiguracja shoutboxa. Możecie tam określić poziomy kompresji, kto może czytać, pisać, dane do bazy danych itp. Przejrzyjcie ten plik, przeczytajcie uważnie komentarze i ustawcie co trzeba.

Html / javascript

Podpinamy teraz kod html, css i javascript, by wstawić na Waszą stronę shoutbox. Na początek wstawmy css i kod js. W sekcji HEAD kodu html wstawcie:

<link rel="stylesheet" href="shoutbox/css/ShoutBox.css" type="text/css" />
<!--[if IE]>
<link rel="stylesheet" type="text/css" href="shoutbox/css/ShoutBox_ie6.css" />
<![endif]-->
	
<script type="text/javascript" src="shoutbox/scripts/ShoutBox.js"></script>
<script type="text/javascript" src="shoutbox/scripts/jquery.js"></script>

Jak zapewne zauważyliście do paczki dołączyłem wersję jQuery. Jeśli macie u siebie jakąś nowszą to bez problemu możecie ją podłączyć zamiast tej z paczki.

Następnie dodamy kod html shoutboxa. Kod ten będzie warunkowany w kodzie php i będzie zależny od naszej konfiguracji z pliku cfg.inc.php oraz faktu, czy jesteśmy zalogowani czy nie. Aby skorzystać z konfiguracji trzeba dołączyć plik cfg.inc.php

<?php
require_once('shoutbox/cfg.inc.php');
?>

No i teraz html shoutboxa. Będziemy go warunkować faktem, czy użytkownik jest zalogowany czy nie oraz ustawieniami z pliku konfiguracyjnego. Kod ten wstawcie tam na stronie, gdzie chcecie wyświetlić shoutbox.

<?php
//jesli jestesmy zalogowani lub jestemy gosciem i goscie moga czytac
if (!empty($_SESSION['id']) || $cfg_shoutbox['guest_read']){
echo '
<div id="sb_main">
	<div class="sb_online"><div class="sb_online_title">Użytkownicy on-line:</div><div class="sb_online_users"><ul id="sb_online_users"></ul></div></div>
	<div class="sb_tools"><div id="sb_history" class="sb_history" title="Pobierz wcześniejsze" onclick="sb.getHistory();"></div><div class="sb_unlocked" title="Zablokuj scroll" onclick="ShoutBox.switchScroll(this);"></div></div>
	<div id="sb_body"></div>
';
if (!empty($_SESSION['id']) || $cfg_shoutbox['guest_write']){ //jesli jestesmy zalogowani lub goscie mogą pisac
	echo '<form onsubmit="sb.sendMessage();return false;">';
	if (empty($_SESSION['id'])){
		echo '<input type="text" id="sb_nick" maxlength="64" value="nick" onfocus="if (this.value==\'nick\')this.value=\'\';"/>
		<input type="text" id="sb_message" class="short" maxlength="255" value="wiadomość" onfocus="if (this.value==\'wiadomość\')this.value=\'\';"/>';
	}
	else
		echo '<input type="text" id="sb_message" maxlength="255" />';
	echo '<input type="submit" id="sb_submit" value="Wyślij" />
	</form>';
}	
echo '
</div>
<div id="sb_footer"><div id="sb_wait"></div><a href="http://nospor.pl/shoutbox.html">ShoutBox 1.3.1</a> © Robert (nospor) Nodzewski</div>
<script type="text/javascript">
';
	echo "var sb = new ShoutBox('sb', $cfg_shoutbox[refresh_time],'$cfg_shoutbox[link]','$cfg_shoutbox[type]');";
echo '
	sb.getMessages();
</script>';
}
?>

Po wstawieniu tego kodu shoutbox powinien już ajax'em wysyłać żądania do serwera w celu pobierania danych. Możecie to łatwo zaobserwować przy pomocy FireBuga - dodatku do FireFoxa.

PHP

Teraz zajmiemy się dostosowaniem kodu php. ShoutBox, gdy wyświetla wiadomości i dodaje nowe, odwołuje się do pliku ShoutBox.php. Pierwsze zmiany zróbmy więc tam - poniższy kod:

<?php
if (empty($_SESSION['nick']) && !$cfg_shoutbox['guest_read']) //jeśli to gość i ustawimy w konfigu że nie może czytać, to go wywalamy
	exit;

if (!empty($_SESSION['nick'])){
	$nick = $_SESSION['nick'];
	$id = $_SESSION['id'];
} else {
	$nick = empty($_POST['nick']) ? null : htmlspecialchars($_POST['nick'], ENT_QUOTES);
	$id = null;
}
?>

zamieńmy na:

<?php
if (empty($_SESSION['id']) && !$cfg_shoutbox['guest_read']) //jeśli to gość i ustawimy w konfigu że nie może czytać, to go wywalamy
	exit;

if (!empty($_SESSION['id'])){
	$nick = $_SESSION['login'];
	$id = $_SESSION['id'];
} else {
	$nick = empty($_POST['nick']) ? null : htmlspecialchars($_POST['nick'], ENT_QUOTES);
	$id = null;
}
?>

Z racji, iż mamy własną tabelę użytkowników, musimy zmienić tabelę z użytkownikami, którą dołączamy. Zamieniamy więc kod:

<?php
$dbd->SetExtraUser('ShoutBoxUser', 'ID', array('COLOR'=>'COLOR'));
?>

na (przypominam, iż założyliśmy, że nasz tabela z użytkownikami nazywa się user):

<?php
$dbd->SetExtraUser('user', 'ID', array('COLOR'=>'COLOR'));
?>

Przyjąłem również, że id użytkownika to pole ID. Jeśli u Was nazywa się inaczej to zmieńcie ID na to Wasze.

Jeśli chcecie wyświetlać użytkowników online (a zapewne chcecie) i nie macie w tabeli użytkowników pola z ostatnią aktywnością użytkownika, to dodajcie je do siebie przy pomocy zapytania:

alter table user 
add column `LAST_ACTIVE_TIME` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP

a następnie zamieńcie kod:

<?php
$sql = 'update ShoutBoxUser set LAST_ACTIVE_TIME=now() where ID='.$_SESSION['id'];
?>

na:

<?php
$sql = 'update user set LAST_ACTIVE_TIME=now() where ID='.$_SESSION['id'];
?>

Prawa

Z ważnych rzeczy pozostały jeszcze prawa. Zalogowany użytkownik może więcej niż niezalogowany, moderator może więcej niż zwykły użytkownik. Zarządzanie prawami odbywa się w pliku libs/ShoutBoxDefaultRights.class.php. Należy zmienić w nim kod:

<?php
$this->Logged = !empty($_SESSION['nick']);
?>

na:

<?php
$this->Logged = !empty($_SESSION['id']);
?>

i już. Prawa załatwione. To czy ktoś jest moderatorem czy nie określa wpis w pliku konfiguracyjnym (pamiętacie jak kazałem Wam się z tym plikiem zaznajomić). Jednak jeśli chcecie w pełni skorzystać z systemu uprawnień Waszego serwisu (na początku tego artykułu napisałem, że zakładamy podział na zwykłego użytkownika, moderatora i admina) to zmodyfikujcie kod:

<?php
public function IsModerator(){
	return $this->Logged && in_array($this->Nick,$this->ModNick);
}
?>

Dodajcie do tego systemowe uprawnienia:

<?php
public function IsModerator(){
	return $this->Logged && ($_SESSION['role'] == 2 || $_SESSION['role'] == 3);
}
?>

Teraz można powiedzieć, że shoutbox został zintegrowany z systemem autoryzacji i uprawnień.

Wyświetlanie

Co bardziej wybredni z Was zapewne będą chcieli zmodyfikować sposób wyświetlania. Za wyświetlanie odpowiada plik libs/ShoutBoxDefaultFormatter.class.php. Załóżmy, że w tabeli user znajduje się pole RANGA, które zawiera np. wartości: masta, laik, wymiatacz. Chcecie te pole wyświetlać obok nicka użytkownika. W tym celu należy powiedzieć, że chcemy pobrać dodatkowe pole z tabeli użytkownika (robimy to w pliku ShoutBox.php):

<?php
$dbd->SetExtraUser('user', 'ID', array('COLOR'=>'COLOR','RANGA'=>'RANGA'));
?>

a następnie w pliku libs/ShoutBoxDefaultFormatter.class.php zamieniamy:

<?php
public function HtmlMessage($message){
	$owner=!empty($message['ADMIN']) ? '_a' : ((empty($message['ID_USER']) && empty($message['NICK'])) ? '_s' : (!empty($message['ID_USER']) && $message['ID_USER'] == $this->_sbObj->GetIdUser() ? '_o' : ''));
	$this->GettingMessageFormat($message);
	$id = $this->_sbObj->GetId();
	return '<div id="'.$id.'_m'.$message['ID'].'" class="sb_m'.$owner.'">'.
				($message['CAN_DELETE'] ? '<div class="sb_d" onclick="'.$id.'.dm('.$message['ID'].');"/>' : '').
				'<span class="sb_t">'.$message['TIME'].'</span>'.
				'<span class="sb_n"'.(!empty($message['COLOR']) ? ' style="color:#'.$message['COLOR'].'"' : '').'>'.$message['NICK'].'</span>'.
				'<div class="sb_tt'.($message['CAN_EDIT'] ? ' sb_e' : '').'"'.($message['CAN_EDIT'] ? ' title="Kliknij, by edytować" onclick="'.$id.'.tti('.$message['ID'].');"' : '').'>'.
					'<span> '.$message['MESSAGE'].' </span>'.
				'</div>'.
			'</div>';
}
?>

na (w zasadzie dopisujemy tylko $message['RANGA'].' '.):

<?php
public function HtmlMessage($message){
	$owner=!empty($message['ADMIN']) ? '_a' : ((empty($message['ID_USER']) && empty($message['NICK'])) ? '_s' : (!empty($message['ID_USER']) && $message['ID_USER'] == $this->_sbObj->GetIdUser() ? '_o' : ''));
	$this->GettingMessageFormat($message);
	$id = $this->_sbObj->GetId();
	return '<div id="'.$id.'_m'.$message['ID'].'" class="sb_m'.$owner.'">'.
				($message['CAN_DELETE'] ? '<div class="sb_d" onclick="'.$id.'.dm('.$message['ID'].');"/>' : '').
				'<span class="sb_t">'.$message['TIME'].'</span>'.
				'<span class="sb_n"'.(!empty($message['COLOR']) ? ' style="color:#'.$message['COLOR'].'"' : '').'>'.$message['RANGA'].' '.$message['NICK'].'</span>'.
				'<div class="sb_tt'.($message['CAN_EDIT'] ? ' sb_e' : '').'"'.($message['CAN_EDIT'] ? ' title="Kliknij, by edytować" onclick="'.$id.'.tti('.$message['ID'].');"' : '').'>'.
					'<span> '.$message['MESSAGE'].' </span>'.
				'</div>'.
			'</div>';
}
?>

Przejrzyjcie sobie ten plik dokładnie i dostosujcie wyświetlanie do własnych potrzeb.

Użytkownicy online

Również w pliku libs/ShoutBoxDefaultFormatter.class.php znajduje się metoda do pobierania użytkowników online. Z racji, iż mamy inną tabelę z użytkownikami, musimy zmodyfikować w niej kod:

<?php
$sql = 'select NICK, COLOR from ShoutBoxUser where DATE_SUB(NOW(),INTERVAL 40 SECOND) <= LAST_ACTIVE_TIME order by NICK';
?>

Przyjmuję, iż w Waszej tabeli user login użytkownika znajduje się w polu LOGIN - jeśli macie inne pole, to zmieńcie tylko nazwe. Kod po zmianach wyglądać więc będzie tak (zostawiam as NICK by nie musieć robić innych zmian):

<?php
$sql = 'select LOGIN as NICK, COLOR from user where DATE_SUB(NOW(),INTERVAL 40 SECOND) <= LAST_ACTIVE_TIME order by LOGIN';
?>

Komendy

Klasy z komendami znajdują się w katalogu libs/commands. Tam również trzeba zmienić to i owo.

ShoutBoxCommandColor.class.php
Zmieniamy kod:

<?php
$sql = "update ShoutBoxUser set COLOR='$_color' where ID=".$_SESSION['id'];
?>

na

<?php
$sql = "update user set COLOR='$_color' where ID=".$_SESSION['id'];
?>

ShoutBoxCommandMe.class.php
Zmieniamy kod $_SESSION['nick'] na $_SESSION['login'].

ShoutBoxCommandNick.class.php
Zmieniamy kod:

<?php
$sql = "update ShoutBoxUser set NICK='$_nick' where ID=".$_SESSION['id'];
?>

na

<?php
$sql = "update user set LOGIN='$_nick' where ID=".$_SESSION['id'];
?>

Jeśli nie chcecie pozwalać na zmianę nicka poprzez ShoutBox to na początku funkcji Run dajcie kod:

<?php
public function Run($arg, ShoutBox $sbObject, ShoutBoxDB $dbObject, ShoutBoxFormatter $formatterObject, ShoutBoxRights $rightsObject){
$sbObject->AddAdminMessage('Komenda zmiany nicku została wyłączona');
return true;
//...dalsza część kodu funkcji Run
?>

Rozwiązywanie problemów

Jeszcze mała wstawka odnośnie rozwiązywania problemów, na które możecie natrafić. W pierwszej kolejności zainstalujcie sobie dodatek FireBug do FireFoxa. Bardzo pomoże w analizie żądań ajaxowych jakie generuje shoutbox. Analizując odpowiedzi, jakie zwracać będzie ajax, będzie mogli szybko określić błąd, albo chociaż mi podać szczegóły.

Kolejną ważną sprawą jest sprawdzenie pliku temp/ShoutBox.log - zapisywane tam są błędy skryptu. Bardzo ważną rzeczą jest nadanie odpowiednich uprawnień na katalog temp, by skrypt mógł do niego pisać.

Podsumowanie

Mam nadzieję, iż podany tu opis jest w miarę czytelny i Wam pomoże. W razie pytań piszcie śmiało. Postaram się Wam w miarę możliwości pomóc i ewentualnie poprawię tego arta, jeśli okaże się, że coś zawile opisałem.

I jeszcze na koniec wspomnę o plikach które modyfikujecie: libs/ShoutBoxDefaultFormatter.class.php oraz libs/ShoutBoxDefaultRights.class.php. Są to domyślne sterowniki napisane przeze mnie. Jeśli zamierzacie robić w nich jakieś zmiany dobrze by było, byście nie modyfikowali tych plików bezpośrednio, tylko stworzyli własne, np: libs/ShoutBoxMyFormatter.class.php oraz libs/ShoutBoxMyRights.class.php i tam nanieśli własne poprawki. Pozwoli to uniknąć nadpisania tych plików, gdy wgram kolejną wersję shoutboxa. Jeśli tak zrobicie to pamiętajcie, by w pliku ShoutBox.php zmienić odwołania do tych plików.

Komentarze

 

2010-10-13 21:39 gość_Lolek

Witam. Mam taki problem, wgrałem sobie tego SB do mojego portalu i nie mam nic. Tylko czarne pole i napis użytkownicy online oraz link w stopce. Poza tym zero. Nie wiem co spaprałem, ale wszystko zgodnie z instrukcją wykonałem. Adres: http://gangstagame.pl/shoutbox.php dostępne tylko po zalogowaniu więc podaje dane: logi: tester, hasło:testowy Jakby ktoś mógł wejść zobaczyć, bo może ba mojej stronie nie da się tego zrobić bo coś się gryzie czy coś. Bardzo proszę o pomoc.

2010-10-14 06:55 nospor

W pliku konfiguracyjnym nie ustawiłeś linka do shoutboxa, dlatego ci nie działa.

2010-10-14 14:46 gość_Lolek

Chodzi o to?

'link' => 'ShoutBox.php',//link do skryptu, który będzie obsługiwać żądania ajaxowe.

2010-10-14 19:32 gość_Lolek

Myślę że problem jest gdzieś indziej, zmieniłem że goście mogą pisać i mam teraz dodatkowo pole tekstowe i przycisk wyślij nie pobiera mi sesji w ogóle. Jeżeli\chodzi o link w tym miejscu jakie podałem w poprzednim wpisie to nie ważne co tam wstawię czy pełną ścieżkę z protokołem czy sam katalog i nazwę pliku jest to samo.

2010-10-14 20:06 nospor

Masz ustawić adres do shoutbox. U Ciebie przecież shoutbox leży w katalogu shoutbox, wiec adres ma być taki:
http://gangstagame.pl/shoutbox/ShoutBox.php

2010-10-14 20:38 gość_Lolek

eh... mam w portalu stronę shoutbox.php i na niej wstawiłem kod wyświetlania shoutboxa a jego pliki w katalogu shoutbox, wcześniej nie wyświetlało mi się nic przez css dałem białe tło i widzę sb. Wejdź pod http://gangstagame.pl/shoutbox.php i zobacz sam jak to wygląda (dane logowania w pierwszym moim komentarzu). mam normalny czat, odświeża się, ale nie wczytuje użytkowników z portalu i wiadomości, jak dodaje nową to odświeża ale nic się nie pokazuje.

2010-10-14 20:40 gość_Lolek

Sorki za dwa pod sobą, już jest ok dodaje, z malutkim opóźnieniem, ale tak, tylko jak się zaloguje na portalu to nie jestem zalogowany w sb.

2010-10-14 20:45 nospor

Ale ja mówie o skrypcie napisanym przezemnie, który obsługuje żądania shoutboxa a ty mowisz o stronce na której wyswietlasz - to dwie różne rzeczy.
No ale widzę, że wkońcu podałeś link co ci kazałem i jakoś zadziałało, więc nie wiem po co nadal się wykłócasz

Co do pozostałych błędów do już inna historia:
userow ci nie wczytuje, bo nigdzie nie widzę byś miał okienko na userów. Przecież w przykładzie ode mnie jest a u ciebie nie ma
Co do wiadomosci: ustaw odpowiedni chmod na katalogu shoutbox/temp oraz na pliku shoutbox/temp/ShoutBox.log

2010-10-14 20:48 gość_Lolek

Znaczy okienko z userami online usunąłem bo nie potrzebne mi jest, ale usunąłem tylko z kodu wyświetlania więc nie powinno być przez to problemów. Zmieniłem chmody logów. Działa bardzo szybko i płynnie tylko nie wczytuje zarejestrowanego usera.

2010-10-14 20:49 gość_Lolek

Treść logów:

Czas: 2010-10-14 20:48:16
Plik: /home/dawnet/domains/gangstagame.pl/public_html/shoutbox/libs/ShoutBoxDefaultFormatter.class.php
Linia: 85
file_put_contents(images/emoticons/emoticons.txt.cache) [<a href='function.file-put-contents'>function.file-put-contents</a>]: failed to open stream: Permission denied
Czas: 2010-10-14 20:48:27
Plik: /home/dawnet/domains/gangstagame.pl/public_html/shoutbox/libs/ShoutBoxDefaultFormatter.class.php
Linia: 85
file_put_contents(images/emoticons/emoticons.txt.cache) [<a href='function.file-put-contents'>function.file-put-contents</a>]: failed to open stream: Permission denied

2010-10-14 20:55 nospor

Hmmm, zarejestrowany user.... to pewnie źle podpiąłeś system autoryzacji pod shoutboxa. U Ciebie zapewne jest inny niż podałem tu w artykule. Wziąłeś ten drobny szczegół pod uwagę?

Co do logów: ustaw chmod na katalog images/emoticons

2010-10-14 21:02 gość_Lolek

Wysłałem Panu wiadomość korzystając z formularza kontaktowego na stronie. Jak znajdzie pan chwile bardzo proszę o odpowiedź. I bardzo dziękuję za udzieloną pomoc.

2010-10-14 21:13 gość_michal

Pomożesz mi wstawić twojego shutboxa na moje forum? Bardzo mi przypadl do gustu. Chodzi o gotowy kod, aby tylko wkleić.

2010-10-14 21:18 nospor

@michal to masz tu napisane wszystko co trzeba zrobic.
A jak się nie chce samemu nic a nic, a chce się tylko "gotowe kody, które trzeba tylko wkleić" to się płaci

2010-12-29 18:43 gość_thurinon

Witam, świetny ten shoutbox. Miałem problemy z instalacją ale dzięki logom udało się to załatwić. Pojawiał mi się shoutbox, na stronie, ale nie wysyłał żadnych wiadomości. Okazało się że plik emoticons.txt.cache nie istnieje, za to istniał emoticons.txt starczyło zmienić nazwę i wszystko zaczęło działać
Pozdrawiam i dzięki za świetną robotę

2010-12-29 20:13 nospor

emoticons.txt.cache tworzy się automatycznie na podstawie emoticons.txt Nic nie miales zmieniać
Jeśli ci nie działał, to może skrypt nie miał praw zapisu do katalogu.

2011-01-02 20:19 gość_thurinon

może to przeoczyłem ale grunt, że działa, i to b. dobrze.

2011-01-05 08:07 gość_daw1do

mam rozumiec zeby sb dzialalo to jakas rejestracja ma byc. Czy dobrze mysle?

2011-01-05 08:42 nospor

W jakim sensie działało i w jakim sensie rejestracja?
Shoutbox działa równie dobrze bez rejestracji. Przecież u mnie tak masz. U mnie jest to samo co w paczce do ściągnięcia.
Jeśli coś ci nie działa to przejrzyj logi: plik shoutbox.log

2011-01-07 16:34 gość_KejeN

Witam,
Mam małe pytanko dlaczego w wersji moduł dla Joomla w ShoutBoxDefaultFormatter.class.php nie ma funkcji HtmlMessage ?
Chciałem dokonać drobnej edycji (podlinkowanie nick-u do profilu), ale z tego co się rozejrzałem to wyświetlanie elementów w jest chyba 'zaszyte' gdzieś w js-ie.
Chciałem prosić o wskazówkę gdzie (w którym pliku) mógłbym szukać zmiennej/funkcji czy odpowiedzialnej za wygląd wiadomości.
Z góry dziękuję za odpowiedź i przepraszam za stwarzanie problemów.

2011-01-07 19:46 nospor

NIe stwarzasz problemów. Po prostu pytasz - normalna sprawa.
Wersja dla Joomla jedzie na starszym silniku niż wersja normalna, stąd ten brak.
Jeśli chodzi o sam link przy nicku, to wystarczy go dodać w funkcji GettingMessageFormat() w pliku ShoutBoxDefaultFormatter.class.php

2011-01-08 07:28 gość_KejeN

Dzięki,
Po raz kolejny: Jesteś wielki!

2011-02-06 23:22 gość_Pi

Zainstalowałem w Joomla 1.5, okienka widać, ale napisać nic nie można. Będę wdzięczny za jakiekolwiek sugestie, bo moduł bardzo mi się podoba i chciałbym go wykorzystać
adres: http://www.zs4.krasnystaw.pl/pogadajmy.html

2011-02-07 07:23 nospor

Z racji, że shoutbox nie jest na stronie głównej, to w parametrach shoutboxa masz podać adres do strony, na której jest shoutbox, czyli: http://www.zs4.krasnystaw.pl/pogadajmy.html?
Parametry ustawiasz w panelu admina Joomli w module shoutbox

2011-02-07 08:09 gość_Pi

Działa - moje ukłony i największe wyrazy uznania!!!
Na marginesie - może warto byłoby jakiś większy poradnik konfiguracyjny stworzyć dla takich "zielonych" amatorów jak ja. Pisze poważnie, bo moduł zwłaszcza przez "cenzurę" ma duży potencjał rozwojowy, a często niestety administrowaniem stron zajmują się amatorzy - pasjonaci bez dogłębnej wiedzy informatycznej.
Na razie testowo oddałem stronę na pożarcie uczniom - jeśli wszystko będzie grało, przerzucę na główną.
Pozdrawiam

2011-02-07 08:33 nospor

Akurat w tym przypadku wystarczyło przejrzeć opcje dostępne dla shoutboxa - opis po polsku wydaje mi się dość precyzyjny. Poradnik by się więc sprowadził do: przejrzyj opcje
Chyba, że naprawdę coś stwarza problem - to napisz i się pomyśli.

2011-04-02 17:10 gość_Michał

Próbuję zintegrować Twój shoutbox z moim portalem (polonistycznie.info). Chcę go wstawić na dole strony, nad "Listą obecności", ale jak go wstawiam wg powyższej instrukcji, to wszystko się rozwala na całej stronie.

Jakieś sugestie?

2011-04-02 20:40 nospor

"to wszystko się rozwala na całej stronie."
Taki zwrot mało mi mówi.
Jeśli się rozwala, znaczy że kod html/css nie pasuje. Trzeba poprostu dopasować. Wstaw to, udostępnij, to może coś się poradzi.

2011-04-03 13:10 gość_Michał

Wrzuciłem na jedną z podstron:
http://polonistycznie.info/notatki-z-lektur.html

2011-04-04 07:30 nospor

Masz u siebie 3 główne bloki: left, content, right
A ty shoutbox wkładasz poza te bloki. Jeśli już naprawdę chcesz tak zrobić, to poprzedź shoutboxa takim divem:
<div style="clear:both;"></div>
Będzie już o niebo lepiej. Resztę dopracować można w zmianach ShoutBox.css

2011-04-04 11:59 gość_Michał

Rzeczywiście, jest lepiej, choć myślałem że standardowo wygląda jak u Ciebie (i istnieje możliwość "schowania").

2011-04-04 12:46 nospor

Takie rzeczy zależą od layoutu. Ty masz taki a nie inny i niestety trzeba wygląd shoutboxa dopasować do Twojego layoutu. No ale na dobrą sprawę wystarczy zmienic parę rzeczy - szerokość, margin - i po winno być ok.

2011-04-04 22:38 gość_Michał

Dobra, udało mi się, ale dlaczego nie mam w tools'ach np. wyboru koloru?

2011-04-05 08:20 nospor

Bo tego nie dodałem do wersji do ściągnięcia.
Mogę dodać w wolnej chwili

ps: zintegrowałeś autoryzację? Poszło w miarę bez problemu?

2011-04-05 09:21 gość_Michał

Jakbyś mógł to zintegrować, albo chociaż podać instrukcję co trzeba zrobić, to byłoby fajnie. Użytkownicy portalu, gdzie to instalowałem mają straszny problem np. z komendą zmiany koloru.

Integracja autoryzacji poszła bez większych problemów... wystarczyło postępować wg powyższej instrukcji

2011-04-05 09:30 nospor

Ok, postaram się to jeszcze w tym tygodniu wrzucić do paczki.

2011-04-06 19:11 nospor

Dobra, wrzuciłem
http://nospor.pl/shoutbox-wybor-kolorow-oraz-emotikon.html

2011-09-12 18:52 gość_ati

1. sekcja 'komendy' - pierwszy wpis
jest >ShoutBoxCommandNick.class.php<
powinno być >ShoutBoxCommandColor.class.php<
//wzmiankowanego kodu nie znalazłem w ShoutBoxCommandNick.class.php natomiast znalazłem w ShoutBoxCommandColor.class.php. Następny wpis dot. ShoutBoxCommandNick.class.php własciwie wskazuje plik i kod.

2. proszę uprzejmie o wyjaśnienie kwesti:
a. różnica w skryptach pomiedzy ID (identyfikacja usera) a id (dla session i message). Czy są tożsame, czy zmiana ID na id nie wprowadzi błędu //zmiana wymuszona CMS-em. Zdaje się że było też id_user.
3. różnica pomiędzy login a LOGIN (raz znalazłem taki wyjątek), a i zdaje się że nick i NICK ale tu chyba jest różnica pomiedzy nick (tylko dla sb) a NICK (dla CMS-a)

// CMS WOLF używa id, username, last_login, tabela user. No i oczywiscie prefix dla tabel. Rozumiem że dostosowywanie skryptu choćby tylko dla bardziej znanych cms-ów to zakręcona praca ale chyba można by jednym cięciem załatwić wszystkie systemy. Np. wszystkie te znaczące zmienne wyciagnąć do cfg - niech tam admin wykona właściwe przyporządkowania i nikt nie będzie musiał grzebać (prawie) w plikach.

Pisze to wszystko gdyż - choć udało mi sie uruchomić sb i działa w zakresie wprowadzania i wyświetlania wiadomości to nie działa mi współpraca z CMS-em w zakresie obsługi użytkowników on-line (przejęcie nicka z systemu i wyświetlanie uzytkowników), nie działa tez LAST_ACTIVE_TIME pomimo właściwej tabeli. Na pewno (hmmm) zrobiłem wszystko zgodnie z instruktażem ale widać popełniłem jakis błąd albo integracja wymaga bardziej finezyjnych lub dogłębniejszych działań. Moze to jakać pierdułka - stąd tez moje pytania bo moze jestem tuż tuz od sukcesu.pzdr

2011-09-13 08:43 nospor

ad1) Faktycznie, dzięki za zwrócenie uwagi

ad2)$_SESSION['id'] przechowuje id zalogowanego użytkownika. Jest to id z tabeli użytkownika. Jak chcesz to możesz
Są też ID wiadomości, jest też ID_USER, np gdy pobieram wiadomości to jest ID wiadomości oraz ID_USER będące id użytkownika, który napisał wiadomość.
W tabeli wiadomości raczej nie musisz nic zmieniać. To jest tabela shoutbox. NIe wiem za bardzo co tam wymusza na Tobie CMS.
Nawet jeśli w cms, pole z ID nazywa się np. ID_USER to niech ono się tak nazywa. w sesji nadal możesz to trzymać jako $_SESSION['id'], zaś w shoutbox.php
nie: $dbd->SetExtraUser('ShoutBoxUser', 'ID', array('COLOR'=>'COLOR'));
a: $dbd->SetExtraUser('ShoutBoxUser', 'ID_USER', array('COLOR'=>'COLOR'));

ad3) Może pokaż konkretnie kod o którym mówisz.

Ogólnie napisz z czym masz problem jeśli jeszcze jakiś będziesz miał - pomału naprawimy

2011-09-13 12:16 gość_ati

ok. stan aktualny jest następujący
1. wprowadziłem zalecane zmiany
2. uzyskałem wprowadzanie i odczyt wiadomości. Nie uzyskałem itegracji na poziomie autoryzacji.
// z podglady przez phpAdmina widzę że dla LAST_ACTIVE_TIME nowy wpis pojawia mi się jedynie raz na jakiś czas (raz dziennie). Może ma na to wpływ moje grzebalnictwo w kodzie (kiedy wszystko jest dobrze to wpis się pojawia a kiedy znów coś zmienię i nie działa to nowych wpisów nie ma).
Tzn.
1. jestem zalogowany w CMS-ie.
2. sb mnie nie widzi
3. w LAST_ACTIVE_TIME nie pojawia się aktualizacja o ostatniej aktywności

szczerze to nie wiem jak moglibysmy podejśc ew. do kwestii uruchomienia funkcjonalności. Moze jakieś twoje sugestie co sprawdzać, tak krok po kroku ...
pzdr

2011-09-13 20:51 nospor

No ale w jaki sposób Twój cms przechowuje info, że ktoś jest zalogowany, id zalogowanego oraz jego login?
Bo jak widzisz w mojej przykładowej sytuacji jest:
$_SESSION['id'] - id zalogowane użytkownika
 Brak ustawionej tej wartości oznaczać będzie, iż użytkownik nie jest zalogowany 
$_SESSION['login'] - login zalogowane użytkownika 
$_SESSION['role'] - rola zalogowanego użytkownika
 Załóżmy, że użytkownicy mogą posiadać role, dające im różne uprawnienia. Niech to będą np.: 
1 - zwykły użytkownik
2 - moderator
3 - admin

 Wszystkie te wartości ustawiane są w momencie logowania do serwisu, a czyszczone w momencie wylogowania.

2011-09-13 22:52 gość_ati

zadajesz co najmniej niedyskretne pytania ...
u ciebie 'id' - u mnie 'id'
u ciebie 'login' - u mnie 'username'
u ciebie 'role' - u mnie 'role_id'

znaczące 'role' to 1 i 2
bez znaczenia to 3 i 4

pzdr

2011-09-14 08:30 gość_ati

jestem z lekka skonfundowany - w miedzyczasie starałem się podejrzeć indeksy $_SESSION i .. zero odczytu.

2011-09-14 08:32 nospor

I te wartości masz w sesji? No to nie rozumiem czemu autoryzacja ci nie działa. Pokaż lepiej swoje kody jak pozmieniałeś wg. wskazówek w tym arcie.

2011-09-14 08:33 nospor

jestem z lekka skonfundowany - w miedzyczasie starałem się podejrzeć indeksy $_SESSION i .. zero odczytu.

To nic dziwnego, że autoryzacja nie działa
A sesję w shoutbox startujesz?

2011-09-14 09:38 gość_ati

1. staram się uruchomić sb w ramach CMS-a (tu mogą np. ingerować zmienne czy ustawienia CMS-a) i 'standalone' korzystając jedynie z tych samych tabel CMS-a

2. i tu i tu mam ten sam efekt, sb działa ale bez wspópracy z tabelą userów

3. i tu i tu jest problem z $_SESSION - odczyt indeksów nie działa. Mogę wprowadzić własne dane i je odczytać. Ale danych używanych przez sb to juz nie.

ciekawostka - trafiłem w googlach na wątek problemu z inicjalizacją session_start(). Lekarstwem była zmiana w php.ini wartości dla autostartu z 0 na 1. Zmieniłem i zniknęło wyświetlanie treści wiadomości (i tu i tu). Wróciłem do 0 i wyświetlanie też powróciło.

acha - przeglądając kod sb miałem wrażenie że nie powinno sie udac wysłanie wiadomości bez podania nicka. U mnie można wysłać taką wiadomość z wyświetleniem gość_Nick )

2011-09-14 19:37 nospor

Musiałbym zobaczyć kod. Znając życie robisz jakiś błachy błąd ale ciężko mi ostatnio w szklanej kuli czytać

2011-09-14 22:46 gość_ati

rozumiem, instalacja na 127, paczka w drodze, pozdrawiam

2011-09-16 12:52 nospor

Dla potomnych rozwiązanie problemu ati:
1) Nie startował sesji
2) W sesji wbrew jego wypowiedziom nie było id użytkownika.
Ot takie dwie drobnostki

2012-02-01 17:27 gość_Michał Chrzan

WItam.
Mam taką samą prośbe jak kolega gość_Lolek z małym wyjątkiem czat mi sie wyświetla tylko nie wyświetla uzytkowników online, wykrywa mnie na grze jako zalogowanego bo znika tabelka nicku.lecz nei da sie wogóle pisać.Mógłbyś pomóc i doradzić? tabela z uzytkownikami to users dane
userid i username

2012-02-01 17:52 nospor

Na początek: sekcja "Rozwiązywanie problemów" na końcu tego arta.
Jak to nie pomoże to przydałyby się jakieś dane logowania dla mnie i link do chatu.

2012-02-02 08:23 gość_Michał Chrzan

Niestety nie pomogło .Dane wyłałem na pana poczte.

2012-12-01 22:37 gość_pawel

Przepraszam z odświeżenie tego ale mam problem iż nie wyświetla mi wpisów i nie wiem co z tym zrobić czytałem komentarze ale w php jestem nowy i mało umiem więc nic nie zdziałam bez bezpośredniej pomocy więc jak możesz pomóż.
strona z sb http://luminous.ugu.pl/shoutbox5.php

2012-12-02 20:48 nospor

Link do shouta ma kierować na mój shoutbox.php a nie na jakis shoutbox5.php, który wyświetla stronę.

2013-04-04 18:03 gość_Wiechu

Witam
Testuje Panana shotboxa na ta chwile lokalnie ale mam pytanie dotyczace wyswietlania wiadomosci
jesli jest okolo 100 wpisow - program automatycznie nie pokazuje najstraszych policzylem i pokazuuje ostatnich 40 wpisow czy mozna ustawic tak aby pokazywal wszytskie jakie byly napisane dopiero opcja kasowanie po x dniach usuwa stare wpisy

jesli tak prosze o rade w ktorym miejscu trzeba edytowac kod

Pozdrawiam
Wiechu

2013-04-05 08:30 nospor

Tak, shoutbox ogranicza liczbę wyświetlanych wiadomosci. No ale po to jest guzik HISTORIA, by móc sobie wyświetlić starsze wiadomości...

Jeśli jednak nadal chcesz wyświetlać więcej, to w klasie ShoutBox masz metodę SetCountLastMessages()

2013-06-29 17:42 gość_woxal

Witam. Czy może Pan podać przykład tabeli autoryzacji czyli byłby w tym id, nick, password , data rejestracji, aktywny. Wtedy łatwiej byłoby go zintegrować shoutboxa.

2013-06-30 11:15 nospor

No tak, tabela z userem zawiera dane co podałeś.

Dodaj komentarz

 

Dostępne bbcode: b, u, i, url, code, php, css, html, sql, js

Ostatnio komentowane

  1. ShoutBox nospor
  2. ShoutBox Rafał
  3. ShoutBox nospor
  4. ShoutBox Rafał
  5. ShoutBox nospor
  6. ShoutBox Artur
  7. PHP South Coast conf... nospor

Skrypty użytkowników

  1. Klasa obsługi szablo... Lirdoner
  2. Sekcje user76
  3. Klasa walidująca for... user76
  4. Licznik Gości online korey
  5. Form Builder Comandeer
  6. Dynamiczny licznik z... korey
  7. Captcha Comandeer