Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Jak zrobić na stronie dynamiczne przełączanie sie zawartości?
Forum PHP.pl > Forum > Przedszkole
Madras
Witam,
W PHP jestem nowicjuszem, więc proszę o wyrozumiałość. Piszę stronę od zera.
W jaki sposób zrobić na stronie zmianę treści poprzez kliknięcie na odpowiednią pozycję w menu? Chodzi o to, że mam stronę główną index.php z menu po lewo i treścią na prawo od menu. Do ładowania treści chcę użyć funkcji include (nie wiem czy będzie ona odpowiednia do tego zadania). Chcę wyznaczyć zmienną ścieżki do include. Po uruchomieniu strony pierwszy raz, domyślnie wartość tej zmiennej ma być "news.html". Po kliknięciu w menu na np galeria, wartość zmiennej ma się zmienić na "gallery.html" i strona ma się odświeżyć z nową zawartością itd.
Za wszelką pomoc będę bardzo wdzięczny. Pozdrawiam.
Ellington
Ustaw w menu adresy:

Kod
<a href="index.php?id=gallery">Galeria</a>


W index.php odbierz zmienną z adresu:

Kod
<?php $id = $_GET['id']; ?>


i przypisz do include'a:

Kod
<?php include($id.'.html'); ?>


To nie jest bezpieczne wyjście, ale obrazujące problem. Poszukaj w sieci i poczytaj, jak się zabezpieczać w takich sytuacjach przed nieautoryzowanym dostępem do plików.
Madras
Wielkie dzięki! ;-)
Właśnie coś takiego chciałem otrzymać. A co do dostępu do "wrażliwych" plików to w Apache da się kontrolować za pomocą .htaccess. Mam jeszcze jedno pytanko jak zrobić by była podświetlona aktywna opcja w menu?
EDIT:
Jeszcze jedno banalne pytanie ;p Co zrobić, żeby przy pierwszym uruchomieniu automatycznie ładowało się news?
Rysh
Ja proponuje zamiast:
  1. <?php include($id.'.html'); ?>

Użyć switch.

Co do drugiego pytania, na początku musisz sprawdzić czy istnieje zmienna $_GET['id'], jeśli jej brak includujesz news.php.

W funkcji switch używasz default.
frytek92
Cytat
Użyć switch.


Czy ja wiem myślę ze to jest bez większego znaczenia której funkcji się używa switch jedynie ładniej wygląda a IF jest wygodniejsza wiec jeżeli ci wygodniej to spokojnie użyj IF do tego dodam że Switch jest trochę wolniejsza od IF winksmiley.jpg

Apropo twojego tematu niekoniecznie musisz sprawdzać czy $_GET['id'] istnieje wystarczy że na poczatku zdefiniujesz $id np :

Kod
$id = '1';


Dzieki czemu potem każdy kto da nieistniejąca liczbę w $_GET['id'] wyświetli się główna strona a nie błąd ze strona nie istnieje winksmiley.jpg
Ellington
Jeżeli nie sprawdzisz, czy istnieje $_GET przed przypisaniem go do zmiennej, to w przypadku, gdy $_GETa nie będzie, php wyrzuci notyfikację, że zmienna z której chcesz przypisać nie istnieje - dobrą praktyką jest unikanie wszelkich uwag PHP, nawet tych niegroźnych, więc myślę, że warto poświęcić jedną linię kodu, żeby się upewnić.
Rysh
Prawdę mówiąc nie rozumiem tego co piszesz:
  1. <?php
  2. $id = 1;
  3. $id = $_GET['id'];
  4. ?>

Co Ci da że na początku zadeklarujesz że $id = 1 skoro za chwilę i tak ją nadpiszesz?
Madras
Ok, problem z automatycznym news rozwiązany ;-)
  1. <?php if($id=='') $id='news'; ?>

Pozostaje jeszcze: jak zrobić, żeby aktywna opcja w menu była wyróżniona innym kolorem.
mortus
  1. <a href="index.php?id=news" <?php if($_GET['id'] == 'news') echo 'class="active"'; ?>>Newsy</a>
Jeśli wcześniej przepisujesz $_GET['id'] do jakiejś zmiennej, to w warunku if podajesz zamiast $_GET['id'] właśnie tą zmienną. No i tworzysz sobie w css klasę
  1. .active {
  2. color: #ccc;
  3. }
Oczywiście kolor może być inny.
Madras
Dzięęki! ;-) Już wszystko działa jak powinno!

Hah, zamęczę was tymi pytaniami. Napisałem funkcję do przełączania podświetlenia, żebym nie musiał niczego kopiować.
  1. function menu_item($text,$objective)
  2. {
  3. if($id==$objective) return '<font color="#FF0000">'.$text.'</font>';
  4. else return '<a href="index.php?id='.$objective.'" class="active">'.$text.'</a>';
  5. }

Ale jest jakiś problem z return echo. Jak inaczej można to napisać?
mortus
Nie rozumiem Twoich intencji, ale taka funkcja nie ma prawa zadziałać, bo nie ma nigdzie zdefiniowanej zmiennej $id. Natomiast gdyby ta zmienna $id była, to aby wydrukować wynik tej funkcji należałoby napisać
  1. echo menu_item('jakiś tekst', 'identyfikator');
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.