Az alábbi leírásnak már van egy előzménye, melyet „php switch get I.” címmel megtaláltok a honlapon. Mivel e leírás annak továbbfejlesztett – és módszerben is újat adó – változata, a bevezető szöveg nagy része gyakorlatilag ugyanolyan lesz.
Magát az ötletet és a kódot TLoF barátomtól kaptam, ezúton is nagy köszönet illeti!
A 2 módszer közötti különbség: elég nagy, ha azt vesszük hogy teljesen más a kód. :) Ez viszont szerintem mellékes, ami fontosabb, hogy a második megoldás sokkal kényelmesebb! Az elsőnél részben ugye még az volt a menet, hogy amint új lappal bővült a lap, 3 új sorral kellett kipótolni a kezdő index.php-t (case, inluce, break). Ez nemcsak hogy plusz munkát jelentett, de a kezdőlap méretét is folyamatosan növelte.
Ennek az új megoldásnak köszönhetően viszont csak egyszer kell az index.php-be illeszteni a kódot, a további lapokat elég ha egy általunk definiált alkönyvtárba tesszük be. A többit a kód elvégzi, nekünk csak linkelni kell a lapokra :) Most pedig jöjjön a tényleges leírás!
Vegyünk egy példát:
Van egy honlapod, 1 kezdőlappal és 20 aloldallal együtt. A fájlok jelenleg HTML kiterjesztéssel vannak fent a szerveren, és mindegyik HTML fájlok tartalmazza a komplett grafikát.
Úgy döntesz, az egyik képet ki szeretnéd cserélni a fejlécben, de ezzel megbontod az eddigi arányokat is (amit pl. táblázatokkal oldottál meg), mit tudsz csinálni? Túl sok mindent nem, kénytelen vagy 21x módosítani ugyanazt a képet+táblázatot.
Ugye nem túl kényelmes …?
Egy másik lehetőség, hogy a lapodat frame-ekkel oldod meg, a fejléc, menü stb.. szóval az állandó elemek frame-ekbe kerülnek, így tulajdonképpen kevés munkával könnyen lehet frissíteni az egész lap kinézetét.
Mi van akkor, ha neked vmiért nem tetszik a frame-s megoldás, vagy vmi oknál fogva csak nem alkalmazható az adott szituban? Bőven elképzelhető a szitu, én pl. nagyon nem szeretem a frame-s lapokat (bár elvétve látni 1-1 egész jól sikerültet)
A 3. megoldás a PHP használata. Nem kell megijedni tőle, egyeltalán nem vészes a dolog, nem kell programozni tudni vagy hosszú kódokat böngészni, elég ha a copy-paste-t tudod kezelni :)
Először is hozz létre egy index.php nevű fájlt, ez lesz az alapértelmezetten megjelenő fájlod a könyvtárban, és ugyanakkor ez lesz a sablon/theme/skin (ki hogy hívja) is, ami a grafikát tartalmazza. A többi lapod (20db) tartalmát ebbe fogod úgymond beleolvasztani.
Miután létrehoztad az index.php-t, nyisd meg egy webszerkesztő programban (pl. Dreamweaver, Frontpage stb..), és készítsd el ugyanúgy, ahogy azt anno a index.html fájloddal is tetted. Csináld meg a fejrészt, a menüket, a lábrészt stb…, de azt a területet, ahova anno a kezdőlap tartalmát alkotó szöveget (köszöntés, bevezetés stb..) tetted, hagyd üresen. Ide fog jönni a PHP kód.
<?php $_GET['id'] = str_replace('../', '',$_GET['id'] ); if (isset($_GET['id']) and $_GET['id'] != '') { if (is_file("modulok/". $_GET["id"] . ".php")) { include("modulok/". $_GET["id"] . ".php"); } else { include("modulok/error.php"); } } else { include ("modulok/kezdolap.php"); } ?> |
Ezt úgy ahogy van, másold be az index.php fájl azon területére, ahol majd szeretnéd, hogy megjelenjen a tartalom.
A kód tulajdonképpen csak annyit csinál, hogy ha a modulok alkönyvtárban talál olyan fájlt, aminek neve megegyezik az ID értékével+.php kiterjesztéssel, akkor beilleszti az index.php-ba a kód helyére. Az ID-t meg a linkekben adjuk meg. Nézzünk egy példát:
van egy főkönyvtárban található index.php, van egy modulok könyvtár, és a könyvtárban vannak php oldalak, melyek neve: oldal1.php, oldal2.php, oldal3.php és oldal4.php. Ha a linket az alábbi módon adjuk meg:
link az oldal2-re
Az index.php-ban lévő kód az ID értékéhez (ami az oldal2) hozzáadja a .php kiterjesztést, majd az ezzel megegyező nevű fájlt betölti a modulok könyvtárból (ez lesz az oldal2.php). Ha nincs a feltételnek eleget tevő fájl, akkor az error.php-t jeleníti meg.
Online demo
A script működését illusztrálandó elkészítettem egy nagyon egyszerű „honlapot”, ahol ki lehet próbálni a működését: PHP Switch Get II demo
Maga a demo honlap is letölthető innen: www.tutorial.hu -> letoltes -> script.sources
Tartalomjegyzék
Megjegyzések
- A file kiterjesztése, ahova ezt a kódot beszúrod, mindig PHP-nak kell lennie.
- Amely fájlokat behúzza, azoknak is PHP kiterjesztést ki kell adni.
Clean URL
Szintén fórumon vetődött fel a kérdés: Hogy lehet clean URL-eket gyártani ezzel a módszerrel? Pl. ha a
http://www.tutorial.hu/index.php?id=referencia helyett mondjuk a http://www.tuorial.hu/referencia.html címet szeretnénk használni?
Erre írta meg BlackY válaszként azt, hogy egy .htaccess fájlba fel kell venni az alábbi tartalmat:
RewriteEngine On RewriteRule ^(.+?)\.html\??(.*) index.php?id=$1&$2
Kiegészítés
A fórumon utólagosan felvetett kérdés volt, mi a helyzet akkor, ha a behuzandó fájlok nem egy alkönyvtárban helyezkednek el, hanem pl. (ha a fenti mintához tartom magam) egy modulok/pstutorialok meg egy modulok/htmltutorialok (vagy akár több ilyen könyvtárban) nevű alkönyvtárban.
A könyvtárszerkezet pl. így néz ki:
-modulok/
———pstutorialok/
———————tutorial01.php
———htmltutorialok/
Ez esetben a linket így kell majd megadni:
index.php?id=pstutorialok/tutorial01
Szerző: Harder
Kódot írta: TLoF (www.kepregeny.net)
Mi a teendő akkor, ha alkönyvtárban helyezkednek el a fájlok és még CleanURLtis akarok használni?
Tehát: index.php?id=pstutorialok/tutorial01 –> pstutorialok/tutorial01.html
Külön-külön működnek a fent leírtak, egyszerre viszont nem. Gondolom a .htaccessben kellen módosítani a RewriteRule részt.
Köszönöm a cikket!
Nagyon nagyon hasznos, alkalmaztam is!
Én ezt úgy szoktam kikerülni – mármint hogy amit pl. az index.php-n módosítok azt az összes aloldalon is átírjam – hogy az oldal felső (nevezzük header-nek) és az alsó (ez legyen footer) részét az oldal tartalmától kezdve és végén külön fájlokban tárolom.
Így egy módosítás egy módosítás, bár ha mondjuk a menüben – tegyük fel ami a headerben van – azt már húzósabb „változtatni” de megoldható…
Nemsokára lesz ennek a cikknek folytatása, de már teljesen új motorral, amiben van clean URL-től kezdve snippet kezelésig mindenféle, szerintem tetszeni fog mindenkinek. A motort TLoF írta és mondta, hogy közkincsé tehető a lapon, csak még meg kell csinálni a cikket (reményeim szerint hétvégén lesz rá talán időm).
Szeretném megkérdezni, hogy hogyan lehet egy php-s oldalba egy htm oldal csak egy részletét includolni?
Sziasztok !!
Az én kérdésem az lenne, hogy lehet ezt megoldani kizárólag DIV-kel, tehát engem nem zavarna, ha nagy lenne az index.php állománya, sőt a keresők szeretik a sok szöveget, ezért „hide”, vagyis nem llátható DIV-ekbe raknám az anyagot és onann includolnám be.
Ez talán még praktikusabb lenne, mint egy másik könyvtárból, vagy alkönyvtárból előkeresni egy html-t vagy php-t.
Lehetne pl. Layereket is használni, azokkal még könnyebb lenne, de praktikus a hide DIV-is.
Ezzel Péter Piros is meg lehetne elégedve :), hiszen akkor nem kellene egy egész oldalt bekérni
Sziasztok.. én is ezt használom, de nekem internet explorerben állandóan hibát jelez. Tudna nekem valaki segígteni? Nem kódhiba, hanem kidob egy hibaüzenetet: „az Internet Explorer nem tudja megnyitni az internethelyet hxxp://www.touchofdeath1.com/index.php?id=band/loczi/. a művelet megszakadt.
És van amikor megnyitja van amikor nem.. Kérlek segítsetek. Nagyon szépen köszönöm.
U.I.: Először Switch Get I-et használtam. ott is ez az üzenet jött be.
Sziasztok!
Kérdésem az, hogy az így készített linket — index.php?id=pstutorialok/tutorial01 — leköveti a google?? Ugyanis így készítettem el egy oldalt, és a gugli nem látja!! Már 1 éves az oldal, de az alapoldalig jut csak el!! — alapoldal.php?id=motorok/piaggio —
Sajnos a piaggio.php ban lévő tartalmat (és az összes többi lapot) nem indexálja!! Kell valami mást is elkövetnem, hogy megtalálja a kereső, vagy a linkben szereplő ?id= dolog miatt ezt ne is várjam??
Várom a választ! Köszönöm! J.BF.
URL-t tudsz adni ahol a lapot meg is lehet nézni?
Nem tudok róla, hogy ez a módszer tiltva lenne a google-ban, hisz rengeteg cms használja ezt a fajta linkelést, soha nem hallottam róla hogy gondot jelenthetne. Inkább valami más lesz a gond szerintem.
Az oldalunk sokáig ment ezzel a módszerrel, és nem volt semmi gond a keresőkkel (napi 2000-es volt a csúcslátogatottságunk akkor).
Köszönöm a válaszokat, akkor valami más gond lehet! Keresem!
Sziasztok!
Nekem igazából olyan kérdésem lenne hogy az utolsó inculde-ban hogy lehetne azt megcsinálni hogy gyökér mappába elhelyezkedő index.php állományt nyissa meg hibaüzenet nélkül.
így nézz ki amire átírtam
és ezt az üzenetett kapom:
köszi előre is a válaszokat.
Csak tipp:
Gondolom, hogy ez a kód maga a gyökér könyvtárban van, ott is az indexen belül.
Persze a switch get ezen felhasználása másra is jó, de gondolom te a menüre akarod használni, akár a leírás.
Szóval ha ez az indexben van, és te az indexed includolod be, akkor az körkörös hivatkozás.
Igen jól láttod menükre akarom használni és az index.php-ba van minden és hogyan lehet ki küszöbölni ezt a körkörös hivatkozást ? Talán az oldalak mappában létre kellene hozznom pl. egy kezdolap.php -t hogy az jelenjen meg alapból vagy még milyen más megoldások léteznek ?
Én ezt egyáltalán nem értem.
Minden oldalnak készítenem kell 1 html, és 1 php oldalt is?
Ha igen, akkor miért jó ez?
Ha a php modulok/valami.php-ba illesztek 1 linket, akkor a tartalmi részbe hibát ír ki, és nem jeleníti meg.
Úgy nem lehet megoldani, hogy az index.php-be hívjam meg az elemeket?
Mint pl: fejléc, navi, side, tartalom, és lábléc?
Így már nagyobb értelmét látnám a behívásoknak.
Sziasztok!Ez a cikk nekem nagyon hasznos volt!Ugyanis egy CMS rendszert kezdtem el írni,és jó lesz hozzá!Köszönöm a cikket!
Ez nagyon hasznos! Köszönöm! Kipróbáltam a .htaccess-t, és jól működik.
Egy aggodalmam azért van, hogy kerülhetem el a goggle bácsi dühét, mivel így minden oldalam 2 címen is elérhető lesz.
Pl:
http://www.tutorial.hu/index.php?id=referencia
http://www.tuorial.hu/referencia.html
Használd a canonical tag-t, itt olvashatsz róla bővebben: canonical – Google Webmestereszközök
használata a HEAD-ben:
<link rel="canonical" href="http://www.tuorial.hu/referencia.html"/>
Köszönöm!
Megint elakadtam, de ez nem a a php switch get II. hibája.
Van egy php kereső az oladalamon, ami nagyon jól működött, de az útvonak megváltozása miatt elakadtam. A kereső kódja:
<?php
// You may translate the string values here under to your native languages.
$buttonvalue = "Keres";
$search_at = "Keresési eredmény a (az) ";
$search_result = "szóra";
$pages = "Talált oldalak száma ";
$to_small = "Legalább két karakter szükséges";
$recursive = true; // Change to false if no searching should be done in subdirectories.
//—————————- Do not change anything below this line ——————
$html = <<<HTML
Keresett kifejezés
HTML;
echo $html;
function textpart($body, $search) {
// Displays the text after the title
$length = 30;
$text = substr($body, max(stripos($body,$search) – $length, 0), strripos($body,$search) – stripos($body,$search) + strlen($search) + 2 * $length);
if (strripos($text, ” „) $length) {
$stop = substr($text, strripos($text, $search) + strlen($search), $length);
$stop = substr($stop, 0, strripos($stop, ” „));
}
$text = „… „;
while (stripos($temp,$search)) {
$temp = substr_replace($temp, „„, stripos($temp, $search), 0);
$temp = substr_replace($temp, „„, stripos($temp, $search) + strlen($search), 0);
$text = $text . substr($temp, 0, stripos($temp, „„) + 4);
$temp = substr($temp, stripos($temp, „„) + 4);
if(stripos($temp, $search) > (2 * $length)) {
$text = $text . substr($temp, 0, $length);
$text = substr($text, 0, strripos($text, ” „)) . ” … „;
$temp = substr($temp, stripos($temp, $search) – $length);
$temp = substr($temp, stripos($temp, ” „));
}
}
$text = $text . $stop . ” … „;
echo $text;
return;
}
function compress($string, $first, $last) {
// Removes everything in $string from $first to $last including $first and $last
while(stripos($string,$first) && stripos($string,$last)) {
$string = substr_replace($string, „”, stripos($string,$first), stripos($string,$last) – stripos($string,$first) + strlen($last));
}
return $string;
}
function directoryToArray($directory, $recursive) {
// This function by XoloX was downloaded from http://snippets.dzone.com/user/XoloX
$array_items = array();
if ($handle = opendir($directory)) {
while (false !== ($file = readdir($handle))) {
if ($file != „.” && $file != „..”) {
if (is_dir($directory. „/” . $file)) {
if($recursive) {
$array_items = array_merge($array_items, directoryToArray($directory. „/” . $file, $recursive));
}
} else {
$file = $directory . „/” . $file;
$array_items[] = preg_replace(„/\/\//si”, „/”, $file);
}
}
}
closedir($handle);
}
return $array_items;
}
function filewalk($file, $search, $counter, $webpath) {
// Selects and treats files with the extension .htm and .html and .asp and .php
if (strtolower(substr($file, stripos($file, „.htm”))) == „.htm”
|| strtolower(substr($file, stripos($file, „.html”))) == „.html”
|| strtolower(substr($file, stripos($file, „.asp”))) == „.asp”
|| strtolower(substr($file, stripos($file, „.php”))) == „.php”) {
$all = file_get_contents($file);
$body = substr($all, stripos($all,”<body"),stripos($all,"”) – stripos($all,”<body"));
$body = preg_replace('//i’, ‘ ‘, $body);
$body = preg_replace(‘//i’, ‘ ‘, $body);
$body = compress($body,”<noscript","”);
$body = compress($body,”<script","”);
$body = compress($body,”<iframe","”);
$body = compress($body,”<noframe","”);
$body = strip_tags($body);
$body = html_entity_decode($body, ENT_QUOTES);
$body = preg_replace(‘/\s+/’, ‘ ‘, $body);
// Scans and displays the results
if (stripos($body, $search)) {
$title = substr($all, stripos($all,””) + 7,stripos($all,””) – stripos($all,””) – 7);
$title = html_entity_decode($title, ENT_QUOTES);
$title = preg_replace(‘/\s+/’, ‘ ‘, $title);
echo ‘‘ . $title . ‘‘;
echo ” . $webpath . substr($file, stripos($file, „/”)) . ”;
echo textpart($body, $search) . ”;
$counter = $counter + 1;
}
}
return $counter;
}
// Reads the search text from the page’s URL
$url = $_SERVER[‘HTTPS’] == ‘on’ ? ‘https://’ : ‘http://’;
$url .= $_SERVER[‘SERVER_PORT’] != ’80’ ? $_SERVER[„SERVER_NAME”].”:”.$_SERVER[„SERVER_PORT”].$_SERVER[„REQUEST_URI”] : $_SERVER[‘SERVER_NAME’] . $_SERVER[‘REQUEST_URI’];
if (stripos($url,”?search=”)) $search = $_GET[‘search’];
$webpath = dirname($url);
// Starts searching
if (strlen($search) < 2 && trim($search) „”) {
echo ” . $to_small . ‘!’;
$search = „”;
}
if (trim($search) „”) {
echo „” . $search_at . ” ‘” . $search . „‘ ” . $search_result . „.”;
$counter = 0;
// Path to the folder containing this file
$curdir = getcwd();
// Opens the folder and read its contents
if ($dir = opendir($curdir)) {
$files = directoryToArray(„./”, $recursive);
foreach ($files as $file) {
$counter = filewalk($file, $search, $counter, $webpath);
}
closedir($dir);
}
echo „” . $pages . „: ” . $counter . „”;
}
?>
A hiba gondolom itt van, de nem tudom hogyan írjam át:
Bocs hogy ide írtam, de a fórum nem mükszik.