Techniki Zaawansowane i CMS
4 godz. 45 min · Webflow · UI, UX i Webdesign
Grzegorz RógIdea ArchitectDzięki CMS masz możliwość zdefiniowania w ramach Webflow bazy danych wraz ze strukturą, którą możesz uzupełniać Ty lub osoba zajmująca się rozwojem strony, w ramach intuicyjnego modułu Editor, bezpośrednio w przeglądarce. W Kursie przyjrzymy się temu, jak działa CMS, jak tworzyć kolekcje i korzystać z dynamicznych danych w ramach podstron w Webflow, jak również w ramach stron kolekcji.
Rozpoczniemy od stworzenia systemu identyfikacji dla naszej strony, który umieścimy w ramach Style Guide w Webflow, dzięki czemu kolejne modyfikacje stylistyczne będą łatwe i dziedziczone na wszystkie podstrony naszego serwisu. Dobre przemyślenie struktury i komponentów pozwoli nam na wydajną pracę w Webflow i szybkie poprawki.
W Kursie przygotujemy od podstaw strukturę danych bloga, użyjemy dynamicznych placeholderów a następnie osadzimy bloga w ramach istniejącej, statycznej witryny, którą przygotowaliśmy w kursie podstawowym Webflow. Dowiesz się wszystkiego o tym, jak działa CMS i jak wykorzystać jego bardziej zaawansowane możliwości.
Poza tym, w kursie przewidziałem szereg lekcji, które pozwolą Ci wzbogacić funkcje Twojego serwisu o logikę biznesową, którą stworzymy bez konieczności używania języków serwerowych. Zbudujemy wyszukiwarkę opartą o elastic search, czyli najlepszy otwarty system do indeksowania i zwracania wyników.
W kursie pokażę Ci też kilka rozwiązań, które pozwolą rozbudować możliwości Twojej strony o przydatne automatyzacje, w ramach których wykorzystamy takie narzędzia jak Zapier czy Integromat. Dzięki temu będziesz mógł wyjść poza ekosystem Webflow i wpiąć na swoją stronę, bez kodowania, w zasadzie dowolne narzędzie, z pomocą API!
Kurs przygotowałem przede wszystkim dla osób, które znają już podstawy Webflow i potrafią stworzyć w tym narzędziu dowolny layout, ale chcą wzbogacić swoje projekty o dynamiczne dane i zaawansowane narzędzia, które oferuje ta platforma. Konieczne są tu solidne fundamenty Webflow z kursu podstawowego oraz przynajmniej podstawy HTML i CSS. Nie zaszkodzi trochę wiedzy z programowania, choć nie jest to obowiązkowe. Ten kurs to świetny sposób na to, aby przygotować funkcjonalne MVP swojego produktu, ale też zacząć oferować klientom dynamiczne strony i funkcjonalność CMS w połączeniu z narzędziami no-code, które pozwala tworzyć projekty w rekordowym czasie!
Cześć! Witaj w kolejnej lekcji, gdzie dokończymy sekcję
główną Bloga, czyli tą główną podstronę, natomiast chciałbym jeszcze zrobić w tym
Blog category section, a w zasadzie Section container, jedną
dodatkową techniczną sekcję. Wstawię div block'a, który będzie zawierał przycisk.
Przycisk dodam z symboli i będzie to Button big.
Gdzie on jest? Tutaj.
Chciałbym, żeby ten guzik kierował do
wszystkich postów, czyli do wszystkich postów z tej kategorii Recent articles.
To, co najpierw zrobimy to trochę dostylujemy ten div block. Może nadam mu jakąś klasę np.
CTA button wrapper.
I teraz będę chciał zrobić dodatkowy margines albo Padding
Może zrobimy sobie Padding np.
32 piksele od góry i chcę jeszcze upewnić się, że ten guzik będzie na środku.
Zostawiamy. W zasadzie, ponieważ to wszystko jest wyrównane do
środka we Flex box'ie to będzie się zawsze wyświetlać dobrze, natomiast na samym
przycisku przejdźmy do właściwości i tekst Get the quote zmienimy na
View All Articles i ustawienie tego guzika zrobimy, zmienimy z External URL na Page
ten link i będziemy linkować do strony Blog all posts, czyli do wszystkich
postów na Blogu. To będzie strona, która będzie agregowała wszystkie wpisy.
No i to tyle. Zostawiamy to tak jak jest.
Mamy w zasadzie gotową całą sekcję Blog
category section. W związku z tym możemy ją teraz powielić
i możemy ją wkleić dla każdej z kolejnych sekcji.
Czyli mamy cztery sekcje: Software, Marketing, Mobile
i Blockchain, więc wklejam to teraz 4 razy, łącznie będziemy mieli 5.
Przechodzę do pierwszej z tych sekcji
i zamiast Recent articles będę chciał pobrać tutaj informacje o tym, jakie są
ostatnie artykuły w pierwszej kategorii, czyli w kategorii Blockchain.
No i teraz mamy tutaj symbol. Do tego
symbolu nie chcę do środka dodawać żadnych dynamicznych danych z kolekcji.
Dlaczego?
Dlatego, że to popsułoby nam wszystkie inne nagłówki na stronie. W związku z tym
kliknę prawym przyciskiem myszy i wybioram Unlink from symbol albo wcisnę cmd + shift + A.
Czy to popsuje mi tak naprawdę ten cały
symbol, czy on nie będzie się zmieniał zgodnie z tym, co zrobię w symbolu?
Będzie się i tak zmieniał, dlatego że mamy tu odpowiednie klasy np.
klasę Header section, które pozostaną niezmienione
i wtedy również zmiany do tych całych nagłówków będą tego dotyczyć.
I w ten sposób mogę też usunąć stąd niepotrzebny paragraf.
Kolejno zastanówmy się nad tym, jak
tutaj pobrać nazwę sekcji, bo moglibyśmy oczywiście wpisać tutaj na sztywno Blockchain,
ale nie chcemy tego robić, dlatego że, jeżeli zmieni się nazwa tej kategorii w
bazie danych, chcielibyśmy, aby ta nazwa też była dynamiczna.
Moglibyśmy wstawić tutaj Collection list i podlinkować to do kategorii,
natomiast nie jest to takie oczywiste rozwiązanie. Dlaczego?
Dlatego, że w momencie, gdy Source wybierzemy jako kategorię, przejdźmy do
ustawień, no to mamy tutaj możliwość filtrowania, mamy możliwość ograniczenia
itemów, no na pewno chcielibyśmy ograniczyć item do jednego, bo chcemy pobierać tylko jedną
kategorię stąd, natomiast to jaka to będzie kategoria,
w zasadzie nie mamy za bardzo na to wpływu,
to znaczy będzie brana kategoria, która jest zgodnie z sort orderem, możemy
oczywiście też zrobić tak, żeby sortować to np.
po Created date, czy Published date, możemy Created i Newest/Oldest i
wybieram Save i wtedy np.
mamy zgodną kolejność z bazą danych, czyli jeśli mamy kategorię Software tutaj na
pierwszym miejscu w bazie danych, przejdźmy do Categories,
to Software będzie się wyświetlał zawsze jako pierwszy, Marketing jako drugie itd.
Natomiast pamiętaj proszę, że my później
musimy, tak czy inaczej, połączyć to z tymi wpisami, które się tutaj wyświetlają.
No, bo zobaczmy jakby to wyglądało i warto
się nad tym zastanowić, żeby zrozumieć te różne powiązania między kategoriami.
To jest tak, że tutaj mamy wyświetlane Blog posty, więc musimy korzystać z Source jako
Blog post, bo musimy po prostu mieć dane o blog postach i teraz
jak mieć pewność, że te Blog posty, które się wyświetlają są z kategorii Blockchain,
a jednocześnie tutaj jest ustawiona kategoria Blockchain?
Niestety z poziomu jednej kolekcji, czyli z poziomu kolekcji Blog postów, nie mamy
dostępu do dat publikacji itemów w innej kolekcji, czyli w tej kolekcji
kategorii. Musielibyśmy w związku z tym zrobić to trochę naokoło.
Ale tak, czy inaczej nie mielibyśmy pewności, czy przypadkiem nie zmieni się to
i nie rozjedzie nam się ten tytuł z zawartością, w momencie, gdy ktoś np.
z bazy danych pousuwa jakieś kategorie, pododaje nowe itd.
W związku z tym musielibyśmy bazować na
jednym, niepewnym połączeniu, które nie do końca lubię w CMSie.
To znaczy moglibyśmy oczywiście tutaj wpisać to na sztywno, czyli Blog posty
łatwo połączyć, ponieważ mamy jako Source wybrane Blog post, teraz przechodzimy do
Card Collection item. Następnie będziemy chcieli wskazać, że
tutaj mają się znaleźć posty zgodnie z filtrem. Wybieramy sobie filtr, plus i teraz
nie będziemy szukać po nazwie, będziemy szukać kategorii,
która ma tutaj Reference, w związku z tym są
jeden do jednego dokładnie podlinkowane te kategorie, które są przypisane do postów i
tutaj możemy wybrać je z listy, więc super, jeśli możemy wybrać je z listy,
to jeżeli wybierzemy tutaj Blockchain, będą pojawiały się tylko posty z Blockchain'u,
mamy tylko jeden taki post i w tej sytuacji, jeżeli ktoś się zmieni np
nazwę kategorii Blockchain, ponieważ wybraliśmy to z listy, zostanie to uwzględnione.
Jeżeli ją usunie to będziemy musieli dokonać zmiany w poście i zmienić po
prostu kategorię, więc wszystko będzie działać.
Więc tutaj jest OK.
Natomiast, jeżeli chcielibyśmy
tutaj połączyć tę kategorię i upewnić się, że to jest Blockchain,
musielibyśmy tu skorzystać z innego filtra. Filtr w ramach tej jednej kolekcji, który
wyświetli nam odpowiedni Item, nie ma Dropdown'a, a po prostu możemy na przykład znaleźć
sobie po nazwie i wpisać jakąś wartość, czy jest równa
nazwa, czy nie jest równa, jeżeli Equals wpisalibyśmy Blockchain,
to wtedy wybierając Save, mielibyśmy rzeczywiście tę kategorię Blockchain.
Wtedy nie musielibyśmy nawet startować tego w żaden sposób.
Mogę wyrzucić ten sort order.
Wyświetlany jeden Item, który w nazwie ma Blockchain i to zawsze będzie kategoria Blockchain.
W tym momencie, jeśli przerzucimy do niej Heading
i zmienimy oczywiście ten Heading tak, aby brał tekst z kategorii i wybierzemy pole Name,
no to zawsze będzie Blockchain.
Ale problem stworzyliśmy sobie już
wcześniej. Problem stworzyliśmy w tym miejscu,
definiując w filtrze nazwę, którą wpisaliśmy tu z palca.
Dlaczego?
Dlatego, że nie jest to rozwiązanie dość elastyczne.
Wyobraź sobie, że teraz ktoś wchodzi do bazy nasz klient np.
i zmienia nazwę tej kategorii z Blockchain na Blockchain and Crypto.
W tym momencie już całość przestaje
działać, ponieważ my tutaj mamy filtr, którego nazwa musi być równa
Blockchain, więc nie jest to, że zawiera, czy coś
takiego, po prostu musi być to zawsze to co wpisane tutaj z palca i to się nie będzie
zmieniało tak jak te rzeczy wybierane z listy,
zgodnie ze zmianami w naszej bazie. W związku z tym takie rozwiązanie,
rozwiązanie bazujące na filtrze, nie jest do końca dobre i staram się jego unikać,
zwłaszcza właśnie wtedy, kiedy wiem, że coś się może pozmieniać, a ja bazuję na, czymś co
jest równe temu, co wpisałem w edycji, więc korzystamy teraz z ikonki kosza, aby usunąć
ten filtr i zastanówmy się, jak można zrobić to lepiej.
Jak pewnie zauważyłeś, w momencie kiedy
pole jest referencją w innej kolekcji, to w tej kolekcji tak np.
jak mamy tutaj, w momencie, gdy dodajemy filtry, mamy właśnie tę listę i o to nam
chodzi, bo te zmiany zostaną uwzględnione, jeśli zostaną wykonane w bazie.
W związku z tym fajnie by było, gdybyśmy
mieli do dyspozycji również tutaj taką listę, więc nie możemy skorzystać
bezpośrednio wtedy z kolekcji kategorii, a raczej powinniśmy jako Source dodać tutaj kolekcję
Blog postów również i wtedy mielibyśmy możliwość rzeczywiście skorzystania z
rozwijanej listy i wyciągnięcia tej nazwy kolekcji poprzez referencje.
Problem polega na tym, że teraz nie możemy już tego Source'a zmienić.
Jest tak dlatego i mamy wyświetloną tam małą kłódkę,
że wewnątrz Item'a znajduje się już coś, co jest podlinkowane
do tej kategorii, więc musimy najpierw usunąć wszystkie linki, odlinkować.
Wszystko musi być,
jeżeli mamy coś w Collection item'ie to musi być nie na fioletowy, tylko po prostu na biało.
I teraz możemy iść do Collection list wrappera i możemy zmienić kolekcję.
Nie będziemy korzystali z kategorii tylko z blog postów.
Teraz jest taki problem, że tyle ile jest
blogpostów to wyświetli nam tych Heading 1, czyli Collection item'ów.
No, więc przechodzimy do właściwości. Limitujemy item'y
Limitujemy item'y do jednego,
Wtedy będziemy mieli wyświetlany jeden item,
ale już w tym miejscu, w filtrach , będziemy mogli użyć listy rozwijanej,
Czyli wybieramy nie Nema, a po prostu
Category i głos i wybieramy Blockchain. Polecenie Savei
teraz mamy dane z właściwej kolekcji.
Teraz możemy wejść na Heading 1, a
następnie Get text from Block Posts i wybrać sobie, że będziemy chcieli skorzystać z
linku do kategorii i wybrać nazwę kategorii, którą wskazaliśmy.
W ten sposób zachowamy jak największą elastyczność dotyczącą tych zmian w bazie.
Mogłoby ci też przyjść do głowy to, żeby na cały ten cały ten Blog content container
zrobić właśnie jedną dużą kolekcją, kolekcją postów i w środku sobie
korzystać z tych różnych danych. Natomiast Tu, tu i tu.
Natomiast to nie jest optymalne rozwiązanie, bo zawsze jest tak, że, jeżeli
dodajemy kolekcje to te Collection itemy będą nam się duplikowały w zależności od
tego jaką ich ilość wybierzemy. Jeśli wybralibyśmy trzy,
To dałoby zduplikowałoby nam cały Heading razy trzy
i trudno by było sobie z tym poradzić.
Co prawda jest jakieś obejście, ale moim zdaniem po prostu tak jest lepiej, żeby
dodawać sobie osobne kolekcje i być trochę uczulonym na te filtry,
jeżeli wpisujemy je z palca, a raczej
starać się wtedy wybrać taką kolekcję, która ma dane z tej docelowej naszej
kolekcji, które chcemy wyświetlać w pewien sposób.
Bo wtedy będziemy mieli dostęp do listy i
tak samo zrobimy sobie w tym guziku View All Articles. Tutaj problemów będzie kilka.
I już pokazuję jak sobie z nimi poradzić.
Po pierwsze chcemy Cmd + Shift + A rozgrupować to w ten sposób, żeby już nie
było symbolem, czyli z osobnym przyciskiem, który możemy teraz edytować
i chciałbym tutaj wpisać nazwę kategorii, czyli View blockchain articles.
W związku z tym zamiast frazy All,
chciałbym przekazać dynamiczne dane, czyli dane o naszej kategorii.
Istnieje w Webflow pewien ciekawy sposób, który intuicyjnie mógłbyś tutaj
wykorzystać i mógłby nam zdecydowanie pomóc. Jeżeli zaznaczysz coś w obrębie
fragmentu tekstu, nawet wewnątrz guzika, możesz wybrać opcję Wrap with span.
Czyli możesz obwieźć ten specyficzny kawałek tekstu
osobnym znacznikiem html-owym, czyli
spanem. Intuicyjnie powinno to rzeczywiście dla nas zadziałać.
Czyli wybiorę tutaj Wrap with span.
Dzięki temu wewnątrz przycisku Button big znajduje się dodatkowy tekst span.
Jeśli tylko wrzucę to wszystko w kolekcję,
zaraz to zrobię, to powinienem mieć możliwość zaciągnięcia tutaj tylko do tego
span'a dynamicznych danych i będę miał View blockchain articles.
W praktyce jednak to nie zadziała. Zaraz pokażę Ci jak można to obejść, ale najpierw
dodajmy tę kolekcję. Wybieram "a", następnie Collection list
i wrzucam całą kolekcję może do CTA button wrapper. Teraz wewnątrz tego Collection list,
aha jeszcze może skonfigurujemy ją odpowiednio od razu tak, żeby sama kolekcja
połączmy ją z danymi o Blogu postach,
koniecznie, znowu nie o kategoriach, bo nie
chcemy filtrować po nazwie, tylko po Blog postach, gdzie będziemy mogli filtrować po
liście i musimy limitować ilość itemów do jednego.
Natomiast, jeśli chodzi o filtr, wybierzemy
tutaj link do kategorii, a następnie wskażemy kategorię Blockchain.
No i teraz dane mamy dobrze zaciągnięte.
Natomiast jak możemy sobie poradzić z tym przyciskiem. Powinniśmy go przerzucić do
Collection item'a i teraz, jeżeli próbujemy to zrobić może nam się czasem udać,
Czasem może się nie udać, nie trafić.
Generalnie polega to trochę na tym, żeby
dobrze trafić również z położeniem poziomo, nie tylko pionowo tutaj, ale, jeżeli np.
pionowo będziesz chciał wstawić to, gdzieś
z boku będzie na czerwono i pojawi się informacja, że nie można tego wstawić.
Zwykle w takich sytuacjach posiłkuje się
następującą metodą - po prostu zaznaczam coś, kopiuję,
następnie wchodzę do Collection item'a i cmd + V wklejam to i wtedy zawsze jest OK.
A ten drugi Button mogę zwyczajnie usunąć.
No i teraz intuicja podpowiada nam, że
w text spanie moglibyśmy wstawić, wstrzyknąć dynamiczne dane,
w ten sposób, że będzie to wyświetlało tę nazwę kategorii.
Niestety okazuje się, że we właściwościach
text span'a, przynajmniej na ten moment w Webflow, nie wiem być może już to naprawili,
ale nie ma możliwości wziąć tych danych dynamicznie. Jeżeli chodzi o Button to
moglibyśmy te dane zaciągnąć.
Jak widzisz możemy skorzystać z Get text
from blog posts i tutaj podlinkować do nazwy kategorii.
Natomiast wtedy na guziku dostajemy jedną frazę Blockchain
i to mi się nie podoba, bo tutaj powinno
być po prostu View blockchain articles albo View all blockchain articles albo Section coś takiego,
natomiast Blockchain nie jest intuicyjny.
Co musimy zrobić w tej sytuacji? Musimy po prostu odtworzyć strukturę tego przycisku,
co zresztą nie będzie trudne, bo możemy
stworzyć po prostu dodatkowy link block i wewnątrz tego link block'a zaraz dodamy
właśnie kolejne text block'i, czyli zrobimy jeden i to będzie Text view,
następnie do kolejnego text block'a, mogę skopiować ten,
przekażemy i od razu, może usunę go, i od razu ustawmy dla niego właściwe parametry,
czyli Display ustawiamy na inline block.
Zrobimy tak, że ten tekst powielimy i powielimy go jeszcze raz
i tutaj będzie nazwa kategorii, czyli nasz Blockchain, zaraz go tutaj wstawimy,
a tutaj będzie Articles. Zaraz jeszcze dorobimy to jakiś margines,
ale odtwarzając to w ten sposób, rzeczywiście będziemy mogli wstrzyknąć
do tego środkowego text block'a, przejdźmy do jego preferencji, Get text from blog post
I tutaj wstrzykniemy sobie nazwę kategorii Name. Czyli mamy View, Blockchain. Articles.
Teraz to, co chcemy jeszcze zrobić to
oczywiście dla tego link block'a dodać odpowiednie style.
Na szczęście mamy style do przycisku
przecież, z których możemy skorzystać, więc skorzystamy z klasy Button big,
a jeśli chodzi o te text block'i to możemy dla nich zastosować klasę, usunę sobie klasę text block
i wpiszę tutaj Button text. Tworzymy nową klasę.
Jeszcze raz ustawimy dla niej Display na inline block i dodatkowo kolor ustawimy na
kolor biały. Teraz mamy to zastosowane do pierwszego Button text'u,
ale ten drugi Button text też możemy tak zrobić, czyli Remove class, Button text.
To samo zrobimy w przypadku trzeciego.
Remove i Button text. OK.
I teraz jeszcze trzeba by było na ten Button text dodać jakiś delikatny
margines z lewej i z prawej strony. Dodajmy combo klasę Category
i ustawimy dla tej kategorii Padding z lewej i z prawej strony. Zobaczmy optycznie jaki
będzie nam pasował około 5, 6 pikseli powinien być OK.
No dobra. Teraz rzeczywiście mamy dobrze to
podlinkowane, mamy dynamiczne dane, natomiast Button big możemy po prostu się pozbyć.
OK teraz wygląda na to, że dość istotnie
zmieniła nam się struktura Blog category section, więc zaraz to sobie skopiujemy, ale zanim
jeszcze to zrobię, to chciałbym może ostatnią rzecz dorobić, czyli Header section.
Może dodamy do tego
jakąś subklasę Blog section i taką combo klasę będziemy chcieli
wyposażyć w margines na dole rzędu 48 pikseli, żeby to odsunąć.
No i teraz mamy już właśnie tę trochę lepszą strukturę,
więc możemy usunąć te, które wcześniej skopiowaliśmy Blog category sections i
wkleić to,skopiować i wkleić to jeszcze trzy razy.
Teraz zacznijmy pracować na właściwych
kategoriach, czyli po pierwsze mamy Recent articles i to jest OK, ponieważ zwraca wszystkie
ostatnie artykuły i linkuje do wszystkich ostatnich artykułów.
Teraz tu będziemy musieli zmienić ustawienie Collection list wrappera
pierwszego, w ten sposób, że będziemy filtrować
może zamiast właśnie Blockchain
to spróbujmy tutaj klikamy filtrować od pierwszej kategorii, czyli Software. Save.
Pokazuje się Software. Tak samo zrobimy z List wrapper'em na
poszczególne Blog posty. Zmienimy to na Software po to, żeby
wyświetlać posty z Software. Wybieram polecenie Save.
I to samo zrobię z ostatnim Collection list wrapper'em. Zamiast Blockchain podlinkujmy
go do Software, pamiętaj żeby zawsze to zapisać.
I tak samo musimy zrobić w kolejnych kolekcjach, czyli otwieramy sobie drugą
drugą kategorię, którą będzie Marketing. Save. Tutaj Collection list wrapper, robimy
też Marketing, Save i guzik na dole Blockchain zmieniamy na Marketing, Save.
To samo robimy niżej, to już tylko
powtarzanie tych kroków. Collection list wrapper ustawiamy kategorie tym razem na Mobile
I zrobimy to samo w przypadku Collection list wrappera. Ustawiamy, zmieniamy Blockchain na Mobile,
Save koniecznie i tak samo robimy z list wrapper'em dla
przycisku i to jest wszystko, co musimy zrobić, ponieważ ostatni jest Blockchain
i rzeczywiście ten Blockchain tutaj już jest, więc mamy View blockchain articles.
Można powiedzieć, że cała strona główna bloga jest praktycznie gotowa.
Przechodzę teraz do nawigatora. Klikam tę małą ikonkę Expand/Collapse all po to, żeby zwinąć
wszystkie sekcje. No i nie mam jeszcze tylko Footer'a. Na dole powinien wyświetlać się
Footer. Wciskam trzy razy "a", aby przejść do symboli.
Tutaj mam symbol z Footer'em.
Upewnijmy się, że Body jest zaznaczone,
widzę, że jest, więc spoko. Mogę teraz wybrać
Footer, który zostanie automatycznie wklejony na sam dół i w związku z tym
moja strona kategorii, strona główna bloga jest gotowa.
Ma też podlinkowane wszystkie elementy odpowiednio.
Mogę iść do kategorii Software.
Mogę iść do konkretnego wpisu.
Oczywiście tutaj jeszcze nic nie ma, bo
musimy te strony przygotować, ale wszystko działa i jest dobrze pospinane.
Więc to by było na tyle jeśli chodzi o stronę bloga,
a my widzimy się w kolejnej lekcji. Do usłyszenia!