![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 16 Pomógł: 0 Dołączył: 25.03.2011 Ostrzeżenie: (10%) ![]() ![]() |
Witam, jestem w trakcie tworzenia biblioteki do code ignitera, ale mniejsza o to bo to nie jest przedmiotem problemu.
Mam w planie stworzyć klasę, która za pomącą swoich metod będzie generować tabelkę HTML z wynikami z bazy danych + paginacja, filtry, sortowanie itd. Klasa ma być w pełni konfigurowalna, to jest największym problemem, bo gdyby miała tylko działać dla mnie, to problem by nie istniał. Póki co zrobiłem, generowanie kolumn + ustalanie nazw/nagłówków tych kolumn (wymieniając je z separatorem i rozdzielając później explodem) Nazwy pól z bazy danych potrzebne do wyświetlenia/sortowania wyników są określane w taki sam sposób. Cytat Przykład: Kolumna id | kolumna data | kolumna title Pole id | Pole data | Pole title Przekazuję sobie to do metody, która rozdziela to sobie i generuję kolumny po czym zapisuję to do zmiennej Ok działa lecimy dalej. Nadszedł czas na generowanie wierszy (rekordów), przesyłam więc z kontrolera result z bazy danych do metody mojej biblioteki i wyświetlam wyniki w foreachu, lecz tutaj problem. Każda tabelka ma także narzuconą z góry kolumnę "Akcja" - dodaj, usuń, edytuj, generuj pdf itd itp I muszę zrobić tak, aby była możliwość wyłączenia np dwóch lub trzech, a nawet wszystkich akcji dla danego rekordu. Cytat Przykład: Rekord 1 - Usuń, Edytuj, Generuj PDF Rekord 2 - Usuń, Edytuj, Generuj PDF Rekord 3 - Usuń, Edytuj, Generuj PDF Rekord 4 - Edytuj, Generuj PDF Rekord 5 - Generuj PDF Rekord 6 - [pusto] Rekord 7 - Usuń, Edytuj, Generuj PDF Nie mogę wpaść na pomysł jak się za to zabrać, proszę o wszelkie podpowiedzi. Z góry dziękuję. |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Pytanie skąd czerpiesz informacje o tym, który rekord można usunąć a który edytować
-------------------- Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 16 Pomógł: 0 Dołączył: 25.03.2011 Ostrzeżenie: (10%) ![]() ![]() |
Właśnie nad tym się także zastanawiałem.
Myślałem o polu w bazie danych np: actions Gdzie do każdego rekordu byłyby także jego opcje np: edit|del|pdf Ale nie wiem czy to by było najlepsze rozwiązanie. Jest taka sytuacja, że nazwy pól tabeli są także konfigurowalne np użytkownik klasy przekazuję do metody swoje nazwy pól: id|title|data|godzina I w pętli dosyć ciężko byĸłoby się dostać do akcji + ew je porozdzielać. Swoja drogą mam przeczucie, ze strasznie sobie utrudniam życie, dlatego proszę o pomoc. |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
Robie cos podobnego a dokladnie admin generator'a..wiec jesli pobierasz rekordy z tej samej tabeli to dlaczego zaleznie od rekordu maja miec rozne akcje?skoro sa takiego samego "typu" to kazdy rekord z tej samej tabeli powinien miec te same akcje...nie myslisz?chyba ze czegos nie zrozumialem...
Masz 5 news'ow i pierwsze 3 mozesz usunac a nastepne 2 nie?bezsens.... -------------------- Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/ Moj blog |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 16 Pomógł: 0 Dołączył: 25.03.2011 Ostrzeżenie: (10%) ![]() ![]() |
A pomyśl np o liście zamówień
Są zamówienia do realizacji i zamówienia w trakcie. Te w trakcie mają nie aktywny przycisk -> Do realizacji. A te do realizacji maja aktywny. |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
@marcio: Różne obiekty mogą mieć w takiej tabeli różne akcje, ponieważ przykładowo użytkownik może nie mieć praw do usunięcia części danych, część danych może nie być zdatna do generowania w PDF-ie itp.
Taka tabelka to wręcz książkowy przykład na to, gdzie można sensownie zastosować taki bardzo popularny ostatnio wzorzec MVC. Na dobrą sprawę jest to przykład na to gdzie w ogóle jest miejsce tego wzorca. Ale o tym już było nie raz i nie ma sensu ciągnąć tego tutaj. ![]() Zastanów się czego potrzebujesz. Potrzebujesz narzędzia uniwersalnego, które będzie w stanie przyjąć coś (konkretnie to implementację interfejsu, który sobie zdefiniujesz) co na podstawie jakiś tam informacji (np. filtry, paginacja) utworzy sobie kolekcję obiektów, które na końcu zostaną wyświetlone w jakiejś formie, np. tabelki. Narzędzie musi być rozbudowane. Inaczej przy pierwszej próbie zrobienia czegoś niestandardowego polegnie i będzie przyczyną całej masy problemów do obejścia. Tutaj piszę bez większego namysłu - Ty powinieneś zastanowić się czy aby na pewno takie rozwiązanie nie ma jakiś defektów, czy nie będzie ograniczać w jakiś skrajnych przypadkach itp. itd. Pierwsze co będzie potrzebne to to coś co ma zwracać odpowiednią kolekcję obiektów do wyświetlenia. Interfejs tego będzie bardzo prosty (wybacz słabe nazewnictwo)<!--Geshi:281492:php--><pre class="php-brief" style="font-family:monospace;"><div class="head">
Problem tego jakie konkretnie dane trzeba wyświetlać zdaje się również być rozwiązany. Kolejny problem to ustalenie jakie akcje (usuń, edytuj, drukuj, akceptuj itp.) mają być dostępne dla każdego obiektu. Takie akcje można również całkiem łatwo rozwiązać za pomocą obiektów, które będą implementowały prosty interfejs: Metoda ta zwraca prawdę bądź fałsz w zależności od tego czy dany akcja jest dostępna dla danego obiektu, przykładowo akcje usuń i akceptuj mogłby wyglądać tak: Później takie akcje trzeba dodać tylko do tabelki:
Na koniec pozostaje kwestia ostatecznego wyrenderowania tabelki. Za to również odpowiedzialny jest osobny obiekt (bo przecież możesz chcieć wyrenderować tabelkę, listę, kolekcję w JS/JSON/XML czy jeszcze coś innego). Taki renderer to oczywiście również implementacja jakiegoś tam interfejsu, który definiuje jakieś tam metody. Ten post edytował Crozin 7.07.2011, 10:19:05 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 16 Pomógł: 0 Dołączył: 25.03.2011 Ostrzeżenie: (10%) ![]() ![]() |
Dzięki za tak rozbudowana odpowiedź na pewno z tego skorzystam.
Lecz zastanawia mnie jedno, nie mogę sobie pozwolić na takie rozwiązanie z bazą danych jak mówiłem wcześniej. Aby każdy rekord miał swoje zapisane akcje. Dowiedziałem się, że mogę to zrobić za pomocą tablic... ale nie mam pojęcia jak. |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Cytat Lecz zastanawia mnie jedno, nie mogę sobie pozwolić na takie rozwiązanie z bazą danych jak mówiłem wcześniej. O ile dobrze zrozumiałem to chodzi Ci tutaj o określenie czy dana akcja, ma być dostępna dla danego obiektu? Bo samo w sobie nijak ma się to do tej tabelki. Aby każdy rekord miał swoje zapisane akcje. ![]() Cytat Dowiedziałem się, że mogę to zrobić za pomocą tablic... ale nie mam pojęcia jak. Załóż nowy wątek, opisz problem oraz jak próbowałeś go rozwiązać.PS. Widzę, że niestety forum coś zrypało mój wcześniejszy post. No niestety taki już pozostanie, bo nie mam ochoty go przepisywać. ![]() Ten post edytował Crozin 7.07.2011, 14:17:16 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 16 Pomógł: 0 Dołączył: 25.03.2011 Ostrzeżenie: (10%) ![]() ![]() |
Dokładnie chodzi mi o możliwość określenia jakie dany rekord ma mieć dostępne akcje
|
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Popatrz jeszcze raz na ActionInterface::supports(). To tam określasz czy dany obiekt (przekazany w pierwszym argumencie) będzie posiadał daną akcję. A to na jakiej podstawie to określisz to już zupełnie inna sprawa, bo może to być ustalone na podstawie jakiegoś ACL-a, właściwości obiektu czy jeszcze czegoś innego.
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 25.07.2025 - 10:08 |