ďťż
Podstrony
|
telcocafeStworzył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'); ?> |
|||
Sitedesign by AltusUmbrae. |