« 1 2 »
Autor Zpráva
Dranel
Profil
Zdravím,
mám dotaz týkající se vyytvoření drobečkové navigace. Přibližně vím jak ($_SERVER[]) ale v praxi mi to nějak drhne. Nevím totiž, jak oříznout PHP SELF abych se dostal do nadřazené složky... Nebo se to snad dělá jinak? Neznáte někdo stránku, kde je to vysvětleno?

PS: Hledal jsem
Leinad
Profil
Raději než PHP self bych použil $_SERVER['REQUEST_URI'] , ale řetězec se stejně řeže explode("dělící znak", "řetěžec");
Dranel
Profil
Leinad
Thx (Thanks - Díky)
Dranel
Profil
Takže při adrese server.cz/neco/necojineho/soubor.php s kódem

$navigace = $_SERVER['REQUEST_URI'];
$drobecky = explode("/", "$navigace");


to vypíše to co je za lomítkama?

echo $drobecky[0]; // server.cz
echo $drobecky[1]; // neco
echo $drobecky[2]; // necojineho
echo $drobecky[3]; // soubor.php
Str4wberry
Profil
Špione, proč si to nevyzkoušíš?
Dranel
Profil
Str4wberry
Proč mi stále říkáš tajny spion, Jahoďáku? Už jsem tě o to jednou prosil.
Proč to nevyzkouším, protože myslím že tam mám chybu - zdá se mi to moc lehký...
Leinad
Profil
$navigace = $_SERVER['REQUEST_URI'];
$drobecky = explode("/", "$navigace");
to vypíše to co je za lomítkama?
echo $drobecky[0]; // server.cz
echo $drobecky[1]; // neco
echo $drobecky[2]; // necojineho
echo $drobecky[3]; // soubor.php

Je to tak, vyzkoušet by sis to mohl. Pozor pokud jsou v URL nepovolené znaky(mezera, čeština...) - urlencode a podobně.
Ale pánové, proč se hádáte o jména?
Mastodont
Profil
$_SERVER['REQUEST_URI']
nestačí, pokud by byla výchozí stránka v podadresáři, třeba server.cz/cosi/index.php.

Proto používám raději:
substr($_SERVER['REQUEST_URI'], strpos($_SERVER['PHP_SELF'],'index.php'))
Dranel
Profil
Mastodont, Leinad, Str4wberry
Tak jsem to tedy vyzhoušel a jak jsem myslel, nejde to. Nevypíše tototiž nic :(

<?php
$navigace = substr($_SERVER['REQUEST_URI'], strpos($_SERVER['PHP_SELF'],'index.php'));
$drobecky = explode("/", "$navigace");

echo $drobecky[0] . "<br>";
echo $drobecky[1] . "<br>";
echo $drobecky[2] . "<br>";
echo $drobecky[3] . "<br>";
?>
Dranel
Profil
Pomozte pls...
Dranel
Profil
Prosím kde mám chybu v tom kódu popřípadě čemu jsem neporozuměl? Předem dík za odpověď...
Dranel
Profil
Takže. Dostal jsem se ke scriptu následujícímu:

<?php
$navigace = substr($_SERVER['REQUEST_URI'], strpos($_SERVER['PHP_SELF'],'index.php'));
echo $navigace;
$drobecek = explode("/", $navigace);
foreach ($drobecek as $drobek) {
echo "$drobek<br>\n";
}
?>


Problém je bohužel v tom, že například při adrese www.server.cz/stranka/index.php?str=dovednosti mi to vypíše následující nesmysl:

stranka/index.php?str=dovednostistranka
index.php?str=dovednosti


Kde mám prosím chyby?
Mastodont
Profil
Dranel
Já se ti musím omluvit za to, že jsem tě mystifikoval. Nevšiml jsem si totiž, že používáš tento styl adresování. Co jsem ti radil, to funguje při "hezkých" URL, čili když máš adresy typu:

www.server.cz
www.server.cz/clanky/clanek1

Soubor index.php tam samozřejmě je, ale prostě se v té adrese vůbec neuvádí.

Ještě jednou - omlouvám se.
Dranel
Profil
Mastodont
A jiné řešení? Jestli ne tak se jdu konečně naučit mod_rewrite...
echo
Profil *
jine reseni - udelat drobecky z GET-u
Mastodont
Profil
Dranel
Mod_rewrite se učit neumíš, stačí dát do .htaccess tohle:

RewriteRule ^(.*)$ index.php [QSA,L]
Dranel
Profil
Mastodont
A to mi udělá co? Nemůžu skusit, jsme ve škole.
Dranel
Profil
Mastodont
Tak jsem to přidal do .htaccess a na localhostu, kde to zkouším, mi to vypsalo Error :(
BetaCam
Profil
Tak jsem to přidal do .htaccess a na localhostu, kde to zkouším, mi to vypsalo Error :(

Tak tam skus tohle :

RewriteRule ^(.*)$ /index.php [QSA,L]
Mastodont
Profil
Dranel
A máš tam RewriteEngine on ?? :)
Dranel
Profil
Mastodont
Ano mám tam:

RewriteEngine on
RewriteRule ^(.*)$ index.php [QSA,L]

A při zadaní http://localhost/ to vypíše:

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, webmaster@localhost and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.
Mastodont
Profil
Dranel
A máš PHP ve Windows nebo na Linuxu? Na Win jsou tuším třeba ještě nějaké úpravy konfigurace Apache ...

Zkus ještě ten zápis od BetaCama - ale u mně ten můj tvar chodí bez problémů.
BetaCam
Profil
Mastodont

A máš PHP ve Windows nebo na Linuxu? Na Win jsou tuším třeba ještě nějaké úpravy konfigurace Apache ...

Já mám zkušenost zhruba takovou:

Většinou projde na Unixu ( aspon mě ):

RewriteEngine on
RewriteRule ^$ /index.php [L]
RewriteCond $1 !^(index\.php|css|upload|images|robots\.txt|favicon\.ico)
RewriteRule ^(.*)$ /index.php/$1 [L]

Většinou projde na Windowsu ( aspon mě ):

RewriteEngine on
RewriteRule ^$ index.php [L]
RewriteCond $1 !^(index\.php|css|upload|images|robots\.txt|favicon\.ico)
RewriteRule ^(.*)$ index.php/$1 [L]

Mám takové zkušenosti, ale jestli je to pravidlo to opravdu nevím :)
Mastodont
Profil
BetaCam
Aha, to je dost zajímavé!! Já mám PHP na Win, takže to by souhlasilo.
Dranel
Profil
BetaCam
RewriteEngine on
RewriteRule ^$ index.php [L]
RewriteCond $1 !^(index\.php|css|upload|images|robots\.txt|favicon\.ico)
RewriteRule ^(.*)$ index.php/$1 [L]


Mohl bys mi to prosím okomentovat? Ať vím co to dělá... Dík
BetaCam
Profil
Dranel

1. tento můj zápis, který používám já byl použit pouze pro prezentování mé zkušenosti s mod_rewrite na různých systémech
2. tobě budou tyto pravidla zdřejmě k ničemu. Já je používám, protože se chci zbavit index.php v url. K ničemu jinému ty pravidla neslouží, když tedy nepočítám to, že tam mám zadáno co se nemá přepisovat.

jinak zhruba :

RewriteEngine on

zapne mod_rewrite


RewriteRule ^$ index.php [L]

Pokud je prázdný požadavek podstrč index.php


RewriteCond $1 !^(index\.php|css|upload|images|robots\.txt|favicon\.ico) 

Určuje co se nebude přepisovat


RewriteRule ^(.*)$ index.php/$1 [L]

Na jakýkoliv požadavek podstrč index.php/požadavek

tedy při

example.com/nejaky-pozadavek

se podstrčí obsah z

example.com/index.php/nejaky-pozadavek


Já ovšem celou aplikaci řídím přes index.php což ovšem zrovna není tvuj případ.
Dranel
Profil
Tak jsem nakonec vyplodil následující kód:

<?php
$navigace = substr($_SERVER['REQUEST_URI'], strpos($_SERVER['PHP_SELF'],'index.php'));
$drobecek = explode("/", $navigace);
  echo "Nacházíte se zde: <a href='http://www.dranel.cz/'>Dranel.cz</a>";
foreach ($drobecek as $drobek) {
  echo " &gt; ";
  echo "<a href='http://" . $_SERVER['HTTP_HOST'] . "/$drobek'>$drobek</a>";
}
?>


Podívejte se sami (URL je dočasná - pokud nefunguje, skuste tuto) - je to skoro dokonalé. Bohužel však jenom skoro - jukněte schválně na adresy drobečků - první je v pořádku ale úvod mi nějak blbne... poradí někdo co s tím?
djlj
Profil
je to skoro dokonalé
No právě — je to bez diakritiky.
Dranel
Profil
djlj
Do prdele (sry) na to jsem zapoměl... tím pádem to asi dělám celý blbě... :-(
Nechcete mě někdo navízt na tu správnou cestu? :-)
Lion76
Profil *
Dranel

1. musis si vytvorit pole, kde budes mit nazvy stranek s diakritikou
2. musis vedet kolik je slov mezi lomitky
3. ten cyklus musi byt foreach($drobecky as $klic => $drobek), aby jsi mohl spojit nazvy stranek podle klice
4. v tom cyklus si vytvoris nove pole a budes tam ukladat $drobek
5. podminka musi byt if($klic == $pocet), promenna $pocet je pocet slov mezi lomitky, pokud se podminka bude rovna, tak posledni drobek bude prosty text, pokud se nebude rovnat, bude to odkaz
7. nazvy stranek dostanes pres $stranky[$klic]
8. odkazy dostanes pres <a href='http://".$_SERVER['HTTP_HOST']."/".implode("/", $pole)."/'>$stranky[$klic]</a>

Treba to nekdo dela jinak, ale ja jsem to udelal takhle a jeste to mam pres db.
« 1 2 »

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: