Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][JavaScript][MYSQL]wiele stron w jednym div
Forum PHP.pl > Forum > Przedszkole
altar
witam,

chcialbym robic cos takiego ze na stronie glownej (index.php) mam div o id="menu" i ponizej div o id="main".
w zaleznosci od wybranej opcji w menu w div'ie id="main" ma pojawiac sie inna zawartosc.

w tej chwili zrobilem to tak ze poprostu javascript ukrywa niepotrzebne bloki a pokazuje tylko jeden ktory wlasnie uzytkownik wybral, uzylem do tego ...style.display="block" i "none"

moje pytanie brzmi czy w takiej sytuacji, mimo ze 3 bloki sa ukryte a pokazany tylko jeden, to czy skrypty php ktore sa umieszczone w tych trzech ukrytych blokach sie wykonuja czy nie?

a jesli sie wykonuja to jak rozwiazac ten problem? czyli jak zrobic zeby po kliknieciu w menu wykonal sie tylko jeden skrypt czy tez czesc kodu ze skryptu i wyniki umiescil w div'ie strony glownej?
Methestel
Skrypty php przede wszystkim generują kod żródłowy strony. To czy dany element jest widoczny czy nie w żaden sposób nie wpływa na przebieg wykonania skryptu php.

Masz do wyboru przynajmniej 2 opcje:

1) Wygenerować wszystkie div-y. Tylko jeden z nich nich ma ustawione "style.display = 'block'". Reszta "style.display = 'none'". Potem pod linki podpiąć skrypt który będzie najpierw ustawiał wszędzie 'none' a potem tylko w określonym div-ie "block". Z tego co piszesz już to zaimplementowałeś.

2) Pobierać zawartość strony AJAX-owo. Rozwiązanie bardziej skomplikowane i wymagające więcej kombinowania ale masz pewność że to co wysłałeś do użytkownika zostanie mu wyświetlone (czytaj: nie ładujesz niepotrzebnie rzeczy których użytkownik może w ogóle nie obejrzeć) a wszystko to odbywa się bez przeładowania strony.

Jeśli divy nie mają w sobie dużo treści polecam to pierwsze rozwiązanie czyli zostawić tak jak masz teraz.

Jeśli jednak bardzo Ci zależy żeby ładowana była tylko zawartość diva a strona nie przeładowywała się to napisz. Pomożemy Ci wystartować z AJAXem (zakładam że go nie znasz, ale możliwe że znasz go lepiej niż ja).

Bym zapomniał, jest jeszcze trzecie rozwiązanie: ramki frame albo iframe. Więcej na ten temat nie pisze bo nie polecam tego rozwiązania.
altar
Cytat(Methestel @ 30.06.2008, 21:24:56 ) *
Masz do wyboru przynajmniej 2 opcje:

1) Wygenerować wszystkie div-y. Tylko jeden z nich nich ma ustawione "style.display = 'block'". Reszta "style.display = 'none'". Potem pod linki podpiąć skrypt który będzie najpierw ustawiał wszędzie 'none' a potem tylko w określonym div-ie "block". Z tego co piszesz już to zaimplementowałeś.


tak, tak wlasnie to napisalem i w sumie dziala przyzwoicie, ale tak jak powiedziales rozumiem ze wszystkie skrypty php, te w ukrytych divach tez sie wykonuja, o ile w tej aplikacji to nie jest problem to pewnie w przyszlosci w wiekszych aplikacjach to bedzie problem dlatego chcialbym nauczyc sie napisac to jak nalezy.

Cytat
2) Pobierać zawartość strony AJAX-owo. Rozwiązanie bardziej skomplikowane i wymagające więcej kombinowania ale masz pewność że to co wysłałeś do użytkownika zostanie mu wyświetlone (czytaj: nie ładujesz niepotrzebnie rzeczy których użytkownik może w ogóle nie obejrzeć) a wszystko to odbywa się bez przeładowania strony.

ajaxa ucze sie od kilku dni i wiem ze to jest dobre rozwiazanie tego problemu, ale z roznych przyczyn nie chce uzyc ajaxa w tej aplikacji (jeszcze)

Cytat
Bym zapomniał, jest jeszcze trzecie rozwiązanie: ramki frame albo iframe. Więcej na ten temat nie pisze bo nie polecam tego rozwiązania.

ramki tez odpadaja bo to jest dalekie od standardow, tak?

tak sobie mysle ze musi byc jakis sposob na wykonanie czesci kodu ze skryptu php umieszczonego w sekcjach switch.
i tutaj chyba to byloby najlepsze wyjscie, zeby po kliknieciu w dany link wykonala sie odpowiednia sekcja switch w zewnetrznym pliku php i wyslala wyniki do diva w index.php.
tylko jak to zrobic?
Qleer
Cytat(altar @ 30.06.2008, 21:59:01 ) *
tak sobie mysle ze musi byc jakis sposob na wykonanie czesci kodu ze skryptu php umieszczonego w sekcjach switch.
i tutaj chyba to byloby najlepsze wyjscie, zeby po kliknieciu w dany link wykonala sie odpowiednia sekcja switch w zewnetrznym pliku php i wyslala wyniki do diva w index.php.
tylko jak to zrobic?


To nic nie da - musisz w wypadku switch użyć ajax smile.gif nie ma innego wyjścia jak użycie ajax lub wczytanie wszystkiego i ustawienia stylu display na none.

Pozdrawiam.
Methestel
Bez wykorzystania technik AJAXowych nie masz jak wysłać jedynie zawartości diva. Musisz przeładować stronę (czyli wysłać całą jej zawartość od nowa). To jak tą zawartość budujesz to już twoja sprawa. Możesz i powinieneś wyizolować elementy stałe strony takie jak nagłówek, stopka i menu i dążyć do tego aby zarządzanie tymi elementami polegało na wywołaniu jak najmniejszej ilości poleceń. Do tej całej otoczki, w zależności od tego jakie akcje wykonał użytkownik możesz podłączać różne treści.

Tutaj już zahaczamy o szablony które mam nadzieje stosujesz. Jeśli nie, powinieneś czym prędzej zacząć. Oprócz tego że ułatwiają one znacznie prace z kodem dzieki rozdzieleniu kodu php od html bardzo często posiadają też mechanizmy cache-owania wyświetlanych zawartości.

Jeśli możesz swoją stronę podzielić na nagłówek, content i stopke to powinno to wyglądać tak (przykład ze Smarty, najpopularniejszego choć nie najlepszego systemu szablonów):

index.html
  1. {include file="head.html"}
  2. Zawartość strony
  3.  
  4. {include file="footer.html"}
  5. </body></html>



footer.html
  1. <div class="footer">Stopka</div>


header.html
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  4.  
  5. <title>Title</title>
  6. <!-- Dowolne meta tagi, cssy, skrypty -->
  7. </head>


A wyświetlenie całej zawartości dokonujemy przez wywołanie w skrypcie php $smarty->display('index.html'); gdzie $smarty to obiekt klasy Smarty o której szczegółowe informacje znajdziesz tutaj.

Nie trudno się domyśleć że wynikiem tego będzie:

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  4.  
  5. <head>
  6. <title>Title</title>
  7. <!-- Dowolne meta tagi, cssy, skrypty -->
  8. </head>
  9. Zawartość strony
  10.  
  11. <div class="footer">Stopka</div>
  12. </body></html>


Co prawda tak jak wcześniej pisałem wysyłać musimy całą stronę aby zmienić diva ale teraz zmieniamy jedynie zawartość pliku index.html. Nagłówek i stopka również są wysyłane ale nie obchodzi to nas. Wiemy tylko tyle że je wyświetlamy i że te elementy są takie same dla wszystkich naszych stron. Jeśli zechcemy je zmienić, modyfikujemy jedynie plik footer.html albo header.html i na wszystkich naszych stronach zmiany będa wprowadzone. Zawsze należy dążyć do tego abyś nigdy nie przyłapał się do kopiowania części kodu i wklejania go w inne miejsce.

No i na koniec musisz zrozumieć jedną fundamentalną rzecz: skrypt php wykonuje się po stronie servera (gdzieś w zimnej serverowni, w gąszczu mrugających światełek i poplątanych kabli, zdala od twojego domu najczęściej). Kliknięcie na link (na przykład) powoduje wysłanie do servera rządania. Server je analizuje i wysyła zupełnie nową stronę(w całości). Raz wysłana strona nie może już zostac modyfikowana przez cokolwiek co znajduje się na serverze, w tym przedewszystkim skrypt php. Może zostać jedynie wysłane do servera rządanie otrzymania innej, nowej strony i wtedy server ją tworzy i wysyła. Stara strona zostaje zastąpiona w całości przez nową.

Javascript z koleii działa po stronie klienta (komputer oglądającego stronę) i dzięki temu możesz dość dowolnie modyfikowac całą zawartość strony za jego pomocą. Dopiero połączenie mechanizmów działających po stronie klienta i tych po stronie servera daje to czym wszyscy ostatnio się tak zachwycają, czyli możliwość dynamicznego budowania stron www bez przeładowania szumnie nazywaną AJAX-em. Pamiętam że kiedy pierwszy raz zetknełem się z tymi technikami chciałem wrócić do wszystkich poprzednich skryptów jakie napisałem i zaimplementowac je tam. Uwierz mi, to tylko chwilowe zauroczenie. W większości przypadków lepiej wychodzi się na normalnym programowaniu stron, zwłaszcza jeśli na wykonanie zlecenia masz określony czas a klient nie zaznaczył że ma się ładować bez przeładowania.
altar
Cytat(Methestel @ 1.07.2008, 00:20:21 ) *
Tutaj już zahaczamy o szablony które mam nadzieje stosujesz. Jeśli nie, powinieneś czym prędzej zacząć. Oprócz tego że ułatwiają one znacznie prace z kodem dzieki rozdzieleniu kodu php od html bardzo często posiadają też mechanizmy cache-owania wyświetlanych zawartości.


ok, rozumiem, dzieki za odpowiedzi, mam jeszcze jedno pytanie. dyskusja na temat ktory z systemow szablonow jest najlepszy moze byc dluga, dlatego zapytam ktorego systemu uzywaja najczesciej profesjonalisci do budowy duzych aplikacji?
i czy ktos zna dobre strony po polsku o smarty?

Pozdrawiam, Robert
Qleer
Stare dobre smarty - sam z niego korzystam chodź jak już uświadomili mnie użytkownicy tego forum jest to jeden z najstarszych, najlepszych ale i najwolniejszych skryptów do generowania szablonów.

Nie wiem jaki silnik Tobie polecić ponieważ to zależy od projektu strony a także jej zawartości. Spis silników szablonów razem z ich możliwościami znajdziesz na Wikipedii: http://en.wikipedia.org/wiki/Template_engine_(web) .
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.