News:

Want to get involved in developing SMF, then why not lend a hand on our github!

Main Menu

modifikacija ajax chata

Started by rocknroller, April 03, 2010, 04:07:10 PM

Previous topic - Next topic

rocknroller

Uvijek imam nekakve ideje, vidio sam to na jednom forumu na ajax chat-u ali administratorica baš i nije raspoložena pomoći stoga trebam pomoć od vas. Možda izgleda komplicirano ali fantastično je i potiče komunikaciju.

napravio sam u photoshopu otprilike na što mislim, odnosi se na desni dio chata (nacrtao sam). online lista logiranih korisnika na FORUM.

Ne znam postoji li već gotova takva modifikacija. Ako netko zna i želi mi pomoći oko ovoga za uzvrat nudim neke grafičke zahvate po dogovoru.

MarkoWeb

Listu online korisnika vec imas na pocetnoj stranici foruma iliti u boardindex.template.php fajlu tako da je mozes iskoristiti i za chat. Tako da ti gotova modifikacija i nije potrebna, funkcija vec postoji.

rocknroller

Quote from: MarkoWeb on April 03, 2010, 04:24:23 PM
Listu online korisnika vec imas na pocetnoj stranici foruma iliti u boardindex.template.php fajlu tako da je mozes iskoristiti i za chat. Tako da ti gotova modifikacija i nije potrebna, funkcija vec postoji.

znači potrebno ju je na neki način implementirati (ubaciti) u chat? ali sam sa php-om nula. Dali je to velik zahvat?

MarkoWeb

Subzirom da si "sa php-om nula" kako kazes onda svakako jeste. Ali u principu to je jedan foreach koji treba kopirati i naravno srediti html/css da bi to izgledalo kako ti zelis.

rocknroller

html i css sa time sam na "ti"  napraviti  ću sam sve što znam i umijem, ako si mi voljan pomoći u nekim smjernicama, imati ću sigurno dosta pitanja.


jel se može recimo da napravim smanjim širinu chata i napravim paragaf  i tamo nekom php funkcijom pozvati ispis online korisnika?

rocknroller

Napravio sam u html-u i css-u polje gdje sam htio, može li mi netko pomoći oko php-a?
Možete pogledati na forumu stoji online na mjestu gdje bi htio ubaciti funkciju kao što je rekao Marko Web

Dzonny


rocknroller

Quote from: Dzonny on April 04, 2010, 09:13:40 AM
Možeš preko ssi funkcije da ubaciš ko je online:
http://www.logooff.net/smf2/ssi_examples.php

ajde molim te mi malo pojasni, chat se otvara u shoutbox.html dali se uopće može pozvati php funkcija u html dokumentu.



našao sam u ovom dokumentu što si stavio predpostavljam da je to ovo <?php ssi_whosOnline(); ?>


Dzonny

Ne, ali zato iz html stranice možeš da pozoveš drugu stranicu koja sadrži ono što ti treba.
Napravi php fajl u koji ćeš staviti ssi funkciju za online listu i sačuvaj je negde na serveru,  a onda pomoću iframe taga pozovi napravljenu stranicu i to je to.
http://www.w3schools.com/TAGS/tag_iframe.asp

rocknroller

Quote from: Dzonny on April 04, 2010, 09:45:10 AM
Ne, ali zato iz html stranice možeš da pozoveš drugu stranicu koja sadrži ono što ti treba.
Napravi php fajl u koji ćeš staviti ssi funkciju za online listu i sačuvaj je negde na serveru,  a onda pomoću iframe taga pozovi napravljenu stranicu i to je to.
http://www.w3schools.com/TAGS/tag_iframe.asp

napravio sam tako ali sad me traži u popup prozoru "potrebna autentifikacija"

vidi.

Dzonny

Jesi stavio ovaj kod na vrh php stranice?
<?php require("SSI.php"); ?>   
Stranica bi zapravo trebala da sadrži samo taj kod + kod za online listu.

rocknroller

#11
Quote from: Dzonny on April 04, 2010, 10:12:05 AM
Jesi stavio ovaj kod na vrh php stranice?
<?php require("SSI.php"); ?>   
Stranica bi zapravo trebala da sadrži samo taj kod + kod za online listu.

da direktore svaka čast, php datoteku sam bio ubacio u folder sa ograničenjima zato je tražio autorizaciju, sada kada je u rootu radi.

još samo da nekako maknem ono "6 Gostiju, 1 Korisnik (0 Prijatelja)"


EDIT:

Sada vidim da listu korisnika ne radi kako bi htio jedan korisnik ispod drugoga. Mogu li u taj ssi.php ubaciti neku prepravljenu funkciju?

rocknroller

dzonny napravio sam hrpu posla po tvojim savjetima car si, ako budem mogao što za uzvrat napraviti, javi.

evo našao sam tu funkciju koja se poziva sa <?php ssi_whosOnline(); ?>  (barem mislim da sam našao)

// Shows a list of online users:  YY Guests, ZZ Users and then a list...
function ssi_whosOnline($output_method = 'echo')
{
global $user_info, $txt, $sourcedir, $settings, $modSettings;

require_once($sourcedir . '/Subs-MembersOnline.php');
$membersOnlineOptions = array(
'show_hidden' => allowedTo('moderate_forum'),
'sort' => 'log_time',
'reverse_sort' => true,
);
$return = getMembersOnlineStats($membersOnlineOptions);



može li se recimo kopirati taj kod još jedan put negdje u ssi.php, izmjeniti ovo "function ssi_whosOnline" sa nekim drugim imenom.  i pokušati urediti da ne ispisuje ono što sam napisao u prošlom postu i da imena ispisuje jedno ispod drugoga? i da se maknu linkovi sa imena, ili da se otvaraju u novom prozoru.



Dzonny

Ne, jer ako promeniš kod, promeniće se i na forumu, podatke vuče pomoću fajla Subs-MembersOnline.php, tako da ti preporučujem da ostaviš tako sa tekstom kao što si i stavio. :)

rocknroller

za prvu ruku ok, ali ne mogu staviti točku na to ne sviđa mi se tako.

Mogu li napraviti još jednu datoteku recimo Subs-MembersOnlineChat.php u kojoj bih se mogle napraviti preinake izvorne Subs-MembersOnline.php i povezati ju sa ssi.php?

tako da ta datoteka buse samo za chat?

rocknroller

Mislim da bez predznanja u php-u dobro napredujem logičkim zaključcima.

Napravio sam novu datoteku Subs-MembersOnlineChat.php i sada samo chat vadi podatke iz te datoteke. Pokušavam odgonetnuti što je ključno za ispisivanje moje online liste.

MarkoWeb

Funkciju mozes kopirati slobodno samo joj moras promeniti ime

rocknroller

#17
Quote from: MarkoWeb on April 04, 2010, 01:23:13 PM
Funkciju mozes kopirati slobodno samo joj moras promeniti ime

jesam evo upravo sam napravio i refresh svakih 15 sek.

<META HTTP-EQUIV=Refresh CONTENT="15; URL=http://www.yoursite.com/yoururl.php">

samo još da posložim da ispisuje imena korisnika jedno ispod drugoga.

Edit:

I da maknem link sa korisnika da se ne otvara cjela stranica u djelu popisa. ili još bolje da se otvara u glavnoj stranici foruma profil korisnika na koji se klikne.

manix

pa zasto pravite toliku frku :)
 
  evo ovako...
  u svom SSI fajlu nadji cledeci do koda
 
              $return['users'][$row['logTime'] . $row['memberName']] =   array(
                  'id' => $row['ID_MEMBER'],
                  'username' => $row['memberName'],
                  'name' => $row['realName'],
                  'group' => $row['ID_GROUP'],
                  'href' => $scripturl . '?action=profile;u=' .   $row['ID_MEMBER'],
                  'link' => $link,
                  'hidden' => empty($row['showOnline']),
                  'is_last' => false,
              );
 

  dodaj ispred toga sledeci kod
 
              $return['lista_chat'][$row['memberName']] = array(
                  'username' => $row['memberName'],
                  'name' => $row['realName'],
                  'link' => $link,
              );
 

 
  nakon izmene treba da izgleda ovako
 
              $return['lista_chat'][$row['memberName']] = array(
                  'username' => $row['memberName'],
                  'name' => $row['realName'],
                  'link' => $link,
              );
              $return['users'][$row['logTime'] . $row['memberName']] =   array(
                  'id' => $row['ID_MEMBER'],
                  'username' => $row['memberName'],
                  'name' => $row['realName'],
                  'group' => $row['ID_GROUP'],
                  'href' => $scripturl . '?action=profile;u=' .   $row['ID_MEMBER'],
                  'link' => $link,
                  'hidden' => empty($row['showOnline']),
                  'is_last' => false,
              );
 
 

 
EDIT: ovo sam zaboravio :)

takodje pronadji

    $return['users'] = array();
    $return['guests'] = 0;
    $return['hidden'] = 0;
    $return['buddies'] = 0;
    $show_buddies = !empty($user_info['buddies']);

ispred toga dodaj
    $return['lista_chat'] = array();

i na kraju to izgleda ovako

    $return['lista_chat'] = array();
      $return['users'] = array();
      $return['guests'] = 0;
      $return['hidden'] = 0;
      $return['buddies'] = 0;
      $show_buddies = !empty($user_info['buddies']);





  Sada imas listu prijavljenih clanova koji nisu skriveni...
 
  u index.template.php , tamo gde ti je potrebno dodas sledeci kod
 
  <?php
  $lista 
ssi_logOnline($output_method 'array');
  echo 
'<ul>';
  foreach(
$lista['lista_chat'] as $clanovi) {
  echo 
'<li>'$clanovi['name'].'</li>';
  }
  echo 
'</ul>';
  
?>

 

Naravno, mozes promeniti ovaj html kako ti odgovara i mozes napraviti proveru da li use ima ubacn realName ili stavljati link umesto name ili username

evo recimo provea postojanja realName

<?php
 
echo '<li>'.($clanovi['name']=='')? $clanovi['username'] : $clanovi['name'] .'</li>';
?>


ili

  <?php
   
echo '<li>'.(!$clanovi['name'])? $clanovi['username'] : $clanovi['name'] .'</li>';
  
?>

 


to naravno nista nece poremetiti tvoj SSI jer je samo dodat kod ako je izlazini mod niz(array) a ako je prikaz(echo) onda se nista nece prikazati sem onoga sto je bilo..

 
 

rocknroller

Hvala ti na opširnom odgovoru

zapeo sam odmah na početku   :( 


ne mogu naći te kodove u ssi.php

napravio sam većinu toga što sam želio osim da se poslože imena korisnika jedno ispod drugoga i da se klikom na ime člana otvori profil u novom prozoru. vidi link do sajta mi je u potpisu.


manix

Auuu, zaboravih da te pitam, koji SMF koristis, ovo ti je za SMF 1.1.x

Ako hoces okaci tvoj SSI ako je SMF2, pa cu da vidim gde je to u njemu

rocknroller

#21
evo ssi.php

od reda 928 do 963 se odnosi na chat to sam prekopirao funkciju i promijenio ime.

edit:

treba li i Subs-MembersOnlineChat.php od tamo izvlači podatke.

manix

jos bolje :)
ne moras nista da menjas


<?php
$lista 
ssi_logOnline($output_method 'array');
echo 
'<ul>';
foreach(
$lista['users_online'] as $clanovi) {
echo 
'<li>'$clanovi['name'].'</li>';
}
echo 
'</ul>';
?>



mozes pogledati sta sve ima od podataka u nizu koji se vraca

<?php
print_r
($lista['users_online'] );
?>



to je to

rocknroller

napravio sam ovo kako si rekao uredio css i super, a ako promijenim "name" u "link" kako si rekao. neznam kako bih napravio da se otvara u novom tabu, i kako da nisu pocrtani linkovi iz ovoga.

<?php
$lista 
ssi_logOnline($output_method 'array');
echo 
'<ul>';
foreach(
$lista['users_online'] as $clanovi) {
echo 
'<li>'$clanovi['link'].'</li>';
}
echo 
'</ul>';
?>

MarkoWeb

ispod reda koji si dodao:

$lista = ssi_logOnline($output_method = 'array');


dodaj sledeci red:

echo '<pre>';
print_r($lista);
echo '</pre>';


Ispisace ti neke nizove... kopiraj ih ovde da vidimo sta sve imas od mogucnosti da koristis...

rocknroller

Ovo je ispisano:

Array
(
    [users_online] => Array
        (
            [1270482949rocknroller] => Array
                (
                    [id] => 1
                    [username] => rocknroller
                    [name] => rocknroller
                    [group] => 1
                    [href] => http://www.logooff.net/smf2/index.php?action=profile;u=1
                    [link] => rocknroller
                    [is_buddy] =>
                    [hidden] =>
                    [is_last] => 1
                )

        )

    [list_users_online] => Array
        (
            [1270482949rocknroller] => rocknroller
        )

    [online_groups] => Array
        (
            [1] => Array
                (
                    [id] => 1
                    [name] => Administrator
                    [color] => #FF6600
                )

        )

    [num_guests] => 5
    [num_spiders] => 0
    [num_buddies] => 0
    [num_users_hidden] => 0
    [num_users_online] => 1
    [users] => Array
        (
            [1270482949rocknroller] => Array
                (
                    [id] => 1
                    [username] => rocknroller
                    [name] => rocknroller
                    [group] => 1
                    [href] => http://www.logooff.net/smf2/index.php?action=profile;u=1
                    [link] => rocknroller
                    [is_buddy] =>
                    [hidden] =>
                    [is_last] => 1
                )

        )

    [guests] => 5
    [hidden] => 0
    [buddies] => 0
    [num_users] => 1
    [total_users] => 6
)

      rocknroller


MarkoWeb

<?php
$lista 
ssi_logOnline($output_method 'array');
echo 
'<ul>';
foreach(
$lista['users_online'] as $user) {
echo 
'<li><a href="http://www.logooff.net/smf2/index.php?action=profile;u='$user['id'].'">'$user['username'].'</a></li>';
}
echo 
'</ul>';
?>

rocknroller

svaka čast! proučiti ću kod i pokušati shvatiti da drugi puta tako što sam probam napraviti.

Samo sam izgubio boju grupe člana.

MarkoWeb

Pokusaj nesto i sam da uradis... imas promenljivu color pa iskoristi...

rocknroller

#29
Quote from: MarkoWeb on April 05, 2010, 12:54:29 PM
Pokusaj nesto i sam da uradis... imas promenljivu color pa iskoristi...

;D naravno, nemoj pisati kod, samo neku smjernicu budem ja grunfao.

Edit:

I svaka čast na trudu i vremenu svima koji ste mi pomogli i koji mi pomažete oko ovoga, cijenim vaš rad hvala.

MarkoWeb


rocknroller

Quote from: MarkoWeb on April 05, 2010, 01:09:57 PM
Quote from: rocknroller on April 05, 2010, 12:58:04 PM
...samo neku smjernicu budem ja grunfao.
[color] => #FF6600

znači u php-u. pokušao sam u css-u ali pofarba mi sve linkove isto. postoji li neka funkcija 'membergroups' pa [color]?

rocknroller

Odlučio sam počinjem učiti PHP.

ja sam nešto napravio poslije 100 pokušaja sam nešto uspio i radi kako sam htio. Jel ovaj kod koji sam stavio dobar?

<?php require("SSI.php"); ?>   
<?php
$lista 
ssi_logOnline($output_method 'array');
echo 
'<ul id="onlinebox">';
foreach(
$lista['users_online'] as $user) {
echo 
'<div id="onlineLista"><a  target=_blank href="http://www.logooff.net/smf2/index.php?action=profile;u='$user['id'].''.$user['link'].'</a></div>';

}
echo 
'</ul>';
?>

manix

ovo je ono sto tebi treba...

<?php
$lista 
ssi_logOnline($output_method 'array');
echo 
'<div id="onlinebox">';
foreach(
$lista['users_online'] as $user) {
echo 
'<div class="onlineLista"><a style="color:'.($lista['online_groups'][$user['group']]['color']).'" target="_blank" href="'.$user['href'].'">'$user['name'].'</a></div>';
}
echo 
'</div>';
?>


problem je sto $user['link'] neije napravnlje da se otvara u drugom prozor zbog toga moras koristit $user['href'] i pronaci boju
viedeo si dole kada ostampas niz za user postoj id,name, group ...
e a u posebnom nizu imas podatke o grupi

    [online_groups] => Array
        (
              [1] => Array
                (
                      [id] => 1
                    [name] => Administrator
                      [color] => #FF6600
                )

        )

znaci treba nam grupa boja grupe kojoj pripada clan...
znaci selektujem iz online grupa grupu kojoj pripada nas korisnik
u nasem primeru je prikazan jedna grupa [1] => Array([is],[name],[color])
[/color]
$lista['online_groups'][$user['group']]['color']

  $lista[idemo u listu][idemo u grupu(grupa od korisnika jer je on pripaadnik iste)][iocitavamo boju]
[color]
dakle to je boja grupe naseg korisnika

pozz
[/color]

rocknroller

svaka čast, ovo ću pokušati bolje razumjeti , malo mi je jasnije ali tek zeru, digao sam danas knjigu PHP i MySQL Vikram Vaswani. počinjem učiti PHP.


Advertisement: