Logika
17 godz. 49 min · Biznes i Automatyzacje
Krzysiek PiekarzAutomation Specialist / No-code DeveloperCzy w Twojej głowie pojawił się pomysł na aplikację, która zrewolucjonizuje świat na miarę Facebook'a, Instagrama albo Airbnb? A może zgłosił się do Ciebie klient, który chce przetestować i wdrożyć swój projekt w jak najszybszym czasie?Jeśli tak było to na pewno zadajesz sobie teraz kolejne pytanie - od czego zacząć? Czy muszę posiadać odpowiednią wiedzę programistyczną? Na jaki język programowania się zdecydować lub z jakiego gotowego framework'u skorzystać? A może zatrudnić profesjonalnego designera i software house, który pozwoli mi zrealizować ten projekt?Niezależnie od tego czy czy zdecydujesz się działać sam/a, czy też przekażesz projekt do zewnętrznej agencji i tak staniesz przed kolejnym dylematem jakim jest nauka programowania lub konieczność przepalenia nawet setek tysięcy złoty na coś, co może okazać się niewypałem.Na szczęście szybki rozwój narzędzi no-code sprawia, że możesz wybrać jeszcze trzecie wyjście. Zaprojektować, zbudować i wypuścić w świat swoją wymarzoną aplikację tylko za pomocą własnych sił i to bez konieczności posiadania specjalistycznej wiedzy programistycznej, a nawet posiadając jedynie podstawową znajomość narzędzi do design'u.Pamiętaj również o tym, że projekt ten podzieliłem na dwie części. Ten kurs to druga część, w której zapoznamy się z bardziej zaawansowanymi opcjami, jakie zapewnia nam edytor Bubble. Zdobytą w ten sposób wiedzę teoretyczną wykorzystamy od razu w praktyce dodając do naszego statycznego designu odpowiednią logikę, dzięki czemu nasz finalny projekt będzie już w pełni działającą aplikacją.Jeśli tylko potrafisz w podstawowym zakresie pracować z edytorem Bubble, budować w nim design aplikacji i rozumiesz czym są option sets oraz workflows to posiadanie wiedzy z poprzedniego kursu nie jest koniecznie wymagane. Natomiast szczerze zachęcam Cię przynajmniej do przejrzenia materiałów z pierwszej części, gdzie skupiamy się właśnie na podstawach, ponieważ teraz będziemy efektywnie przechodzić do bardziej zaawansowanych tematów i rozbudowywać naszą aplikację.
W tym kursie „MVP aplikacji w rekordowym czasie z Bubble (Logika)” nauczę Cię jak zamienić statyczny layout na pełnoprawną aplikację. Poruszymy takie tematy jak praca z bazą danych, privacy rules oraz bardziej zaawansowane workflows, które dodamy zarówno na froncie jak i backendzie naszej aplikacji. Dzięki zdobytej wiedzy dodamy logikę wszędzie tam, gdzie tego wymaga nasz projekt, a dodatkowo wzbogacimy go o możliwość płatności poprzez najbardziej popularny na świecie system jakim jest Stripe. To jednak nie koniec ponieważ przygotowałem dla Ciebie również szereg innych ważnych zagadnień, które omówimy i wykorzystamy w praktyce.W ramach nauki skupimy się na jak najbardziej praktycznym podejściu. Zapomnij o długich i nudnych lekcjach pełnych teorii, które zapomnisz zaraz po obejrzeniu. Będziemy budować a nie debatować! W ten sposób nauczysz się pracować z edytorem Bubble na poziomie zaawansowanym. Zrozumiesz jak zabezpieczyć swoje dane przed nieuprawnionym dostępem, w jaki sposób pobierać i dynamicznie filtrować rekordy z bazy danych. A także jak wykorzystać auto-binding by móc je aktualizować bez wykorzystania skomplikowanych workflows.Dodamy do naszej aplikacji prosty komunikator, który pozwoli na wymianę wiadomości pomiędzy użytkownikami. Zadbamy również o możliwość wysyłania powiadomień mailowych poprzez zewnętrzne serwisy by ich wygląd był zgodny z naszym brandem. Nie zabraknie również takich tematów jak SSO z Google czy też proste automatyzacje z wykorzystaniem serwisu Make.
Materiał szkoleniowy został zaprojektowany tak, aby mogło z niego skorzystać jak najszersze grono odbiorców. Nieważne czy jesteś totalnym laikiem, czy też posiadasz już wiedzę z zakresu programowania lub designu, na pewno znajdziesz tu coś dla siebie. A więc kto jeszcze może skorzystać z wiedzy zawartej w tym kursie?
I tam, gdzie w pierwszej lekcji drugiego modułu i mam nadzieję, że również.
Jak ja jesteś pełen energii do tego, abyśmy dalej działali i
rozbudowali naszą aplikację.
A więc zgodnie z obietnicą w pierwszej kolejności zajmiemy się odpowiednimi
poprawkami w naszym Dashboard.
A więc nie przedłużam i zaloguj się tym razem jako host.
Jak widzisz tutaj, ja już sobie dodałem logo, które po kliknięciu prowadzi na
stronę główną, czego wcześniej brakowało.
Logujemy się jako demo host.
W tej lekcji musimy zatroszczyć się o to, aby poprawnie wyświetlać listing,
który przynależy do danego hosta.
Jak widzisz na chwilę obecną lista tutaj nie działa, a więc będziemy
musieli wprowadzać pewne poprawki.
Natomiast zanim przejdziemy do tego elementu, który nam wyświetla
listingu, chciałbym w pierwszej kolejności zrobić jedną bardzo ważną rzecz, a
mianowicie wrócić do edytora, przejść na stronę Dashboard
i wyszukać elementy, nad którymi będziemy teraz pracować.
Pracować tak naprawdę będziemy głównie w elemencie Chaos Listing here,
natomiast interesuje mnie zarówno ten, jak i ten powyżej, czyli
ten dla stanu pustego.
Dlaczego nas to interesuje?
Otóż zerknij co się tutaj dzieje.
Jeżeli przejdziemy do zakładki Conditions to korzystamy z bardzo przestarzałego
już jak na postępy naszych prac warunku.
A więc przede wszystkim zerknijmy co musimy poprawić.
Pierwsza część jest ok, czyli tutaj odpowiedni widok.
Natomiast tutaj zmieniamy to z tego dpkg listing number na jak się
domyślasz current user listing.
I tutaj ich liczba musi być większa bądź równa 1.
Jeżeli chcemy wyświetlać elementy z rysunkami tylko wtedy, kiedy dany host ma
przynajmniej 1 listing, dodane skopiuje to.
Host listing empty wklej tutaj będzie to po prostu mniej niż 1, czyli 0.
Teraz pierwsze przygotowania za nami, a więc możemy przejść do edycji
elementu elementów listy. A mogę to zrobić w ten sposób?
Sprawdźmy, jak to teraz wygląda.
W pierwszej kolejności musimy zatroszczyć się tutaj o tą repeat grupę
i przestać tam przekazywać other listing, tylko odnieść się do wszystkich stringów.
OK, wywalamy to.
Wybieramy znane Ci już search for.
Oczywiście listing jaki dodajemy w pierwszej kolejności.
Oczywiście taki, gdzie host jest równe karencji user.
I teraz zerknijmy czy to odpowiednio zadziałało.
Wygląda na to, że tak.
Wyświetlamy tutaj listing, który wystawił Peter Gabriel,
Natomiast jest to nasz oryginalny testowy host, który ma najmniej tak naprawdę
wystawionych tutaj listingu, przynajmniej w mojej wersji aplikacji.
Dlatego też chcę tutaj nieco ułatwić zadanie, ponieważ będziemy zaraz pracować
tutaj z tymi zakładkami i sortowaniem.
Wróćmy do edytora i po prostu uruchomimy aplikację, tym razem jako Sara Michal.
Jeżeli zainstalowałeś użytkowników na podstawie mojej bazy portable
i potem odpowiednio przypisywała się listingu, to Twoja baza danych powinna
wyglądać dokładnie tak samo jak moja.
Przynajmniej jeżeli chodzi o jej użytkowników i przypisanych
do nich listingu.
Natomiast jeżeli dawałeś X, to masz po prostu takiego użytkownika,
który ma ich więcej niż jeden.
Ja kliknę sobie właśnie w Sarę Mitchell.
Mogę Moge sobie zamknąć to kabel już powinien to załapać.
Odświeżamy.
Jak widzisz teraz wygląda to już właściwie stara ma 4 listing,
a my możemy przystąpić do dalszej pracy i odpowiednich tutaj ustawień.
Przede wszystkim chciałbym tutaj, aby te zakładki zaczęły działać i po
kliknięciu w nie wyświetlały tylko te listing, które tutaj właśnie zgadzają się
z tym formatem, czyli są active albo są draftem, albo są
ustawione na status archive.
A dodatkowo oczywiście mamy tutaj jeszcze sortowanie po dacie, a więc nie ma
co przedłużać i wracamy do edytora.
Jak tutaj do tego podejść?
Przede wszystkim będziemy potrzebować dwóch custom state ów, za pomocą których
będziemy obsługiwać zarówno etapy, jak i sortowanie po dacie.
A więc klikam na Host listing here, czyli na główny element i dodaję tutaj.
Będzie to tak. Date sort, czyli sortowanie po dacie.
Tutaj wybierzemy jedną.
Zaraz zobaczysz jak tam to będzie działało.
I kolejno Karen, Wu.
ABA, Karen, Status zamkniemy.
Jak to mamy w ogóle nazwane to pole, jeżeli chodzi o nasz option set
OS listing status, czyli Current status.
Starajmy się tutaj jakoś zachować tę nazwę.
Wiem, że czasami zdarza mi się nazywać ten statek nie do końca
tak, jak to powinno być.
Tak jak to miało miejsce w lekcji z Bookingu, gdzie mieliśmy
noce, a ja nadałem nazwę base. Ale to nic nie szkodzi.
Pamiętaj, że te staty widzisz tylko Ty, więc staraj się nazywać tak,
żebyś rozumiał co tam się dzieje.
A więc oczywiście będzie to Karen Estate.
I tym razem odniesienie oczywiście do OS.
Listing Status Default View, a w zasadzie default value.
Tutaj wybierzmy na Draft Publish.
Mamy tutaj publish, a nie active.
OK.
A więc wybierzmy published i od tych właśnie będziemy tutaj zaczynać
wyświetlanie naszych elementów.
Teraz przechodzę sobie tutaj do Filters Button
i teraz dla każdego takiego buttona możemy ustawić tutaj odpowiednie workflow i
właściwe conditions.
Ale przede wszystkim zmieńmy jednak tę nazwę.
To będzie published.
I tu tak samo.
Tutaj to będzie draft.
A masz rację możemy zostawić tutaj tą nazwę mnogą i tutaj, a Rift.
OK, niech to tak będzie.
Tylko jeszcze odpowiednie warunki.
Zróbmy to w ten sposób.
Dajmy tutaj na razie wszędzie kolor biały.
Natomiast przejdźmy do Condition dalii i powiedzmy, że kiedy Kiedy Nasz Listing
Listing Free current state ist published,
to chcemy tutaj zmienić background color
na Primary 25 neutral 25.
I dodajmy tutaj jeszcze border color.
Tu na primary 600 możemy sobie to skopiować.
I dodać te warunki.
Dla pozostałych buttonów będzie to oczywiście draft.
A tutaj Received.
Teraz pozostaje nam dodanie odpowiedniego workflow, które będzie zmieniało
właśnie nasz custom state.
Znów nie ma tutaj nic trudnego.
Dodajmy tutaj filters taki folder, żeby nam się to
ładnie zamykało w odpowiednie foldery.
No i tutaj oczywiście po kliknięciu zmieniamy state.
State na Publish.
Dodajmy odpowiednie workflow do pozostałych buttonów.
Przenieśmy go do folderu tutaj dodajmy workflow.
Dlatego Batmana.
a teraz przypiszemy tutaj odpowiednie kroki.
Mogę sobie skopiować tą akcję tutaj będzie to Archive.
A w tym przypadku będzie to draft.
Zerknijmy czy to zadziała.
Mamy domyślnie ustawiony na Publish, więc jest ok.
Klikam A i zmienia się to właściwie.
Natomiast w jaki sposób teraz ten parent state, które ustawiamy za pomocą
kliknięcia w te buttony, odzwierciedlić w naszej wyszukiwarce i pokazywać tylko te
listing, które rzeczywiście spełniają ten warunek?
Wracamy do edytora.
Przechodzimy sobie tutaj do repeat grupy.
Do Search for All Things i oczywiście dodajemy na Wykop Train, gdzie
jak się domyślasz status będzie równe właśnie w odniesieniu
do naszego tutaj Custom State State.
Przejdźmy.
Odświeżamy. Powinniśmy widzieć tylko opublikowane.
To się zgadza.
Nie mamy żadnych haftów, Nie mamy żadnych zarchiwizowane.
A więc tę część mamy już gotową.
Widzisz, jest to super proste.
Tak jak ci mówiłem tutaj do tych kont screen możesz przekazywać dynamiczne
wartości i w ten sposób odnosić się tak jak tutaj do odpowiedniego slajdu
w Twojej aplikacji.
Natomiast w jaki sposób wdrożyć teraz do naszego wyszukiwania listingu odpowiednie
sortowanie po dacie stuff jest niesamowicie proste.
Przechodzimy tutaj do Sort Bill i wybieramy po jakim polu chcemy sortować.
W naszym przypadku będzie to po prostu Creation Date.
I teraz musimy się zdecydować, czy to ma być rosnąco czy malejąco.
Czyli jeżeli chcemy, żeby domyślnie sortowanie po dacie było rosnące
to wybieramy tutaj de standing.
Na nowo.
Mam nadzieję, że już się zaczynasz domyślać
dlaczego nasz custom stat Sort Date ustawiliśmy właśnie na jest lub none,
ponieważ możemy go sobie teraz dynamicznie przekazać, czyli odnieść się
właśnie do Listing Re I date sort.
I tu jak pamiętasz mieliśmy ustawione i mieliśmy domyślnie,
więc ustawiamy to na nowo.
Teraz zerknijmy w naszej aplikacji jak to w ogóle wygląda.
Proszę sobie odświeżyć.
OK, jesteśmy na koncie Sary Mitchell.
Zerknijmy tutaj.
Klikam w Sort by date i OK.
Wyświetla się tutaj fokus i możemy sobie teraz zdecydować,
jaki rodzaj sortowania chcemy.
A więc musimy wprowadzić kilka drobnych poprawek.
Przede wszystkim podświetlić ten, który tutaj już jest aktywny.
Dodatkowo dodać tutaj jeszcze workflow, które będą to zmieniały,
a więc nie przedłużamy.
Wróćmy sobie tutaj datę Group Focus.
Pokażmy ją.
To co chcę zrobić, to przede wszystkim tutaj odpiąć te style.
Dodać tutaj transition na font Color równe 300.
I po najechaniu będziemy zmieniać właśnie ten kolor.
Tutaj text is hover.
Font color ustawione na nasz kolor primary 600.
Zapiszmy sobie ten styl będzie Powiedzmy, że text.
tekst.
Tekst?
O właśnie. Może w ten sposób?
Dodamy tutaj ten styl.
OK, teraz w pierwszej kolejności musimy dodać tutaj Condition dane, które będą
zmieniały ten kolor również wtedy, kiedy status jest odpowiedni.
A więc zacznijmy od tego górnego, czyli domyślnego sortowania.
I tu wybierzmy listing oraz listing.
Dokładnie tak się nazywa nasz cały element Text is now.
Tutaj font color to po prostu Primare 600.
Skopiuj, przejdźmy tutaj i tylko zamieńmy to na jest.
Kolejną rzeczą, którą musimy zrobić, to oczywiście dodać tutaj
odpowiednie workflow.
A więc tak dodajemy sobie tu folder taki, może datę.
Zmienimy, Przejdźmy tutaj i po kliknięciu Scala mamy tutaj state typu boolean.
No to już się domyślasz jaką sztuczkę wykorzystamy.
To co pokazywałem Ci już w pierwszym sprincie, czyli odnosimy się do.
OS Listing, A w zasadzie nie.
Tutaj nawet nie musimy takiej sztuczki wykonywać, ponieważ po prostu kliknięcie w
daną grupę będzie na sztywno ustawiało nam tutaj tą wartość.
Czyli dla tej pierwszej będzie to po prostu dół.
A po kliknięciu w tą drugą wartość tutaj.
Skopiuj.
I wklej. I teraz wybieramy.
Tutaj po prostu jest.
Na tym polegało całe nasze workflow.
Za jego pomocą właśnie wybieramy tutaj tą wartość i ustawiamy datę na Jest lub now.
A kolejno właśnie ten Custom State przekazujemy sobie tutaj
do naszej wyszukiwarki listingu i poprzez sortowanie będziemy mogli
odpowiednio zmieniać.
Zerknijmy, czy nam się tutaj w ogóle coś zmieni.
Czy przy imporcie to nam w jakiś sposób zaskoczy?
OK, widzisz, tu mamy właściwe podświetlenie.
Wybierzmy 2 ok.
Jak widzisz, te wyniki rzeczywiście tutaj startują.
Bałem się, że w przypadku importu, kiedy dajemy je wszystkie naraz, to nie do końca
nam zaskoczy, ale Bubble jednak sobie z tym poradził.
Mogę teraz to cofnąć.
A więc sortowanie mamy tutaj z głowy.
Mamy z głowy tą część.
To co chciałbym teraz zrobić, to dodać naszemu postowi możliwość
edycji takiego listingu.
Kolejno opcji jego zduplikowane albo archiwizowania.
Ja już w tym celu poczyniłem pewne przygotowania,
a mianowicie jeżeli przejdziemy sobie tutaj bezpośrednio do karty tego listingu,
czyli listing kart here, wybieramy Edit Element
klikniemy tutaj, to mieliśmy grupę do lajkowania.
Ja ją zamieniłem na element Data type.
Ustawiłem po prostu na listing.
Domyślnie ją ukrywamy i pokazujemy tylko wtedy, kiedy użytkownik.
Czyli End user type is gest.
Czyli tylko goście będą mogli lajkować i dodatkowo pisać.
User Type zaskoczy tylko wtedy, kiedy użytkownik będzie oczywiście zalogowany.
Mógłbyś tutaj dodać jeszcze Parent User i Getin?
Natomiast już samo to.
Tamten warunek będzie sprawdzany tylko wtedy, kiedy user się zaloguje.
A więc dla niezalogowanych użytkowników będziemy tylko wyświetlać
taką kartę i nic poza tym.
Natomiast tutaj dla hosta ja przygotowałem sobie kolejny user element.
Nosi on nazwę tutaj listing.
I wrzucam go sobie w to samo miejsce.
My collapse hidden tutaj to prawy górny róg.
To będzie element o stałej szerokości wysokości równej 32 piksele.
Jeszcze tylko odsunięcie odpowiednio od rogów tego elementu.
Pokażmy sobie ten element.
O właśnie w tym miejscu.
Dokładnie w którym będziemy wyświetlać listing.
Tu oczywiście condition all to current user user type.
Jak się domyślasz ma być równe host.
Natomiast jak wygląda sam ten element?
Jeszcze jedyne co muszę zrobić to przekazać tutaj Data Source
wstawione na Parent Group listing.
Ponieważ ten element będzie się odnosił do listingu, przejdźmy do podglądu.
Odświeżamy.
Już ten element już się pojawił.
Jest tam takie menu.
Po kliknięciu mam trzy opcje Edit, Duplicate i Archive.
Myślę, ze z przygotowaniem takiego elementu poradzisz sobie sam.
Nie ma tutaj nic trudnego, są to podstawowa wiedza ze sprintu nr 1.
Ja natomiast przejdę sobie do takiego elementu i teraz dodam tutaj odpowiedni
workflow właśnie dla tych 3 akcji.
A więc wracamy.
Przechodzimy tutaj do Listing Actions Report.
Tu mamy przekazywany odpowiedni listing.
Po kliknięciu w tą grupę pojawia nam się Group Focus i teraz dodajmy
tutaj właściwe workflow.
Pierwsze będzie dotyczyło edytowania takiego listingu, a więc
możemy tutaj wybrać np.
kolor blue i co chcemy zrobić, kiedy nasz user kliknie właśnie tutaj w ten tekst?
EDIT Oczywiście przenieść go na stronę.
New listing a data to send to parent group listing.
I dodajmy jeszcze otwieranie w nowym tabeli.
W ten sposób użytkownik znów będzie mógł przejść przez ten cały
formularz parkingowy.
A ponieważ te dane zacytowane są bezpośrednio z listingu, głównie poprzez
auto building, to będziemy mogli w prosty sposób edytować taki istniejący listing.
Wróćmy do designu.
Teraz skupmy się na Archive.
Tutaj nie ma nic trudnego.
Wybierzmy może jakiś kolor portal i w tym przypadku jedyne co tak naprawdę
robimy, to odnosimy się do tego elementu, czyli tego listingu
i zmieniamy tutaj pole Status.
Na Archive.
Natomiast w tym momencie chciałbym Ci zadać pewną pracę domową,
ponieważ tak jak Ci mówiłem wcześniej w aplikacji, nie powinniśmy pozwolić
użytkownikowi na wykonanie operacji, której nie będzie mógł cofnąć bez
żadnego dodatkowego potwierdzenia.
Dlatego też chciałbym, żeby właśnie w Twoim przypadku kliknięcie w taki text
archive najpierw otwierało nam popup z informacją, że taki rekord zostanie
zarchiwizowane i jeżeli użytkownik kliknie tak, zgadzam się czy tak potwierdzam, czy
jakkolwiek to sobie nazwiesz, to dopiero wtedy właśnie wykona się tutaj
ta operacja i rzeczywiście ustawi ten status na Archives.
Analogiczny case powinnaś wdrożyć również dla tej opcji duplicate.
Ja natomiast nie chcę tracić na to czasu, więc pozostawiam to Tobie.
Wracamy tutaj.
Wybierzmy duplicate.
I co chcemy zrobić?
Chcemy utworzyć dokładnie taki sam rekord.
Czyli Create a swing.
Będzie to listing.
Dodajmy tutaj wszystkie pola i tylko będziemy usuwać te, które
są nam niepotrzebne.
And this to będzie set list parent group.
Listing A mianowice po prostu odnosimy się do tego listingu, na które kliknęło
i powielamy dokładnie te same wartości.
A więc mogę sobie to wkleić tutaj.
I to będzie part number, czyli liczba łazienek tutaj liczba łóżek.
To nas obchodzi, ponieważ jeszcze nie mamy zablokowanych
żadnych dat, a więc te pola wywalamy.
City będzie dokładnie takie samo.
Description Identyczne.
Features ustawiamy poprzez setlisty na dokładnie taką samą wartość.
Analogicznie tutaj.
AS to będzie oczywiście parent user.
Obrazki.
Nic trudnego.
Odnosimy się dokładnie do tych samych kolumn Image main.
Images List.
Name wstawiamy istniejący name.
I tutaj Add kliknij my się poza to pole, jeżeli Babel nam tylko pozwoli.
Udało mi się.
Klikam spacja nawias kopii, żeby było wiadomo, że to kopia.
Powielamy wartość Price.
Property Type.
Rules ustawiamy na dokładnie taką samą listę.
Przenieśmy to trochę wyżej.
Tip of place wstawiamy na off place, a w zasadzie ustawiamy na dokładnie takie
samo place i tym razem status chcę od razu ustawić na draft, a nie na published.
A więc taki skomplikowany rekord wskoczy do draftu i tam użytkownik będzie go mógł
sobie edytować, poprawić odpowiednie wartości, tylko dodać jakieś obrazki,
zmienić scenę, cokolwiek i wystawić go ponownie.
To co jeszcze musimy zrobić to oczywiście taki listing
przypisać do naszego parent usera.
A więc make changes Tutaj do current user jakie pole?
Oczywiście ratings i chcemy tutaj dodać do całej tej listy i tej listy.
Jego listingu ten listing, który utworzyliśmy w kroku nr 1.
To było na tyle.
Wydaje mi się, że mamy gotowe wszystkie akcje.
Klikam tutaj, wybieram edit.
W nowym oknie otwiera mi się właśnie dokładnie ten listing.
Jak widzisz te wartości już się wczytują, mamy poustawiane to wszystko.
Mogę sobie teraz to zmienić i potem kliknąć publish.
Natomiast mnie to na chwilę obecną nie interesuje.
Wybieram tutaj duplicate. duplikaty.
Coś tam się wykonało. OK.
Jak widzisz, tutaj powinniśmy wyświetlać odpowiednie powiadomienia, że taki
listing rzeczywiście został zduplikowane.
Trafił do draftu.
To znów pozostawiam Tobie.
A co jeszcze chciałbym zrobić, to tutaj kliknąć Archive i ok.
Dodatkowo po kliknięciu w ten element powinieneś zamykać.
Tutaj to Group Focus.
Znów proszę Cię, żebyś to dodał sam ja to zrobię między lekcjami.
Natomiast wygląda na to, że wszystko to działa poprawnie.
Jesteśmy w stanie edytować, publikować oraz archiwizować właśnie te listingu,
dodatkowo odpowiednio je wyświetlić.
Ich owner owi, czyli hotelowi, który je dodał w naszym serwisie
i posortować po dacie.
A więc dziękuję Ci za uwagę i widzimy się już kolejnej lekcji.