ďťż

[PHP] podstrony w stronie

       

Podstrony


telcocafe

Stworzyłem na głównej stronie php "select menu" i oto on:

<script type="text/javascript"> function goToPage( id ) { var node = document.getElementById( id ); if( node && node.tagName == "SELECT" ) { window.location.href = node.options[node.selectedIndex].value; } } </script>

<select id="select1" style="width:400px" onchange="goToPage('select1')"> <option value="jakis odsyłacz">Link do podstrony 1</option> <option value="jakis odsyłacz">Link do podstrony 2</option> <option value="jakis odsyłacz">Link do podstrony 3</option> </select>

Następnie co zrobić aby strona główna php wczytywała wybraną podstronę php po kliknięciu w odsyłacz, czyli aby dana podstrona nakładała się na główną stronę ?
Użytkownik win edytował ten post 19 sierpień 2008, 18:53


Ten kod działa tak, że jeżeli ktoś wybierze dany option to przenosi go na strone w value. Jeżeli chcesz żeby działało przenoszenie na podstrone po kliknieciu na option to możesz zrobić coś takiego:
<option value="jakis odsyłacz" onclick="document.location.href= this.value">Link do podstrony 1</option>
lub takiego:
<option value="jakis odsyłacz"><a href="jakis odsyłacz">Link do podstrony 1</a></option>
Użytkownik kokoss15 edytował ten post 19 sierpień 2008, 18:53
"select menu" jest dobry, tylko mi chodzi oto, aby strona główna została wraz z "selectem" i zaraz za "selectem" wczytana podstrona.
Użytkownik win edytował ten post 19 sierpień 2008, 19:04
Po co sobie tak komplikować życie? Pokaż cały kod, bo z tego niewiele można zrozumieć...
BTW Tagi Ci się pomyliły.

// Dodano
Już mniej więcej rozumiem. Może Ciebie zainteresuje AJAX?




Może Ciebie zainteresuje AJAX?

Jest mi w zupełności obojętnie :D

Najbardziej to zależy mi na znalezieniu właściwego rozwiązania co wpisać na stronie między

<?

?>

możesz to zrobić tak:
jako SELECT dajesz np.:
<select> <option value="index.php?page=strona1" onclick="document.location.href=this.value">Link do podstrony 1</option> <option value="index.php?page=strona2" onclick="document.location.href=this.value">Link do podstrony 2</option> <option value="index.php?page=strona3" onclick="document.location.href=this.value">Link do podstrony 2</option> </select> zakładam że źródła podstron mają nazwy plików: strona1.php, strona2.php, strona3.php
I w pliku index.php umieszczas:
<html> <head>...</head> <body> ... (tutaj wsadzasz ten SELECT) <? if($page) include($page.'.php'); ?> ... </body> </html>Jest to chyba jeden z najprostszych sposobów. Jeśli nie chcesz przeładowywać całej strony to sięgnij po AJAX



Może Ciebie zainteresuje AJAX?
Jest mi w zupełności obojętnie :D

Chyba takie ogólniki koledze raczej nie pomogą, bo się za bardzo nie zna na tych technologiach.
A teraz do rzeczy:
Są takie rozwiązania:
1. Wszystkie podstrony od razu ładujemy do pliku index.php i umieszczamy w divach, które ukrywamy (style="display:none") z wyjątkiem strony głównej (style="display:block").
Na początku strony wrzucamy taki skrypt:<script type="text/javascript" language="Javascript"> function Pokaz(nazwa) { document.getElementById(nazwa).style.display="block"; } function Ukryj(nazwa) { document.getElementById(nazwa).style.display="none"; } </script>
A potem w linku piszemy tak, aby JS ukrywał wszystkie strony oprócz tej, która ma byc wyświetlona czyli np. dla menu 3-pozycyjnego:<a href="java script:Pokaz(\'usr\'); Ukryj(\'file\'); Ukryj(\'fold\')">Dodaj użytkownika</a> <a href="java script:Pokaz(\'fold\'); Ukryj(\'file\'); Ukryj(\'usr\')">Dodaj folder</a> <a href="java script:Pokaz(\'file\'); Ukryj(\'fold\'); Ukryj(\'usr\')">Dodaj plik</a>
oczywiście usr,file,fold to wartości id poszczególnych bloków div z treścią
Wszystkie bloki div umieszczamy w miejscu, w którym mają się wyświetlić.
2. Drugą metodą, ale bardziej zawiłą jest AJAX, ale w tym przypadku trzeba się poprostu nauczyć w nim programować
3. Ostatnią, nie zalecaną metodą są ramki. (polecam poczytać na kurs html boo) Na ramkach definiujemy bloki menu, elementów stałych (bannery, nagłówki itp.) oraz element z treścią. Potem jako link dajmey:<a href="strona.php" target="nazwa_ramki">Strona</a>, gdze nazwa ramki to nazwa nadana ramce z treścią
Nie polecam jednak używania ramek, gdyż to metoda przestarzała i nie zalecana w najnowszych specyfikacjach


możesz to zrobić tak:
jako SELECT dajesz np.:
<select> <option value="index.php?page=strona1" onclick="document.location.href=this.value">Link do podstrony 1</option> <option value="index.php?page=strona2" onclick="document.location.href=this.value">Link do podstrony 2</option> <option value="index.php?page=strona3" onclick="document.location.href=this.value">Link do podstrony 2</option> </select> zakładam że źródła podstron mają nazwy plików: strona1.php, strona2.php, strona3.php
I w pliku index.php umieszczas:
<html> <head>...</head> <body> ... (tutaj wsadzasz ten SELECT) <? if($page) include($page.'.php'); ?> ... </body> </html>Jest to chyba jeden z najprostszych sposobów. Jeśli nie chcesz przeładowywać całej strony to sięgnij po AJAX


Wybrałem tą opcję, ale coś tu nie pasuje :(

w jednym folderze mam index.php, strona1.php, strona2.php, strona3.php i w index.php:

<select>
<option value="index.php?page=strona1" onclick="document.location.href=this.value">Link do podstrony 1</option>
<option value="index.php?page=strona2" onclick="document.location.href=this.value">Link do podstrony 2</option>
<option value="index.php?page=strona3" onclick="document.location.href=this.value">Link do podstrony 3</option>
</select>

<?
if($page) include($page.'.php');
?>

Jednak w ogóle nie działa łącze, czyli tak jak jest początkowo na index.php, tak nic dalej po kliknięciu się nie zmienia :(
Użytkownik win edytował ten post 20 sierpień 2008, 13:41
Zamiast:if($page) include($page.'.php');powinno być:if(!empty($_GET['page'])) include(preg_replace('/[^0-9a-z\.\-_]/si', '', $_GET['page']).'.php');register_globals u Ciebie, w przeciwieństwie do konfiguracji Logina, jest wyłączone i tak powinno pozostać.
Użytkownik andrzej_aa edytował ten post 20 sierpień 2008, 18:34
Dalej tu czegoś brakuje, bo niestety nic się nie zmieniło, i na stronie głównej nic się nie pojawia. Może to w select czegoś brakuje bo w ogóle nie ma odsyłacza :mellow:

<select>
<option value="index.php?page=strona1" onclick="document.location.href=this.value">Link do podstrony 1</option>
<option value="index.php?page=strona2" onclick="document.location.href=this.value">Link do podstrony 2</option>
<option value="index.php?page=strona3" onclick="document.location.href=this.value">Link do podstrony 3</option>
</select>

<?
if(!empty($_GET['page'])) include(preg_replace('/[^0-9a-z\.\-_]/si', '', $_GET['page']).'.php');
?>
Użytkownik win edytował ten post 20 sierpień 2008, 21:24
O dziwo u mnie działa; choć optymalnie powinno być:<select onchange="document.location = 'index.php?page=' + this.value;"> <option value="strona1">Link do podstrony 1</option> <option value="strona2">Link do podstrony 2</option> <option value="strona3">Link do podstrony 3</option> </select> <?php if(!empty($_GET['page'])) include(preg_replace('/[^0-9a-z\.\-_]/si', '', $_GET['page']).'.php'); ?>BTW Co masz w plikach strona1.php, strona2.php itd.? Ponieważ powinny się mimo wszystko wyświetlić...

Teraz działa :clap:, ale nie do końca

Bardzo dobrze, że odrazu jest wyświetlona strona1.php, ale niestety gdy się kliknie w strona2.php i później z powrotem do strona1.php to się już ona nie wyświetla :(

A czy istnieje jeszcze opcja dodatkowa, aby w select po kliknięciu w wybraną stronę (np strona3.php) została ona w ramce, czyli żeby było widać co się wybrało, gdyż zawsze wraca do stanu pierwotnego i w ramce widoczne jest "Link do podstrony1" mimo iż jest się na stronie3.php ;)
Użytkownik win edytował ten post 20 sierpień 2008, 23:58
Użyj atrybutu selected="selected".

to niestety nic nie pomogłu, bez zmian

Więc za rączkę:<?php $page = isset($_GET['page']) ? preg_replace('/[^0-9a-z\.\-_]/si', '', $_GET['page']) : ''; $tablica = array( 'strona1' => 'Link do podstrony 1', 'strona2' => 'Link do podstrony 2', 'strona3' => 'Link do podstrony 3' ); echo '<select onchange="document.location = \'index.php?page=\' + this.value;">'; foreach ($tablica as $key => $value) echo '<option value="'.$key.'"'.($key == $page ? ' selected="selected"' : '').'>'.$value.'</option>'; echo '</select>'; if ($page) include($page.'.php'); ?>
// Edytowano
@niżej:
Parę błędów się wkradło, bo pisałem z pamięci, ale tak trudno prześledzić kod, albo przynajmniej kod błędu?
Użytkownik andrzej_aa edytował ten post 21 sierpień 2008, 16:08
Chyba coś jednak robie źle, bo dalej jest coś nie tak, gdyż teraz daje mi taką informację:

Parse error: syntax error, unexpected T_STRING, expecting ',' or ';' in /page/index.php on line 14

Daj kod.
Powstawiałeś na końcach linii średniki?

Teraz jest wszystko dobrze ;)
Cóż jakby na to nie patrzeć w php jest całkowicie zielony :oops:
Znacznie lepiej idzie mi w html, ale tak wyszło, że musiałem mieć stronę w php ...

Ehh

Jeszcze jedna, ostatnia potrzeba (w tym temacie ;) )

Jak zrobić aby odrazu wyświetliła się pierwsza podstrona tak jak jeszcze we wcześniejszej wersji ?
Użytkownik win edytował ten post 21 sierpień 2008, 19:12
Zamień pierwszą linię na $page = isset($_GET['page']) ? preg_replace('/[^0-9a-z\.\-_]/si', '', $_GET['page']) : 'strona1';

Niestety to nie była ostatnia potrzeba :unsure:

Chciałbym jeden z linków, powiedzmy "strona2" wyróżnić od innych
linków określonym kolorem na przykład "green" lub "008000" i nie
za bardzo wiem co tu począć :(

style="color:green"
?

wszystko ładnie pięknie, ale gdzie ja mam to // style="color:green" // umieścić :unsure:

gdzieś tu ??
'strona2' => 'Link do podstrony 2',

Chociażby tak:<?php $page = isset($_GET['page']) ? preg_replace('/[^0-9a-z\.\-_]/si', '', $_GET['page']) : ''; $tablica = array( 'strona1' => array(' style="color:green"', 'Link do podstrony 1'), 'strona2' => array('', 'Link do podstrony 2') ); echo '<select onchange="document.location = \'index.php?page=\' + this.value;">'; foreach ($tablica as $key => $value) echo '<option value="'.$key.'"'.($key == $page ? ' selected="selected"' : '').$value[0].'>'.$value[1].'</option>' ; echo '</select>'; if ($page) include($page.'.php'); ?>

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.