Skocz do zawartości
sh4kr

Rozwijana lista kategorii Wordpress

Polecane posty

Cześć!

 

Chciałbym wdrożyć coś takiego na mojego Wordpressa a mianowicie chciałbym na stronę główna (gdzieś w szablonie) wstawić rozwijaną listę kategorii. Ale to nie wszystko :) Po wybraniu kategorii, w drugiej liście obok żeby "w locie" pobrały się podkategorie tejże kategorii i się wyświetliły.

Da się coś takiego zrobić?

 

EDIT:

Chodzi o to że mam taki kod:

Wybierz Kategorię:
<select>
  <option value="1">Kategoria X</option>
  <option value="2">kategoria Y</option>
  <option value="3">kategoria Z</option>
</select>
a nastepnie jej podkategorię:
<select>
  <option value="1a">Podkategoria Kategorii X</option>
  <option value="2a">Podkategoria Kategorii Y</option>
  <option value="3a">Podkategoria Kategorii Z</option>
</select>

Czyli wygląda to tak:

2KgitQg.jpg

A chciałbym, żeby Wordpress sam generował między znacznikami <select> listę Kategorii a później (po wybraniu kategorii) listę podkategorii. :)

 

Mam nadzieję, że nie pogmatwałem :P

 

EDIT2:

 

Okej znalazłem coś co wyświetla listę kategorii na Wordpressie jako dropdown list.

<form action="<?php bloginfo('url'); ?>/" method="get">
<?php
$select = wp_dropdown_categories('show_option_none=Select Category&show_count=1&orderby=name&echo=0&selected=6');
$select = preg_replace("#<select([^>]*)>#", "<select$1 onchange='return this.form.submit()'>", $select);
echo $select;
?>
<noscript><input type="submit" value="View" /></noscript>
</form>

Teraz jeszcze jak dorobić do tego listę podkategorii w osobej liście i przycisk "Pokaż" / "Wyświetl Post"?

 

 

Edytowano przez sh4kr (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Da się, nie jestem teraz w 100% pewny, ale chyba da się to zrobić na zasadzie odpowiedniego dostosowania wyglądu w szablonie wbudowanego widgetu wordpressa do wyświetlania kategorii. Jeśli nie (musiałbym zerknąć w kod) to można to zrobić dodając własny widget.

 

Do wykonania tego na pewno trzeba znać JavaScript i CSS, gdyby okazało się, że trzeba napisać widget to do tego dochodzi jeszcze znajomość PHP oraz API WordPressa.

Najładniej i najbardziej elastycznie - bez modyfikacji szablonu czyli potrzeby tworzenia motywu potomnego w celu uniknięcia utraty zmian po aktualizacji szablony będzie z całą pewnością stworzenie specjalnego widgetu, który będzie miał zaimplementowaną funkcjonalność tylko w JS, a wygląd czyli style CSS będą zaczerpnięte z szablonu.

 

Gdybyś był zainteresowany zleceniem tego napisz do mnie na priv, jestem w stanie Ci to zrobić.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Gość Rafiki

chyba o to ci chodzi - link, znajdziesz tam jak to zrobić od strony technicznej gdy chcesz sam kodzić w php i ajaxie dodatkowo jeszcze dokumentacja wordpress'a jak pobierać kategorie i powinieneś dać rade :).

Nie trzeba tworzyć tego jako widget - można zakodować to na sztywno w templatce której używasz w sidebarze czy gdzie tam sobie zechcesz.

 

Dodatkowo pod wordpressa może jest już jakiś gotowy plugin ? - przetestuj chociażby ten

Edytowano przez Rafiki (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

AJAXa nie ma sensu do tego angażować, owszem można zakodować w sidebarze szablonu, tylko tracisz możliwość organizacji kolejności widgetów w sidebarze. Konkretnie to nie masz za dużego wpływu w którym będzie znajdowała się ta lista. Ustawienie takiej listy pomiędzy widgetami będzie praktycznie niemożliwe, a jedyna droga realizacji to stworzenie dwóch sidebarów które będą wyświetlane przed i za taką listą jako jeden sidebar, efekt będzie taki, że zagmatwa i utrudni to zarządzanie kolejnością widgetów bo trzeba będzie pamiętać, że sidebar na stronie jest widziany przez WordPressa jako dwa, tym samym zmiana kolejności widgetu będzie mogła wymagać zmiany sidebaru w którym ma być wyświetlany.

Edytowano przez Fizyda (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Gość Rafiki

AJAXa nie ma sensu do tego angażować, owszem można zakodować w sidebarze szablonu, tylko tracisz możliwość organizacji kolejności widgetów w sidebarze. Konkretnie to nie masz za dużego wpływu w którym będzie znajdowała się ta lista. Ustawienie takiej listy pomiędzy widgetami będzie praktycznie niemożliwe, a jedyna droga realizacji to stworzenie dwóch sidebarów które będą wyświetlane przed i za taką listą jako jeden sidebar, efekt będzie taki, że zagmatwa i utrudni to zarządzanie kolejnością widgetów bo trzeba będzie pamiętać, że sidebar na stronie jest widziany przez WordPressa jako dwa, tym samym zmiana kolejności widgetu będzie mogła wymagać zmiany sidebaru w którym ma być wyświetlany.

 

Proszę dowiedz sie co to ajax... bo pisałeś coś o javascript i php....

 

Ktoś ma problem z stworzeniem rozsuwanego menu a co dopiero z zaprogramowaniem swojego widgetu / pluginu...po prostu napisałem ,że takie rozwizanie zakodowania w templatce będzie dużo łatwiejsze więc nie wiem o co zabardzo Tobie chodzi :) Po za tym ktoś powiedział ,że autor chce umieszczać coś między jakimiś widgetami ? Dodatkowo i tak jest to możliwe... wystarczy odczytać liste widgetów, posortować w tablicy, dodać swój rekord z drzewem kategorii i wyświetlic jak sie chce - co prawda mija się to z celem ale w programowaniu nie ma rzeczy niemożliwych :)

Edytowano przez Rafiki (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

 

Proszę dowiedz sie co to ajax... bo pisałeś coś o javascript i php....

 

Ktoś ma problem z stworzeniem rozsuwanego menu a co dopiero z zaprogramowaniem swojego widgetu / pluginu...po prostu napisałem ,że takie rozwizanie zakodowania w templatce będzie dużo łatwiejsze więc nie wiem o co zabardzo Tobie chodzi :) Po za tym ktoś powiedział ,że autor chce umieszczać coś między jakimiś widgetami ? Dodatkowo i tak jest to możliwe... wystarczy odczytać liste widgetów, posortować w tablicy, dodać swój rekord z drzewem kategorii i wyświetlic jak sie chce - co prawda mija się to z celem ale w programowaniu nie ma rzeczy niemożliwych :)

 

Nie powiedziałem, że jest to niemożliwe, napsikam tylko o negatywnych skutkach takiego rozwiązania względem widgetu.

Wiem czym jest AJAX, a ja nie pisałem o ajaxie tylko o js. AJAX to technika wykorzystująca wiele technologi która ma na celu pobieranie treści strony bez jej blokowania, a to w tym konkretnym przypadku nie jest zupełnie potrzebne. Wręcz zastosowanie ajaxa do takiego menu będzie powodowało opóźnienia podczas wyświetlania subkategorii, skomplikuje proste rozwiązanie oraz wymaga większego backendu.

 

Wystarczy stworzyć widget który wyświetla listę kategorii i subkategorii w odpowiedniej strukturze HTML, dane łatwo można pobrać za pomocą funkcji wordpressa, dodać obsługę w javascripcie rozwijania subkategorii przy użyciu przycisku i ostylować wygląd tej listy.

Rozwiązanie proste, sprawne i niezawodne. Można je jeszcze zoptymalizować o użycie cache wordpressa i raz wygenerowaną listę zapisać w cachu, później wystarczy generować ją po ewentualnej aktualizacji jakiejś kategorii.

 

AJAX to przerost formy nad treścią. Równie dobrze można by napisać w C++ moduł do phpa który będzie taką funkcjonalność zapewniał, tylko po co? W programowaniu nie chodzi o to by udowadniać że coś da się zrobić na N sposobów lub w inny sposób bo to jest oczywiste i wszyscy o tym wiedzą, chodzi o to by znaleźć najprostsze i najlepsze rozwiązanie w danej sytuacji bo programowanie miało ułatwić ludziom życie - zautomatyzować procesy i przyśpieszyć obliczenia i przetwarzanie danych, a nie udowadniać że da się coś zrobić w konkretny sposób.

Edytowano przez Fizyda (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

chyba o to ci chodzi - link, znajdziesz tam jak to zrobić od strony technicznej gdy chcesz sam kodzić w php i ajaxie dodatkowo jeszcze dokumentacja wordpress'a jak pobierać kategorie i powinieneś dać rade :).

Nie trzeba tworzyć tego jako widget - można zakodować to na sztywno w templatce której używasz w sidebarze czy gdzie tam sobie zechcesz.

 

Dodatkowo pod wordpressa może jest już jakiś gotowy plugin ? - przetestuj chociażby ten

 

Dzięki dzięki za jakieś wskazówki :)

Niestety Plugin nie spełnia moich oczekiwań do końca.

Coś spróbuję sam zrobić, a jeśli nie to chyba będę musiał to komuś zlecić ;)

 

@Fizyda dzięki również za pomoc, jak coś to będę się odzywał.

 

Co do tego gdzie miałoby to funkcjonować, to w dowolnym miejscu na stronie, tak więc widgety odpadają.

Edytowano przez sh4kr (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Gość Rafiki

 

Nie powiedziałem, że jest to niemożliwe, napsikam tylko o negatywnych skutkach takiego rozwiązania względem widgetu.

Wiem czym jest AJAX, a ja nie pisałem o ajaxie tylko o js. AJAX to technika wykorzystująca wiele technologi która ma na celu pobieranie treści strony bez jej blokowania, a to w tym konkretnym przypadku nie jest zupełnie potrzebne. Wręcz zastosowanie ajaxa do takiego menu będzie powodowało opóźnienia podczas wyświetlania subkategorii, skomplikuje proste rozwiązanie oraz wymaga większego backendu.

 

Wystarczy stworzyć widget który wyświetla listę kategorii i subkategorii w odpowiedniej strukturze HTML, dane łatwo można pobrać za pomocą funkcji wordpressa, dodać obsługę w javascripcie rozwijania subkategorii przy użyciu przycisku i ostylować wygląd tej listy.

Rozwiązanie proste, sprawne i niezawodne. Można je jeszcze zoptymalizować o użycie cache wordpressa i raz wygenerowaną listę zapisać w cachu, później wystarczy generować ją po ewentualnej aktualizacji jakiejś kategorii.

 

AJAX to przerost formy nad treścią. Równie dobrze można by napisać w C++ moduł do phpa który będzie taką funkcjonalność zapewniał, tylko po co? W programowaniu nie chodzi o to by udowadniać że coś da się zrobić na N sposobów lub w inny sposób bo to jest oczywiste i wszyscy o tym wiedzą, chodzi o to by znaleźć najprostsze i najlepsze rozwiązanie w danej sytuacji bo programowanie miało ułatwić ludziom życie - zautomatyzować procesy i przyśpieszyć obliczenia i przetwarzanie danych, a nie udowadniać że da się coś zrobić w konkretny sposób.

 

Chyba jednak nie wiesz skoro porównujesz ajax do c++ i to jeszcze na stronie ;) mówiąc w dużym skrócie technologia ajax służy do pobierania/wyświetlania danych bez konieczności przeładowania strony, wykorzystuje tutaj się javascript i php nic więcej nie trzeba....

Twoje rozwiązanie nie mówie ,że jest złe ale jest statyczne, jeśli za pomocą samego js i css będziemy ukrywać / odkrywać odpowiednie elementy selecta ale co to ma za sens gdy dodamy nowe drzewo kategorii, usuniemy podkategorie lub zmienimy kolejność to za każdym razem trzeba dostosowywać kod js.

Edytowano przez Rafiki (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

 

Co do tego gdzie miałoby to funkcjonować, to w dowolnym miejscu na stronie, tak więc widgety odpadają.

Właśnie to jest argument za widgetem. Widget to plugin tak naprawdę, możesz dodać shortcode, funkcję do wyświetlania. Tym samym masz 3 sposoby umieszczania takiej listy na stronie:

1) jak normalny widget w dowolnym sidebarze

2) w treści strony/postu przy pomocy shortcode

3) za pomocą funkcji php w dowolnym miejscu w szablonie

 

Lista aktualizuje się automatycznie wraz z dodawaniem/usuwaniem/edycją kategorii i subkategorii we wszystkich miejscach. Nie musisz aktualizować niczego w kilku miejscach tylko wszystko w jednym.

 

EDIT:

 

Chyba jednak nie wiesz skoro porównujesz ajax do c++ i to jeszcze na stronie ;) mówiąc w dużym skrócie technologia ajax służy do pobierania/wyświetlania danych bez konieczności przeładowania strony, wykorzystuje tutaj się javascript i php nic więcej nie trzeba....

Twoje rozwiązanie nie mówie ,że jest złe ale jest statyczne, jeśli za pomocą samego js i css będziemy ukrywać / odkrywać odpowiednie elementy selecta ale co to ma za sens gdy dodamy nowe drzewo kategorii, usuniemy podkategorie lub zmienimy kolejność to za każdym razem trzeba dostosowywać kod js.

 

Mocno nadinterpretujesz to co piszę, wskaż mi w moim poście moment w którym porównuję C++ i AJAX? Czyli język programowania z techniką/metodą pobierania danych.

Gdzie napisałem że proponuję zrobić to statycznie przy użyciu js i css? Wskaż mi w mojej wypowiedzi takowe miejsce.

 

Ogólnie mam wrażenie jakbyś czytał 50% tego co piszę.

Edytowano przez Fizyda (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Gość Rafiki

Napisałeś ,że ajax to za duży arsenał .... ze ty byś to zrobił w js i css. A jak chcesz zrobić to dynamicznie bez użycia php'a ? Nawet jeśli pobierzesz sobie wszystkie drzewa kategorii i podkategorii przez funkcje w wordpressie to jak będziesz je filtrował za pomocą js dynamicznie ?

 

Edytowano przez Rafiki (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Napisałeś ,że ajax to za duży arsenał .... ze ty byś to zrobił w js i css. A jak chcesz zrobić to dynamicznie bez użycia php'a ? Nawet jeśli pobierzesz sobie wszystkie drzewa kategorii i podkategorii przez funkcje w wordpressie to jak będziesz je filtrował za pomocą js dynamicznie ?

 

 

Odpowiedź zawiera się w tych linijkach:

 

 

Wystarczy stworzyć widget który wyświetla listę kategorii i subkategorii w odpowiedniej strukturze HTML, dane łatwo można pobrać za pomocą funkcji wordpressa, dodać obsługę w javascripcie rozwijania subkategorii przy użyciu przycisku i ostylować wygląd tej listy.

 

W części zdania:

 

Wystarczy stworzyć widget który wyświetla listę kategorii i subkategorii w odpowiedniej strukturze HTML, dane łatwo można pobrać za pomocą funkcji wordpressa,

sugeruje że listę tworzymy dynamicznie w php, ponieważ skoro widget to php, skoro funkcje wordpressa pobierają dane czyli w naszym przypadku listę kategorii i subkategorii to jest to już robione dynamicznie. Nie musimy obsługiwać żądania ajaxowego, czyli pisać dodatkowego kodu.

Dalej piszę:

 

dodać obsługę w javascripcie rozwijania subkategorii przy użyciu przycisku

Czyli zwyczajnie rozwijamy i zwijamy zagnieżdżone listy za pomocą JS przy pomocy obsługi onClick na przycisku do zwijania/rozwijania listy subkategorii.

Na koniec kosmetyka:

 

i ostylować wygląd tej listy.

Czyli zapewnienie poprawnego chowania/pokazywania się subkategorii plus, co nie jest obowiązkowe bo można to odziedziczyć po ustawionym stylu tylko trzeba znów wiedzieć jak sam design całej listy - kolory, fonty, rozmiar, ewentualne dodatkowe zdobienia - ramki podkreślenia efekty hover i co tam jeszcze styl nie ma.

 

AJAX to nie jest duży arsenał, tylko niepotrzebne komplikowanie struktury takiego pluginu/widgetu oraz nawiązywanie dodatkowych - niepotrzebnych żądań do serwera które kosztują czas. Lepiej w większości przypadków od razu zwrócić całą przygotowaną (dynamicznie w php) listę kategorii i subkategorii w kodzie strony niż dociągać je przy pomocy AJAXa. Nie są to tak ogromne ilości danych by zaoszczędziło to transfer, ale będą do frustrujące milisekundy/sekundy dla użytkownika który będzie rozwijał taką listę ponieważ może on musieć chwilę zaczekać na nawiązanie połączenia z serwerem i zwrócenie danych. Ponieważ dopiero po tym zostanie mu wyświetlona lista subkategorii.

Nad wprowadzeniem ajaxa można by się zastanawiać gdybyśmy mieli listę zbliżającą się do 100 i więcej kategorii i subkategorii łącznie. Jeśli będzie to powiedzmy lista głównych kategorii w okolicach 10/15 plus na każdą przypadnie do 5-8 (zwracam uwagę na słowo do, co znaczy że mogą być kategorie gdzie nie ma subkategorii) co da nam łącznie około 30-50 pozycji, to ja bym ajaxa odpuścił. Chyba że z takiej listy mało kto korzysta i praktycznie nikt jej nie rozwija w tedy też można ajaxa użyć jak mamy długą listę subkategorii.

Na pewno nie używałbym ajaxa w momencie gdy taka lista/widget byłby czymś w rodzaju głównego menu nawigacyjnego które wymusza taki sposób nawigacji po stronie. W takim przypadku użycie ajaxa to zamęczenie użytkownika. Wyobraź sobie że wyświetlając kolejne pozycje menu musisz czekać za każdym razem ~1 sekundę na załadowanie się informacji. Dodatkowo dochodzi problem gdzie wordpress nie jest aplikacją SPA i jeśli przejdziesz na kolejną podstronę tracisz wcześniej zaciągnięte dane i użytkownik znów rozwijając listę czeka na wczytanie danych.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Gość Rafiki

Próbowałeś kiedyś wykonać coś takiego co opisujesz ?

To nie ma prawa zadziałać dynamicznie robiąc to ze sztuką i standardami! Co z tego ,że wylistujesz sobie wszystkie kategorie, nawet w selectach już odpowiednio ułożone i przygotowane jak javascript musi odpowiedni select ukrywać lub pokazywać. Z skąd JS sam będzie wiedział który select jest powiązany z którym ? ID kategorii będzie ulegać zmianom, będą dochodzić nowe kategorie lub niektóre zostaną usunięte i co wtedy ?.

 

Co prawda gdyby się uprzeć coś takiego nawet dałoby napisać dynamicznie ale nie jest to nadal prawdą ,że takie rozwiązanie było by szybsze... i jeszcze to cacheować ..... Gdyby chcieć robić to od "tyłu" strony można by Twój sposób wygenerować w jednym dokumencie (ba a nawet trzeba by aby to miało prawo zadziałać "dynamicznie") łącząc kod php, js i css (zmienne z php'a jako id kategorii podstawiać w funkcjach javascript) co w efekcie wyszło by kilka razy więcej linijek niż wykorzystanie ajaxa. Co więcej ajax wykorzystywany jest własnie w takich przypadkach aby odciążyć serwer! Wykonuje się jedno zapytanie z pobraniem podkategorii dla danego rodzica...taki wynik jest zwracany natychmiast - użytkownik pewnie nawet nie zauważy ,że coś się ładuje a w Twoim przypadku trzeba wylistować wszystkie kategorie i podkategorie już na samym starcie... uważasz ,że to jest bardziej wydajne ?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Tak robiłem, napisałem nie jedną wtyczkę do WordPressa. Jestem pewny że to zadziała.

 

Co do

 

Co więcej ajax wykorzystywany jest własnie w takich przypadkach aby odciążyć serwer!

Nie jest prawdą. Nie jest też w pełni kłamstwem. Stosowanie AJAXa zmniejsza zużycie transferu, zmniejsza zużycie procesora i pamięci dla niektórych żądań w specyficznych przypadkach.

Używanie ajaxa do pobierania danych które równie dobrze możesz zwrócić z resztą strony, gdzie przechodząc do kolejnych podstron robisz to samo tracisz zasób jakim jest czas i zwiększasz zużycie transferu ponieważ za każdym razem musisz pobrać de dane ekstra ajaxem.

Wygląda to mniej więcej tak:

Użytkownik wchodzi na stronę:

mojawww.pl/stronaA - lista żądań HTTP i nawiązania połączenia z serwerem:

  1. pobierze stronę stronA
  2. po document.read wykonujesz skrypt ajax który pobiera asynchronicznie dane - w tym miejscu ma żądanie typu ajax/jakisklucz

Użytkownik przechodzi w ramach tej samej sesji na:

mojawww.pl/stronaB - lista żądań HTTP i nawiązania połączenia z serwerem:

  1. pobierze stronę stronB
  2. po document.read wykonujesz skrypt ajax który pobiera asynchronicznie dane - w tym miejscu ma żądanie typu ajax/jakisklucz

Nawiązanie każdego połączenia z serwerem to są kolejne ms w wyświetleniu treści na stronie, nawiązanie połączenia z serwerem to jest dodatkowy zbędny transfer.

A można to zrobić tak:

Użytkownik wchodzi na stronę:

mojawww.pl/stronaA - lista żądań HTTP i nawiązania połączenia z serwerem:

  1. pobierze stronę stronA - w raz z danymi które wcześniej pobierałeś ajaxem

Użytkownik przechodzi w ramach tej samej sesji na:

mojawww.pl/stronaB - lista żądań HTTP i nawiązania połączenia z serwerem:

  1. pobierze stronę stronB - w raz z danymi które wcześniej pobierałeś ajaxem

 

Wykonuje się jedno zapytanie z pobraniem podkategorii dla danego rodzica...taki wynik jest zwracany natychmiast - użytkownik pewnie nawet nie zauważy ,że coś się ładuje a w Twoim przypadku trzeba wylistować wszystkie kategorie i podkategorie już na samym starcie... uważasz ,że to jest bardziej wydajne ?

W przypadku ajaxa będzie to mniej wydajne niż w moim z tego powodu że dla żądania ajaxa, aby wordpress je obsłużył musisz załadować core, a tym samym wykonać zapytania sql o ustawienia i podstawowe dane wordpressa. W moim przypadku masz 1 żądanie czyli wykonujesz te operacje 1 raz.

Jeśli rozpatrywalibyśmy tylko kwestię wydajności samego wyświetlania listy, pomijając całą resztę to bez dodania cache dla listy kategorii i subkategorii oba rozwiązania będą tak samo słabe wydajnościowo z tego powodu że musisz wykonać N zapytań SQL by pobrać kompletną listę kategorii z subkategoriami - niestety tak to jest napisane w WordPressie. Aby zmniejszyć liczbę zapytań SQL czyli przyśpieszyć czas wykonywania się skryptu stosujesz cache wrodpressa. Listę kategorii i subkategorii pobierasz jeden raz, wrzucasz do cache i pobierasz je z cache (1 zapytanie sql zamiast kilku). Dane w cache dezaktualizujesz w momencie gdy dochodzi do aktualizacji lub jakiejś zmiany w liście kategorii i subkategorii - od tego masz odpowiednie eventy, w tedy usuwasz to co miałeś w cache i generujesz raz jeszcze dane i zapisujesz ponownie w cach - ewentualnie nadpisujesz stare, wszystko zależy od implementacji. Zazwyczaj robi się tak że sprawdzasz czy dane są w cache, jeśli ich nie ma generujesz je zapisujesz do cache i sobie dale robisz z nimi co chcesz (np wyświetlasz). Jeśli dane są w cache pobierasz je i robisz z nimi co tam robiłeś w pierwszym przypadku.

 

AJAX jest fajny, zmniejsza transfer i zużycie zasobów, ale trzeba wiedzieć kiedy to robi. Stosowanie go wszędzie bo jest fajny jest tylko przykład na to że nie do końca rozumie się dane zagadnienie oraz, że robi się to nie do końca świadomie i często dlatego że można i się da.

 

PS. W dalszym ciągu uważam, że nie czytasz moich postów ze zrozumieniem lub nie czytasz ich w całości.

Edytowano przez Fizyda (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Gość Rafiki

nie twierdze ,że to nie zadziała... ale nie odpowiedziałeś jak byś to zrobił dynamicznie ? Bo ani nie potwierdziłeś ani nie zaprzeczyłaś ,że generowałbyś js/css przez php ? Ja nie stworzyłem nigdy żadnego pluginu do wordpressa bo jakoś nie potrzebowałem a tworzę strony od ponad 15 lat, wiele lat pracowałem z programistami w agencjach oraz przeglądałem wiele kursów chociaż nie jestem programistą a typowym webdevem i nigdy nie spotkałem się aby do dynamicznej listy dwóch selectów wykorzystywać takie rozwiązanie jak Twoje.

To co opisujesz było by fajne gdybyśmy mówili o maksymalnie kilku selectach ale z stałymi wartościami i gdyby te wartości ograniczały się też do co najwyżej kilku pozycji. Wtedy kod js można by napisać w kilku linijkach.

 

Czytam Ciebie dokładnie i dalej się z Tobą nie zgadzam... opisałeś niby "listę żądań HTTP" ale zapomniałeś chyba, ze w moim przypadku jak ktoś nie wybierze nic z pierwszego selecta (bo przecież nie każdy użytkownik będzie korzystał za każdym razem z tej opcji i klikał aby wybrać kategorie) to żadne dodatkowe dane nie zostaną pobrane ani załadowane! Twoje rozwiązanie przy dużej ilości kategorii wygeneruje kilkutysięczny kod javascript, wszystkie kategorie wczesniej muszą być odpytane przez mysql i co z tego ,że możesz to "skeszować" ? Po pierwsze aplikacje i moduły tworzy się tak aby były optymalne bez cache'u to bardzo ważna sprawa - cache jest tylko dodatkiem który ma przyspieszyć ładowanie niektórych elementów strony ale trzeba pamiętać też ,że nie zawsze można go wdrożyć... ba w przypadku tak dużego kodu js wczytywanie skeszowanego wyniku z pliku będzie raczej dłuższe niż wysłanie do bazy jednego zapytania i zwróceniu przez nią wyników. Można się bawić aby wczytać cache w ram serwera ale chyba tylko po aby się właśnie bawić a nie tworzyć coś użytecznego.

 

Myślisz ,że takie allegro swoje drzewo kategorii w selectach tworzy inaczej niż przez ajax ? (allegro to oczywiście tylko przykład)

 

Aby wykonać moje rozwiązanie jest potrzebne kilkanaście minut czasu, dodać kilka linijek js które będą obsługiwały ajax, i stworzyć jeden dodatkowy plik .php który będzie odpytywał bazę danych o podkategorie gdy dostanie ID rodzica. Nie trzeba tutaj ładować żadnego silnika WP...niby po co ? jeśli chcesz zaciągnąć wszystkie klasy i funkcje WP w pliku php oczywiście ,że możesz ale obędzie się też bez nich. Natomiast aby wykonać Twoje rozwiązanie trzeba napisać multum kodu i jeszcze wszystko dwa razy sprawdzić aby kliknięcie w odpowiednią wartość wywoływało odpowiedni js a ten z kolei pokazywał lub ukrywał odpowiedni select.

 

Mówisz o dodatkowym zbędnym transferze ? ale niby skąd ? przecież wszystkie odpytania do bazy odbywają się lokalnie na serwerze więc jak będzie liczony ten dodatkowy transfer ? użytkownik pobierze tylko dane wynikowe które zaprezentują mu się w przeglądarce. Natomiast w Twoim przypadku za każdym razem trzeba pobierać olbrzymi kod html/js/css a bez keszu dodatkowo odpytywać za każdym razem listę wszystkich kategorii i podkategorii.

Edytowano przez Rafiki (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Nie chce mi się rozpisywać więc krótko odniosę się do poszczególnych akapitów, trochę od końca może, ale nie ma chyba to większego znaczenia.

 

Akapit 5) Chodzi o niepotrzebny transfer niepotrzebnych nagłówków HTTP

Akapit 4) Jeśli zamierzasz tworzyć osobnego php do obsługi jednego zapytania ajaxa z pominięciem core wp musisz połączyć się z bazą danych i sam pobrać dane dotyczące kategorii/subkategorii. Omijasz w ten sposób ORM wordpressa, tym samym rezygnujesz z wbudowanych zabezpieczeń (np. przed sql injecton)

Akapit 3) Napisałem kilka postów wyżej, że ajax będzie miał zastosowanie w specyficznych przypadkach

Akapit 2) Jak wyżej, pisałem że jeśli jest to część strony rzadko używana przez użytkowników w tedy możemy mówić o optymalizacji i zmniejszeniu transferu w przypadku użycia ajaxa.

Nie rozumiem skąd pomysł na generowanie kilkutysięcznego kodu JSa. Nie wiem też czemu chcesz odczytywać jakiś duży plik i porównujesz to z odczytem z bazy danych?

 

Po pierwsze aplikacje i moduły tworzy się tak aby były optymalne bez cache'u to bardzo ważna sprawa

Nie wiem co w tym momencie powiedzieć, jeśli danych nie da się zgromadzić mniejszą ilością danych to w takim wypadku nie ma innej drogi optymalizacyjnej niż cachowanie odczytanych danych - takie coś ma sens gdy dane nie są aktualizowane "co 5 minut", w tedy raz na jakiś czas jak cache jest out of date robisz powiedzmy 5 zapytań do bazy, a w większości przypadków tylko 1 - odczytanie z cache.

 

 

Akapit 1) Jeśli w moich postach nie doczytałeś się odpowiedzi na Twoje pytanie to chyba mamy różne podejścia co do tworzenia stron internetowych. Nie mogę się oprzeć by nie zacytować fajnego fragmentu Twojej wypowiedzi:

 

.... nie jestem programistą a typowym webdevem ....

Dla Twojej informacji wszystko co kończy się na developer to programista, a to czy zaczyna się na web, android, ios, embeded czy windows to tylko określa specjalizację w danej dziedzinie, platformie lub systemie. Łatwo więc zauważyć, że sam sobie przeczysz. Z jednej strony nie jesteś programistą bo jesteś typowym programistą - parafrazując Twoje słowa.

Żeby nie było że tylko gadam, proszę bardzo bardziej techniczne wytłumaczenie (bez cache bo to inny temat) jak zrobić o co pytał autor:

  1. Pobieramy dane, do tego używamy: https://developer.wordpress.org/reference/functions/get_terms/ w pierwszej kolejności kategorie główne, później dla każdej kategorii pobieramy jej subkategorie, tą samą funkcją. Pobrane dane przechowujemy najlepiej chyba będzie w tablicy asocjacyjnej.
  2. Przekazujemy informacje o subkategoriach i przywiązaniach do kategorii do skryptu JSowego - inaczej mówiąc tablice z punktu 1 przekazujemy jako zmienną do skryptu, robimy to przy użyciu: https://codex.wordpress.org/Function_Reference/wp_localize_script
  3. Wyświetlamy w select z kategoriami

Do pełni szczęścia potrzebujemy napisać skrypt JS który:

  1. Dla wybranej kategorii w select pierwszym ustawi wartości dla selecta drugiego na podstawie wcześniej przekazanej zmiennej z danymi

Zostało tylko załączyć skrypt JS do strony i ewentualnie style CSS.

 

Całość to około 50 linijek samego kodu. Bez niepotrzebnego rejestrowania obsługi nowego żądania ajax.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Gość Rafiki

wystarczy ze zapytanie do bazy będzie przyjmować tylko jeden parametr, wyłącznie liczbę tym samym sql injection wykluczamy w 99% przypadkach...śmiejąc się z WP to niby o jakich zabezpieczeniach wordpressa mówisz hyhy ? :)) Nie będę już z Tobą się argumentował,że do rozwiązań dynamicznych używa się języka server side a nie client i ajax w tym przykładzie jako rozwiązanie nadaje się IDEALNIE i nie ważne czy to będzie wordpress, drupal, joomla czy autorski skrypt.

 

Co do Twojej teorii, na koniec kim jest webdeveloper .... developer (od słowa development) to twórca oprogramowania a nie programista albo jeszcze bardziej ogólnie mówiąc to osoba która "coś" rozwija.

web (od słowa website) tyczy się sfery www więc gdzie sobie zaprzeczam ? proszę poszukaj kim jest webdeveloper, a kim jest programista...wejdź może na portal z pracą i zobacz jak nazywają się takie stanowiska w firmach IT i czym zajmują tacy ludzie którzy pracują jako web developer albo frontend developer dowiesz się wtedy ,że to inne stanowisko niż programista.

Dobry frontendowiec nie musi być dobrym programistą i na odwrót. Po za tym HTML, CSS, grafika, czy nawet zarządzanie serwerami to języki i wiedza które nie oznaczają ,że jesteś programistą. Gdy znasz dobrze php'a i jeszcze kilka innych języków możesz nazwać się programistą, ale nie oznacza to też ,że potrafisz projektować design i go kodować.

Edytowano przez Rafiki (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Patrz tabelkę: https://pl.wikipedia.org/wiki/Webmaster

Patrz gwarę: https://pl.wikipedia.org/wiki/Programista

Pierwsza lepsza oferta o pracę Java Web Developer

 

Do Twoich obowiązków będzie należało:

  • Tworzenie innowacyjnych rozwiązań webowych
  • Usprawnianie istniejących komponentów oprogramowania
  • Współpraca w międzynarodowym środowisku

Jeśli czytasz dalej to powinieneś umieć:

  • Programować w Java oraz Javascript
  • Znać Html oraz CSS

Podkreślone oznaczają programowanie, nie projektowanie. Swoją drogą jak chcesz tworzyć oprogramowanie nie programując? To bardzo ciekawa teoria.

 

źródło: https://www.pracuj.pl/praca%2Fweb%20developer%3Bkw

 

Jeszcze przykład z FrontEnd Developer

 

Wymagania:

  • znajomość frameworka Angular2 lub innego, np. AngularJS, React.js, Backbone.js, Ember.js
  • dobra znajomość języka JavaScript (ECMAScript6)
  • wiedza z zakresu HTML5, CSS3, jQuery
  • doświadczenie z Bootstrap, preprocesorami LESS lub SASS
  • dobra znajomość standardów W3C i zagadnień związanych z browser-compatibility
  • umiejętność pracy z systemem kontroli wersji GIT
  • dobra znajomość języka angielskiego (zarówno w mowie, jak i piśmie)
  • umiejętność analitycznego myślenia
  • chęć i determinacja do rozwoju oraz dalszej nauki

Podkreślone to umiejętności z zakresu programowania.

 

PS. Frontendowiec to też programista, ale specjalizujący się we frameworkach i bibliotekach przeznaczonych na frontend, a w szczególności w języku programowania JavaScript. Dodatkowo fontend dzieli się dla Twojej wiadomości na backend i view więc masz dodatkowe pole do wymyślania sobie różnych rzeczy :D

Myślę, że nasze doświadczenie jest zupełnie odmienne i tyle w temacie.

 

Schodzisz na tematy wręcz filozoficzne zupełnie tak jakby brakowało Ci jakichkolwiek argumentów. Dziwie się, że osoba z takim doświadczeniem może tak bardzo mieszać niektóre pojęcia i tak daleko odejść od tematu.

 

Na każdą Twoją opinię przedstawiłem argumenty które ją podważały lub obalały dodatkowo przytaczałem argumenty popierające moje zdanie. Ty nic poza negowaniem tego co piszę nie napisałeś, żadnych argumentów popierających Twoje zdanie, jedyny to Twój argument to doświadczenie i że pracowałeś z programistami, dlatego znasz się na programowaniu najlepiej (po przecinku to już moja prywatna opinia na temat tego co napisałeś).

 

Gdy podałem Ci prawie że napisane wręcz rozwiązanie nagle wyskoczyłeś z filozoficznymi problemami.

 

EDIT:

 

wystarczy ze zapytanie do bazy będzie przyjmować tylko jeden parametr, wyłącznie liczbę tym samym sql injection wykluczamy w 99% przypadkach...śmiejąc się z WP to niby o jakich zabezpieczeniach wordpressa mówisz hyhy ? :))

Jeśli mówisz poważnie, podaj mi proszę linki do swoich skryptów :D

 

 

Nie będę już z Tobą się argumentował,że do rozwiązań dynamicznych używa się języka server side a nie client i ajax w tym przykładzie jako rozwiązanie nadaje się IDEALNIE i nie ważne czy to będzie wordpress, drupal, joomla czy autorski skrypt.

Czyli rozwiązania dynamiczne nie potrzebują żadnych rozwiązań po stronie serwera :D Haha, czyli dane bierzesz z powietrza czy skąd?

Edytowano przez Fizyda (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Gość Rafiki

Słyszałeś o czymś takim jak filtrowanie zmiennych albo definiowanie typu zmiennej ? to chyba podstawy programowania.

Ja od samego początku twierdze ,że NIE JESTEM programistą. I masz racje to żaden dowód ,że większość programistów wykorzystało by tutaj ajax.... tak samo jak moduł do którego podałem link w swoim pierwszym poście który posiada takie dwupoziomowe menu kategorii w selectcie i oparte jest o AJAX, zacytuje:

"2-level AJAX chained select options".

 

Czyli rozwiązania dynamiczne nie potrzebują żadnych rozwiązań po stronie serwera :D Haha, czyli dane bierzesz z powietrza czy skąd?

Czy Ty dobrze zrozumiałeś chociaż to co napisałem ? Od samego początku twierdze ,ze trzeba to zrobić dynamicznie przez php i javascript (ajax) ... ty od poczatku mówisz o ukrywaniu gotowych selectów przez css albo js...n/c. To Ty próbujesz zrobić to przez język client side i od początku chce Ci wytłumaczyć ,że to nie ma większego sensu. Filozofowanie zacząłeś od moment gdy stwierdziłeś ze web/frontdeveloper a programista to to samo ale dalej nie rozumiesz chyba czym jest język typu server-side a client-side.

Nie czytasz ze zrozumieniem a po drugie sam udowodniłeś ,że programista a webdevveloper to dwie różne rzeczy.

Kodowanie a programowanie to zupełnie coś innego, html, css jest językiem KODOWANIA a nie PROGRAMOWANIA. Widziałeś w tych wymaganiach których wypisałeś gdzieś umiejętność programowania strukturalnego w jakimś języku typu php, python, perl itp, programowania obiektowego i wzorców projektowych, umiejętnośći logicznego myślenia i analizowania, znajomośći baz danych ? Javascript fakt zalicza się już do typowych języków programowania ale jego znajomość nie określa Cię od razu programistą. Miałeś porównać stanowisko programisty jakiegoś języka z frontendowcem a nie wypisać czym sie zajmuje tylko ten drugi :).

 

PS.

7tIaIbB.jpg

 

Edytowano przez Rafiki (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Ehh Panowie rozgadaliście się :D

 

Chyba moja wiedza i umiejętności są zbyt małe, żeby to ogarnąć. :(

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Jak coś możesz do mnie pisać na pw. Mogę to zrobić jak będziesz chciał, albo przy pomocy ajaxa, albo nie, albo i tak i tak - ustawiane w panelu. Osobiście zrobiłbym to przy pomocy wtyczki z krótkim kodem do wstawienia w szablonie, przy pomocy shortcode lub widget, ale jeśli chcesz jeszcze inaczej, np. na sztywno w szablonie żaden problem. Moim zdaniem wtyczka jest bardziej przenośna i przy zmianie szablonu łatwo będzie dodać takie filtrowanie ponownie.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się


×