Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> Komunikaty dla użytkownika., Jakie zastosować podejście do komunikatów użytkownika.
br-design.pl
post
Post #1





Grupa: Zarejestrowani
Postów: 44
Pomógł: 1
Dołączył: 30.05.2006
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


Zastanawiam się jakie podejście będzie najwłaściwsze dla komunikatów dla użytkownika (typu dodano artykuł, usnięto produkt, zły login lub hasło itd.).

Myślałem nad jakąś klasą Logger'a ale nie wiem czy to przypadkiem nie za dużo, pozatym Loggera o ile się nie myle stosuję się głownie do błędów aplikacji.

Inny sposób o którym tylko słyszałem to zrobić kolekcje obiektów, ale nie bardzo wiem na czym to by miało polegać...

Jezeli ktoś ma jakiś pomysł to będe wdzięczny?
Go to the top of the page
+Quote Post
TomASS
post
Post #2





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

Ostrzeżenie: (0%)
-----


Ostatnio czytałem, że fajnie pracuje się z wyjątkami. Może do Twojego celu by się nadawały?

Co do "kolekcje obiektów" to nawet nie słyszałem.
Go to the top of the page
+Quote Post
Ociu
post
Post #3





Grupa: Moderatorzy
Postów: 1 566
Pomógł: 37
Dołączył: 14.05.2003
Skąd: Kraków




Wyjątki przy informacji "Artykuł został dodany" (IMG:http://forum.php.pl/style_emoticons/default/blinksmiley.gif)

Może poprostu wykorzystaj javascriptowy alert(), A potem wrzucaj do debuggera. Coś na modłe

  1. <?php
  2. function ShowAlert( $msg, $error = false )
  3. {
  4.  
  5. # Tu wywolanie alerta, niestety nie chce mi sie myslec :)
  6.  
  7. if( $error )
  8. {
  9.  
  10. Debug::addMessage( $msg );
  11.  
  12. }
  13.  
  14. }
  15. ?>
Go to the top of the page
+Quote Post
br-design.pl
post
Post #4





Grupa: Zarejestrowani
Postów: 44
Pomógł: 1
Dołączył: 30.05.2006
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


Z wyjątkami pracuje się doskonale a i owszem, ale przy wyjątkach a nie komunikatach.

Hmmm pomysł z java jest całkiem ok, ale wydaje mi się troche na wyrost, napewno musi istnieć jakiś prosty przyjemny sposób na rozwiązanie problemu.

Myślałem zeby zrobić coś takiego:
dodawanie do loggera tych wiadomości, oczywiscie oznaczając je jako wiadomosc dla użytkownika i potem je wyswietlać w miejscu wywolania np. funkcji $logger->showMsg(), tylko jak oznaczać że wiadomość było już wyświetlona? Ma ktoś jakiś pomysł? Zwykla zmienna flagowa?

Ale z drugiej strony czy Logger nie powinien złużyć do rapoertowania bardziej błędów dla admina niż wiadomości dla użytkownika?

Ten post edytował br-design.pl 17.07.2006, 15:30:15
Go to the top of the page
+Quote Post
nospor
post
Post #5





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Ale z drugiej strony czy Logger nie powinien złużyć do rapoertowania bardziej błędów dla admina niż wiadomości dla użytkownika?
To jak ci nazwa Logger nie pasuje to nadaj tej klasie nazwe: Messager i juz chyba bedzie ok (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) po co na sile tworzyc se problemy. nie pasuje nazwa to ją zmien i po sprawie.
Go to the top of the page
+Quote Post
br-design.pl
post
Post #6





Grupa: Zarejestrowani
Postów: 44
Pomógł: 1
Dołączył: 30.05.2006
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


Heh...

Tym tropem to mogę sobie zmienić wyjątki na powiadamiacze ;-) Logger to ogolnie przyjeta nazwa dla klasy która odpowiada za logowanie zdarzeń, nie ważne czy się nazywa Loging, Logger, Messager, Log itd. Chodzi mi o to że mieszać jedno z drugim, ale mogę sie przecież mylić.
Go to the top of the page
+Quote Post
nospor
post
Post #7





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Tym tropem to mogę sobie zmienić wyjątki na powiadamiacze ;
Nie, zdecydowanie idziemy innym tropem (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Raz mowisz ze logger to bardziej dla admina niz wiadomosc dla usera,raz ze to ogolnie przyjeta nazwa dla czegos tam.... no sie zdecyduj. zrob klase dla logowania zdarzen, zrob klasy dla wiadomosci dla usera i juz. A jak chcesz polaczyc to polacz tylko rozdzielaj typami.
Ja przykladowo mam polaczone, tj. w jednej klasie mam metody do komunikatow dla usera oraz logowanie do pliku. sa to metody podobne i czesciowo zalezne wiec je polaczym i jest mi z tym dobrze (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Strzałek
post
Post #8





Grupa: Przyjaciele php.pl
Postów: 384
Pomógł: 6
Dołączył: 11.09.2004
Skąd: Grodzisk Mazowiecki

Ostrzeżenie: (0%)
-----


Cytat
Hmmm pomysł z java jest całkiem ok, ale wydaje mi się troche na wyrost, napewno musi istnieć jakiś prosty przyjemny sposób na rozwiązanie problemu.


java !== java script !

A co do problemu.

U mnie jest klasa Template która dziedziczy po Smarty.
Posiada ona metode displayMessage('Dodano news');

Cała filozofia (IMG:http://forum.php.pl/style_emoticons/default/snitch.gif)

Ja rozwiązuje to bardzo prosto. Więc chętnie wysłucham jak robią to inni.
Go to the top of the page
+Quote Post
br-design.pl
post
Post #9





Grupa: Zarejestrowani
Postów: 44
Pomógł: 1
Dołączył: 30.05.2006
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


@nospor

OK,

Co do Loggera chodziło mi po prostu o rozwiązanie, nie wiedziałem czy mam takie komunikaty po prostu logować czy może inaczej je jakoś exportować.

Wpadłem na jeszcze taki pomysł aby po prostu zapisywać komunikaty w obiekcie w zmiennej tablicy z którego się korzysta a potem je wyciągać 'po najświeższej', taki zalążek, co wy na to?

A powiedz jeszcze, jak w swoim rozwiązaniu rozwiązujesz kwestie wyświetlenia odpowiedniej wiadomości? Bo wiadomo że nie wyświetlisz całego 'loga', wyświetlasz po prostu ostatnio dodaną czy w np. przypisujesz wydarzenia do wiadomości i potem to jakoś rozwiązujesz przy wyświetlaniu?

@Strzałek

Hehe, myślę że nie będe miał już problemu z wyświetleniem komunikatu ;-)
Bardziej mi chodzi o sposób jego zapisywania...

Ten post edytował br-design.pl 17.07.2006, 22:22:18
Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
A powiedz jeszcze, jak w swoim rozwiązaniu rozwiązujesz kwestie wyświetlenia odpowiedniej wiadomości? Bo wiadomo że nie wyświetlisz całego 'loga', wyświetlasz po prostu ostatnio dodaną czy w np. przypisujesz wydarzenia do wiadomości i potem to jakoś rozwiązujesz przy wyświetlaniu?

Wiadomosci moga byc roznych typow. Moze byc kilka wiadomosci dla danego typu. W zaleznosci od typu roznie wyswietlam wiadomosci. jedne na czerwono (bledy), inne na zielono (komunikaty) i inne na inny kolor. Wyswietlam tyle wiadomosci ile bylo.
sa tez wiadomosci ktore sa czystym logiem. W zaleznosci od ustawionych parametrow takie wiadomosci wyswietlam albo tylko do logow pisze
Go to the top of the page
+Quote Post
br-design.pl
post
Post #11





Grupa: Zarejestrowani
Postów: 44
Pomógł: 1
Dołączył: 30.05.2006
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


To ja poproszę wtedy o szybką lekcje php bo nie potrafie dojść do jednego.

Powiedz masz obiekt klasy news która ma funkcje wyświetlenie formularza do dodawania i po wysłaniu danych dodaje go oraz ma metode wyświetlania wiadomości (dla uproszczenia załużmy że w tym samej klasie a nie osobnej). Mając powiedzmy prostą stronę:

  1. <?php
  2. $news = new News();
  3. <body>
  4. <h1>dodawanie newsa</h1>
  5. $news->show_message();
  6. $news->print_addForm();
  7. </body>
  8. ?>


wysylasz formularz, dodaje się news, tworzy się wiadomość o tym fakcie, strona przeładowuje się i informacja umiera, chyba że zapisujesz ją w sesji, pliku lub w DB?

Ten fakt że tak powiem mnie najbardziej zastanawia.
Go to the top of the page
+Quote Post
nospor
post
Post #12





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
tworzy się wiadomość o tym fakcie, strona przeładowuje się i informacja umiera, chyba że zapisujesz ją w sesji, pliku lub w DB

W ktorym momencie napisalem ze mi sie strona przeladowuje po dodaniu wiadomosci? (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
wiadomosc jest dodawana juz po przeladowaniu strony. wysylasz formualrz (strona sie przeladowuje), zapisujesz do bazy i w zaleznosci od tego czy sie udalo czy nie to tworzysz taka czy siaka wiadomosc. Potem masz jakies cudo co ci dodaje do wygenerowanej strony wiadomosci ktore sa zapisane.

Jesli jednak z jakiegos powodu musisz znowu przeladowac strone to wiadomosci zapisujesz w sesji
Go to the top of the page
+Quote Post
br-design.pl
post
Post #13





Grupa: Zarejestrowani
Postów: 44
Pomógł: 1
Dołączył: 30.05.2006
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


Ok, a co z problemem przeładowania?

Po takiej operacji jak ty mówisz, weźmy dla przykładu naszego newsa, bez przeładowania nie czyści się ani POST ani GET. Wieć po dodaniu tego newsa, użytkownik widzi nasz komunikat, pusty formularz na nowego newsa, ale wystarczy że odświeży strone i nawet się nie zoreintuje kiedy dodał drugi raz ten sam rekord.
Go to the top of the page
+Quote Post
netzah
post
Post #14





Grupa: Zarejestrowani
Postów: 109
Pomógł: 1
Dołączył: 19.03.2004

Ostrzeżenie: (0%)
-----


Strasznie komplikujesz proste rzeczy.

masz na stronie 3 akcje:
- formularz (zawsze)
- zapis newsa do bazy, nastepnie przekierowanie, zeby nie wyslac 2 raz posta
- wyswietlasz komunikat, ktory trzymasz np. w sesji, po czym go usuwasz.
Go to the top of the page
+Quote Post
Prph
post
Post #15





Grupa: Zarejestrowani
Postów: 338
Pomógł: 2
Dołączył: 4.03.2006
Skąd: Łódź

Ostrzeżenie: (0%)
-----


Wczesniej przy programowaniu strukturalnym zastosowalem pewnien prosty mechanizm, ktory dzialal bardzo dobrze i calkiem wygodnie.

Mialem np. dodajNowoscFormularz i dodajNowosc. Pierwszy wyswietlal form, a drugi zapisywal w bazie - form kierowany byl do tego drugiego.

Jezeli wszystko wyszlo ok robilem na koncu przekierowanie (header('Location: xyz.php?msg=Dodano Nowosc')).

W pliku xyz.php mialem

  1. <?php
  2. if(!empty($_GET['msg']))
  3. echo $_GET['msg'];
  4. ?>


Adrian.
Go to the top of the page
+Quote Post
nospor
post
Post #16





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Po takiej operacji jak ty mówisz, weźmy dla przykładu naszego newsa, bez przeładowania nie czyści się ani POST ani GET. Wieć po dodaniu tego newsa, użytkownik widzi nasz komunikat, pusty formularz na nowego newsa, ale wystarczy że odświeży strone i nawet się nie zoreintuje kiedy dodał drugi raz ten sam rekord.

Tu masz cos jak zapobiegac odswierzaniu i to bez przekierowania:
http://forum.php.pl/index.php?showtopic=44383
Pozatym problem z odswierzaniem ma sie nijak do komunikatow.

Jesli jednak koniecznie chcesz robic przekierowanie to zapisz komuniakty do sesji, po przekierowaniu je odbierz, wyswietl i usun z sesji. No tu nie ma zadnej filozofii

Cytat
Jezeli wszystko wyszlo ok robilem na koncu przekierowanie (header('Location: xyz.php?msg=Dodano Nowosc')).

@Prph taka metoda jest beznadziejna. A jak bedziesz chcial przekazac kilka komunikatow i beda za dlugie na url? Pomijam juz fakt ze ktos ci moze takiego linka spreparowac ze na Twojej stronie bedzie napisa:
"Ta strona jest do.... kitu (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) " albo jeszcze gorsze rzeczy i porazka totalna

edit: z php5 to ma malo wspolnego. przenosze
Go to the top of the page
+Quote Post
thornag
post
Post #17





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

Ostrzeżenie: (0%)
-----


Jak dla mnie to klasa metoda dla wyswietlania. Ostatni serwis jaki robilem byl tak zaprojektowany(graficznie) ze w pliku index.php nad calym includowaniem itp moglem umiescic metode wyswietlajaca wiadomosci. Jesli wiadomosci nie bylo wszystko wygladalo w porzadku. Takze mala klasa i do wyswietlania i przekazywania wiadomosci.

  1. <?php
  2. if(akcja()) { /// jesli jakas tam operacja jest udana
  3. $msg->AddMessage("Operacja udana");
  4. } else { // jesli niedudana
  5.  $msg->AddMessage("Operacja nieudana"); // mozna dodawac jeszcze parametry e.g flagi bledow itp.
  6. }
  7. ?>


A gdziekolwiek tam gdzie chcesz dodac tylko

  1. <?php
  2. echo $msg->ShowMessage() // ewentualnie flaga jako parametr.
  3. ?>


Przewagatego uwazam jest taka, ze taka wiadomosc mozesz wyprintowac sobie gdzie tylko chcesz (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
br-design.pl
post
Post #18





Grupa: Zarejestrowani
Postów: 44
Pomógł: 1
Dołączył: 30.05.2006
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


To ja ciągle czegoś nie rozumiem, jeżeli np. wyswietlasz wiadomosc w kodzie przed wywolaniem akcji to co wtedy? Wtedy nie ma jeszcze wiadomości...
Więc chyba trzeba najpierw wywołać akcje, zapisać wiadomość do sesji, przeładować stronę żeby wyczyścić REQUESTa i dopiero potem wyswietlic wiadomosc z sesji...

Ten post edytował br-design.pl 18.07.2006, 13:33:32
Go to the top of the page
+Quote Post
nospor
post
Post #19





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




teraz ja nie rozumiem. do kogo to pytanie? do mnie czy do thornag'a? W zasadzie to i tak bez roznicy.
Ty chyba mylisz pojecia "dodanie wiadomosci" i "wyswietlenie wiadomosci". Dodawac to se mozesz kiedy chcesz, przed zapisem formualrza, po zapisie formularza, ale wyswietlasz wtedy kiedy potrzebujesz. robisz przekierowanie - wyswietlaj po przekierowaniu.
Go to the top of the page
+Quote Post
br-design.pl
post
Post #20





Grupa: Zarejestrowani
Postów: 44
Pomógł: 1
Dołączył: 30.05.2006
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


Pytanie do zainteresowanych: ;-)

No ale jak, przecież po przeładowaniu obiekt tworzy się na nowo i wszystkie wartości zmiennych idą w las. Więc nie można sobie przekierować a potem wyśwetlić zmiennej, chyba że jest to zmienna sesyjna, ale odwoływałem się do jego sposobu thornag'a:

że wystarczy zmienić kolejność w jego przypadku i wszystko się posypię:

tj.

wpierw zrobię w kodzie:
  1. <?php
  2. echo $msg->ShowMessage() // ewentualnie flaga jako parametr.
  3. ?>

a dopiero potem
  1. <?php
  2. if(akcja()) { /// jesli jakas tam operacja jest udana
  3. $msg->AddMessage("Operacja udana");
  4. } else { // jesli niedudana
  5.  $msg->AddMessage("Operacja nieudana"); // mozna dodawac jeszcze parametry e.g flagi bledow itp.
  6. }
  7. ?>


To jeżeli nie zapiszę zmiennej do sesji i nie przeładuję strony to nic się nie pokaże.

I druga kwestia w tym wypadku.

Czy używać jednej zmiennej sesyjnej i przy każdym wydarzeniu napisywać ją? Ale wtedy możemy wyświetlić tylko jedną wiadomość.
A jeżeli dla każdego komunikatu dawać inna nazwę zmiennej sesyjnej to jak z jej czyszczeniem?

------
Edit:

OK, już mam rozwiązany problem ;-)
Dzięki wszystkim za pomoc. Jakby co to rozwiązałem to tak:
Przykładowa metoda dodawania danych:

  1. <?php
  2. public function form_addRekord() {
  3. if($this->form->validate()) {
  4. try {
  5. // dodawanie do DB.
  6. $this->addRekordFromPost(array('id', 'MAX_FILE_SIZE'));
  7. // sprawdzam czy sa jakies pliki do uploadu
  8. if($_FILES) {
  9. $this->handleFileUpload();
  10. }
  11.  
  12. $this->addMsg('Dodano nowy rekord.'); // ustawiam komunikat
  13.  
  14. $tuJestem = $_SERVER['PHP_SELF'];
  15. header("Location: $tuJestem"); // robie przekierowanie
  16.  
  17. } catch (Exception $e) {
  18. MyErrorHandling::handle_error($e);
  19. }
  20. } else {
  21. $this->form->addElement('submit', null, 'Dodaj');
  22. $this->form->display();
  23. }
  24. }
  25. ?>


Metody obsługujące komunikaty.

  1. <?php
  2. public function showMsg() {
  3. echo $_SESSION['userMsg'];
  4. $_SESSION['userMsg'] = null;
  5. }
  6.  
  7. public function addMsg($string) {
  8. $_SESSION['userMsg'] = $string;
  9. }
  10. ?>

No i potem na stronie:
  1. <?php
  2. $cms->showMsg();
  3. $cms->form_addRekord(); 
  4. ?>


Ten post edytował br-design.pl 18.07.2006, 14:10:48
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 28.09.2025 - 09:41