Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP][JavaScript]Rozsuwanie się wiadomości
Forum PHP.pl > Forum > Przedszkole
Johnas
Witam! mam mały problem który blokuje moją dalszą pracę. Mianowicie mam js który pozwala na wysuwanie wiadomości... Skrypt pochodzi ze stronki jqueryui.com Wszystko działa ładnie tylko nie wiem jak zrobić aby po rozsunięciu wiadomości w nieprzeczytane była jedna. Wiem jak zrobić update tylko chodzi mi jaki warunek zrobić aby odejmowało prawidłową wiadomość.

Proszę o pomoc. To dla mnie ważne.
lobopol
Bez kodu to ci powiemy...
Johnas
większość to js bo kod na to w php wygląda tak:
  1. elseif ($_GET['act'] == msg) {
  2.  
  3. $dw = mysql_query("SELECT * FROM wiadomosci WHERE wiad_do=$myid ORDER BY wiad_data desc ") or mysql_error();
  4. Echo <<< KONIEC
  5. <hr>
  6. <center>
  7. <p>
  8. <h2>Wiadomości</h2>
  9. <ul class="gallery clearfix">
  10. <li class="extra">
  11. <div id="accordion">
  12. KONIEC;
  13. if ($ilew2 > 0) {
  14. while($krow = mysql_fetch_array($dw, MYSQL_BOTH)) {
  15. $idw = $krow['wiad_id'];
  16. $tematw = $krow['wiad_temat'];
  17. $trescw = $krow['wiad_tresc'];
  18. $odw = $krow['wiad_od'];
  19. $dataw = $krow['wiad_data'];
  20. $rodzajw = $krow['rodzaj'];
  21.  
  22.  
  23. $daneod = mysql_fetch_array(mysql_query("SELECT * FROM rejestracja WHERE id=$odw "));
  24.  
  25. $imieod = $daneod['imie'];
  26. $nazwiskod = $daneod['nazwisko'];
  27. $avatarod = $daneod['avatar'];
  28. echo '<h3><a href="#"><font style="float: left;">'. $imieod .' '. $nazwiskod .':</font>'. $tematw .'<font style="float: right;">'. $dataw .'</font></a></h3>';
  29. echo <<< WIAD
  30. <div style="height: auto;">
  31. <img src="$avatarod" style="float:left; width:100px; height:100px;" />
  32. <div style=width:600px;">$trescw </div>
  33. <p>
  34. WIAD;
  35. if ($rodzajw == 1) {
  36. echo <<< FORM
  37. <div style=width:400px;">
  38. <form action="profile.php" method="post">
  39. <input name="znajomy" type="hidden" value="acept" />
  40. <input name="dodawany" type="hidden" value="$odw" />
  41. <input class="submit" style="float: left;" type="submit" value="Akceptuje" />
  42. </form>
  43. <form action="profile.php" method="post">
  44. <input name="znajomy" type="hidden" value="delete" />
  45. <input name="dodawany" type="hidden" value="$odw" />
  46. <input class="submit" style="float: right;" type="submit" value="Odrzuć" />
  47. </form>
  48. </div>
  49. FORM;
  50. }
  51. echo '<div style="position: absolute; bottom: 5px; right:5px;"> tutaj buttony</div>';
  52.  
  53. echo <<< WIAD
  54. </p>
  55. WIAD;
  56.  
  57. echo <<< WIAD
  58. </div>
  59. WIAD;
  60.  
  61. }

wygląda to tak:


Dodam też js:
Jeden z plików js
lobopol
Przyglądam się twojemu kodowi i screenowi o jakich nieprzeczytanych mówisz? Czy chodzi ci o to aby po otworzeniu jakiegoś zmienić mu status na przeczytane?
Johnas
dokładnie o to mi chodzi smile.gif
lobopol
$( ".selector" ).accordion({
change: function(event, ui) { ... }
});
i tutaj pobierasz id aktualnego elementu czy któryś jego element odpowiedzialny za bycie w bazie przesyłasz ajaksem do skryptu sprawdzającego czy ma osoba uprawnienia i czy już nie był aktywowany no i aktywujesz w bazie. Jak skończę pracę to jeszcze się rozpisze. ale chyba powinno ciebie to naprowadzić.
Johnas
Wiesz? Chciał bym powiedzieć że wiem o co chodzi, ale wcale nie rozumiem js nie mówiąc już o ajaksie... nie wiem gdzie to mam wkleić do pliku z pocztą? Cieszył bym się jak byś rozpisał i pokazał mniej więcej o co chodzi, ale i tak dziękuje za zainteresowanie.
lobopol
To musisz do kodu uruchomiającego acordion dodać
Załóżmy, że masz tak:
  1. <div id="accordion">
  2. <h3><a href="#" rel="1">Section 1</a></h3>
  3. <div>
  4. <p>Mauris mauris ante, blandit et, ultrices a, suscipit eget, quam. Integer ut neque. Vivamus nisi metus, molestie vel, gravida in, condimentum sit amet, nunc. Nam a nibh. Donec suscipit eros. Nam mi. Proin viverra leo ut odio. Curabitur malesuada. Vestibulum a velit eu ante scelerisque vulputate.</p>
  5. </div>
  6. <h3><a href="#" rel="2">Section 2</a></h3>
  7. <div>
  8. <p>Sed non urna. Donec et ante. Phasellus eu ligula. Vestibulum sit amet purus. Vivamus hendrerit, dolor at aliquet laoreet, mauris turpis porttitor velit, faucibus interdum tellus libero ac justo. Vivamus non quam. In suscipit faucibus urna. </p>
  9. </div>
  10. <h3><a href="#" rel="3">Section 3</a></h3>
  11. <div>
  12. <p>Nam enim risus, molestie et, porta ac, aliquam ac, risus. Quisque lobortis. Phasellus pellentesque purus in massa. Aenean in pede. Phasellus ac libero ac tellus pellentesque semper. Sed ac felis. Sed commodo, magna quis lacinia ornare, quam ante aliquam nisi, eu iaculis leo purus venenatis dui. </p>
  13. <ul>
  14. <li>List item one</li>
  15. <li>List item two</li>
  16. <li>List item three</li>
  17. </ul>
  18. </div>
  19. <h3><a href="#" rel="4">Section 4</a></h3>
  20. <div>
  21. <p>Cras dictum. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aenean lacinia mauris vel est. </p><p>Suspendisse eu nisl. Nullam ut libero. Integer dignissim consequat lectus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. </p>
  22. </div>
  23. </div>
  24.  
  25. </div><!-- End demo -->


a acordion inicjujesz tak:
  1. $(function() {
  2. $( "#accordion" ).accordion({
  3. collapsible: true,
  4. change: function(event, ui) {
  5. //tu warto najpierw sprawdzić czy rel nie jest pusty, a dopiero gdy nie jest przesyłać postem jego zawartość
  6. $.post('adres_skryptu.php', 'id='+ui.newHeader.children(':eq(1)').attr('rel'), function(data) {
  7. //a tu co robimy z odpowiedzią skryptu najlepiej wyczyścić rel z linku
  8. });
  9.  
  10. }
  11.  
  12. });
  13. });


i Krótkie omówienie to nie jest kompletny skrypt, sam się natrudź z resztą (ale już nic z ui nie musisz kombinować to masz na srebrnej tacy, radzę na przyszłość przeczytać dokumentacje jest naprawdę dobra)
ui.newHeader.children(':eq(1)').attr('rel') w tym miejscu mam pobranie wartości z atrybutu rel który jest w h3 ui.newHeader zwraca obiekt właśnie rozsuniętego bloku .children(':eq(1)) daje nam dostęp do potomka tego obiektu (a konkretnie drugiego co prawda niby element h3 ma tylko jednego potomka, ale ui dodaje sobie <span class="ui-icon ui-icon-triangle-1-e"></span> przed linkiem

po stronie skryptu php działaj tak jakbyś otrzymał $_POST['id']

Bardziej nie pomogę bo już musiałbym kompletny skrypt napisać.
Johnas
  1. $(function() {
  2. $( "#accordion" ).accordion({
  3. collapsible: true,
  4. change: function(event, ui) {
  5. //tu warto najpierw sprawdzić czy rel nie jest pusty, a dopiero gdy nie jest przesyłać postem jego zawartość
  6. $.post('adres_skryptu.php', 'id='+ui.newHeader.children(':eq(1)').attr('rel'), function(data) {
  7. //a tu co robimy z odpowiedzią skryptu najlepiej wyczyścić rel z linku
  8. });
  9.  
  10. }
  11.  
  12. });
  13. });


Gdzie to mam wkleić? Do js acordion czy mogę w pliku php ze znacznikiem <script>? rel też na 100% nie będzie pusty bo tam wprowadzę id wiadomości pobrane ze sql. potem to wyśle postem na adres skryptu i tak zrobie update
lobopol
Dałem jasny przykład inicjujesz accordion w ten sposób co podałem (jeżeli masz taki sam układ jak w przykładach to powinno działać) a z relem chodzi mi oto aby nie dawać wiadomościom już przeczytanym tego znacznika i dlatego sprawdzać w js ifem czy jest ustawiony, bo po co sobie za każdym razem zaznaczać w bazie, że wiadomość jest odczytana?
Johnas
zrobiłem tak: do header w pliku z wiadomościami dałem:

  1. $(function() {
  2. $( "#accordion" ).accordion({
  3. collapsible: true
  4. });
  5. });
  6. </script>
  7. $(function() {
  8. $( "#accordion" ).accordion({
  9. collapsible: true,
  10. change: function(event, ui) {
  11. //tu warto najpierw sprawdzić czy rel nie jest pusty, a dopiero gdy nie jest przesyłać postem jego zawartość
  12. $.post('profile.php?act=msg', 'id='+ui.newHeader.children(':eq(1)').attr('rel'), function(data) {
  13. <?php include("db.php");
  14. $idea = $_POST['id'];
  15. $wiadprz = mysql_query("UPDATE wiadomosci SET wiad_przeczytane='1' WHERE id=$idea");
  16. ?>
  17.  
  18. });
  19.  
  20. }
  21.  
  22. });
  23. });
  24. </script>


Robiłem też tak że do acordion.js dodałem na samej górze
[JAVASCRIPT] pobierz, plaintext
  1. $(function() {
  2. $( "#accordion" ).accordion({
  3. collapsible: true
  4. });
  5. });
  6. </script>
  7. <script>
  8. $(function() {
  9. $( "#accordion" ).accordion({
  10. collapsible: true,
  11. change: function(event, ui) {
  12. //tu warto najpierw sprawdzić czy rel nie jest pusty, a dopiero gdy nie jest przesyłać postem jego zawartość
  13. $.post('profile.php?act=msg', 'id='+ui.newHeader.children(':eq(1)').attr('rel'), function(data) {
  14.  
  15.  
  16. });
  17.  
  18. }
  19.  
  20. });
  21. });
[JAVASCRIPT] pobierz, plaintext

a do profile if ($_POST['id']){ echo 'odebrano id'; } ale dalej nie odbieram id. Jeżeli chodzi o jave to jestem zielony sad.gif
lobopol
bo dwa razy inicjujesz funkcje acordion

to jest zbędne:
  1. $(function() {
  2. $( "#accordion" ).accordion({
  3. collapsible: true
  4. });
  5. });

zamiast tego i tylko raz:
  1. $(function() {
  2. $( "#accordion" ).accordion({
  3. collapsible: true,
  4. change: function(event, ui) {
  5. //tu warto najpierw sprawdzić czy rel nie jest pusty, a dopiero gdy nie jest przesyłać postem jego zawartość
  6. $.post('profile.php?act=msg', 'id='+ui.newHeader.children(':eq(1)').attr('rel'), function(data) {
  7.  
  8.  
  9. });
  10.  
  11. }
  12.  
  13. });
  14. });
  15.  


dalej zainstaluj sobie firebuga i zobacz czy jakiś błędów nie zwraca konsola, pokaż nam jeszcze jak wygląda div z id acordion (pamiętaj, że id musi być unikalne i jeżeli masz 2 divy z takim id to się posypie!)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.