Navigation - wie fange ich an?

Wie wir alle wissen (sollten) ändert mod_rewrite keine Links im Script. Damit auch die Links auf Deiner Page auf die neuen "Rewrited URLs" zeigen bedarf es der Anpassung im Code. Fragen und Probleme rund um's Coding werden hier diskutiert.

Moderator: Super-Mod

Navigation - wie fange ich an?

Beitragvon swsg » 15.12.2005 20:44

Hi Leute

Ich programiere PHP Seiten,

Bis heute habe ich einfach z.B eine Seite: kurslokal.php

Mein link sah dann folgendermassen aus:
<a href="kurslokal.php?ort=zuerich" ...

Weil meine Seiten immer relativ schlecht dastehen im Sumas möchte ich umstellen.

Aber wie fange ich an?

Giebt es eine allgemeingültig gescheite Art, die Navi zu programmieren:
-dass sie sumatauglich ist.
-die Lösung für alle weiteren Projekte brauchbar ist


Und wie muss ich die index.php programmieren?

Fur jeden Hinweis sehr Dankbar!
swsg
.
.
 
Beiträge: 11
Registriert: 15.12.2005 20:25
Wohnort: Schweiz

Beitragvon Bob » 15.12.2005 22:30

Was hat die Navigation mit mod_rewrite zu tun? Du musst nur auf die "statischen URLs" verlinken, mehr nicht. Wie die URL dabei aussieht, ist ja völlig egal. Am besten programmiert man wohl eine Klasse oder Funktion, die anhand von bestimmten übergebenen Parametern dann eine URL zusammenbaut und diese dann zurückgibt. So muss man dann nur die Funktion/Klasse ändern, sofern man das URL-Layout ändern möchte.

Für deine URL könntest du z.B. /kurslokal-ort-zuerich.html nutzen.

Grüße
Robert
Bob
Moderator
Moderator
 
Beiträge: 5044
Registriert: 01.10.2004 13:10

Beitragvon swsg » 16.12.2005 08:52

Direkt zu tun hat mod_rerite nicht's mit Navigation.

Ich sehe einfach noch nicht ganz durch.


A.) Kann man sagen was die Suma lieber hat:

1. domain.ch/kurslokal.php?ort=zuerich
2. domain.ch/kurslokal-ort-zuerich.html
3. domain.ch/kurslokal/ort/zuerich/



B.) in der .htaccess:

RewriteEngine on
RewriteCond %{REQUEST_URI} !.(.jpg$|.gif$|.css$|.html$|.pdf$|.rar$|.zip$|.txt$|.sql$|.php$|.php4$|.png$|.ico$|.exe$|.dat$|.csv$|.pl$|.j01$|.j31$)
RewriteBase /
RewriteRule $ index.php



C.) in index.php modle ich aus den Parameter einfach ne URL zusammen.

(z.B für 1.)
Code: Alles auswählen
$url_string = getenv("REQUEST_URI");
$url_array = explode("/",$url_string);


Ich habe somit in $url_array[1] direkt die Datei wo ich hin Navigiren möchte.


D.)Dann includiert man in der index.php einfach direkt den $url_array[1]?



Und das ist alles? Suchmaschinenoptimal?
swsg
.
.
 
Beiträge: 11
Registriert: 15.12.2005 20:25
Wohnort: Schweiz

Beitragvon Cabcom » 16.12.2005 09:20

ja das würde mich auch interessieren bin auch mod neuling =)

ich include das so

Code: Alles auswählen
<?
      switch($_GET["m"]) {
      case 1:
      $title = "Informationen";
      $include = "functions/css.php";
      break;
      
      default:
      $title = "CSS, XHTML, Webdesign mit Webstandards, Recommended Sites & mehr";
      $include = "functions/news.php";
      break;
}

?>


nun sieht die .htaccess so aus

Code: Alles auswählen
RewriteEngine On
RewriteBase /
RewriteRule style/  /mod/index.php?m=1 [NC]


StyleSheet Problem

eine css Datei wird mit
Code: Alles auswählen
<link href="css/style.css" rel="stylesheet" type="text/css" media="screen" />
eingefügt. Wenn man jetzt über

also der aufruf über http://localhost/mod/index.php?m=1
das ganze aufruft, dann sind alle CSS Klassen verfügbar und die Seite wird im gewünschten Style angezeigt.

Wenn man jetzt aber das ganze via
http://localhost/mod/style/ aufruft, dann kommt zwar das Document aber ohne meine Stylesheet Klassen. Wie als wenn der Pfad zu der css datei nicht mehr stimmen.

Weiterhin folgendes:
Ich habe einen Navigationspunk:
Code: Alles auswählen
<li class="subtitle"><a href="style/">CSS</a></li>
dieser verursacht http://localhost/mod/style/
Beim ersten Laden der Seite stimmt der Link noch und es wird auch die css.php includet, aber ohne die StyleSheet angabe im header.


warum das so ist weis ich nicht aber wenn man, nachdem man zum erstenmal auf den Link geklickt hat, wieder auf den Link css klickt sieht die uri so aus

http://localhost/mod/style/style/ und das jedesmal nur ein /style/ mehr was mache ich da falsch ? Kann mir jemand ein paar Infos geben. Habe schon das Forum hier durchblättert und unzählige einträge auf anderen Seiten gelesen aber es klappt einfach nicht.

Greez Cab
Cabcom
.
.
 
Beiträge: 7
Registriert: 10.12.2005 19:35

Beitragvon swsg » 16.12.2005 09:52

Lieber Cab

und das jedesmal nur ein /style/ mehr was mache ich da falsch ? Kann mir jemand ein paar Infos geben. Habe schon das Forum hier durchblättert und unzählige einträge auf anderen Seiten gelesen aber es klappt einfach nicht.


Du Funkst mir ins Forum rein!

Poste doch dein eigenen Beitrag oder nimm konkret Bezug auf meine Fragen.
Jetzt haben wir zwei Ansätze meinen weiter oben und Deinen neu dazu.

:evil: :evil: :evil:
swsg
.
.
 
Beiträge: 11
Registriert: 15.12.2005 20:25
Wohnort: Schweiz

Beitragvon Cabcom » 16.12.2005 09:56

naja ich finde die beiden gehören zusammen weil sie sich ja auf ein und die selbe frage beziehen
Cabcom
.
.
 
Beiträge: 7
Registriert: 10.12.2005 19:35

Beitragvon Bob » 16.12.2005 13:47

swsg hat geschrieben:A.) Kann man sagen was die Suma lieber hat:

1. domain.ch/kurslokal.php?ort=zuerich
2. domain.ch/kurslokal-ort-zuerich.html
3. domain.ch/kurslokal/ort/zuerich/

2. und 3., wobei ich 2. bevorzugen würde, da du damit keine Probleme mit existierenden Verzeichnissen und relativen Verlinkungen bekommst.
B.) in der .htaccess:

Für 2. würde ich ehr
Code: Alles auswählen
RewriteEngine on
RewriteRule ^[^.]+\.html$ /index.php [L]

nutzen, wobei die RegEx aus Performanceerwägungen so gestrickt ist, dass der Punkt ausgeschlossen ist (-> [^.]), oder kommt der Punkt innerhalb der Werte vor?

Für 3. bietet sich dann z.B.

Code: Alles auswählen
RewriteEngine on
RewriteRule ^[^.]+$ /index.php [L]

an.
D.)Dann includiert man in der index.php einfach direkt den $url_array[1]?

Wie includieren? Du würdest ihn einfach so aufrufen, wenn du auf den Wert zugreifen möchtest, wobei er bei 0 beginnt, also $url_array[0].
Und das ist alles? Suchmaschinenoptimal?

Von den internas bekommt die SuMa nichts mit, für sie ist nur die nach außen sichtbare URL entscheidend.

Cabcom hat geschrieben:Wie als wenn der Pfad zu der css datei nicht mehr stimmen.

Genau das ist ja der Fall, der Pfad stimmt nicht mehr. Das ist der Nachteil von Variante 3 oben. Du befindest dich dann ja im Verzeichnis /mod/style/, notierst du dann href="css/style.css" statt href="/css/style.css", dann fordert der Browser auch
/mod/style/css/style.css an.

grüße
Robert
Zuletzt geändert von Bob am 16.12.2005 20:43, insgesamt 1-mal geändert.
Bob
Moderator
Moderator
 
Beiträge: 5044
Registriert: 01.10.2004 13:10

Beitragvon swsg » 16.12.2005 16:41

Hi Robert

Vielen Dank für Deine Hilfe!


wobei ich 2. bevorzugen würde, da du damit keine Probleme mit existierenden Verzeichnissen und relativen Verlinkungen bekommst

Guter Hinweis!



Wie includieren? Du würdest ihn einfach so aufrufen, wenn du auf den Wert zugreifen möchtest, wobei er bei 0 beginnt, also $url_array[0].


Ich meine dass ich bei 1. alles nach dem "/" "verstecke".
In der Adresszeile würde dan domain.ch/ stehen.

Der Code im Index würde mir ein Array bilden...
Code: Alles auswählen
$url_string = getenv("REQUEST_URI");
$url_array = explode("/",$url_string);


indem in $url_string[1] würde demnach kurslokal.php?ort=zuerich stehen.
Mit dem include (also include($url_string[1])) könnte ich direkt die Seite einbinden.

Ich sehe grad die Fehlüberlegung:
Die Links sehen immer noch gleich aus (<a href="./kurslokal.php?ort=zuerich"..)
und dass möchte ich ja genau vermeiden.


So jetzt muss ich die ganze Sache mal coden und erproben.
Vielen Dank für die Hilfe!

Gruss swsg
swsg
.
.
 
Beiträge: 11
Registriert: 15.12.2005 20:25
Wohnort: Schweiz

Beitragvon swsg » 16.12.2005 18:02

Ich hab nochmals ein Problem

Ich habe die htaccess umgschrieben, jedoch akzeptiert der browser nur ein zeichen:
domain.ch/1.html

Ich habe zwar Seite wo der Syntax beschrieben wird angeschaut.

Die htaccess

RewriteRule ^[^.]\.html$ /index.php?par=$1 [L]

Der Code heisst doch:

^[^.]
Ersetze am Anfang Beliebig viele Zeichen ausser Punkt

\.html$
Die auf .html enden durch

/index.php?par=

$1
hänge was vor .html steht hinten an

[L] Schluss
swsg
.
.
 
Beiträge: 11
Registriert: 15.12.2005 20:25
Wohnort: Schweiz

Beitragvon swsg » 16.12.2005 19:13

Ich hab's kapiert

^[^.]*
swsg
.
.
 
Beiträge: 11
Registriert: 15.12.2005 20:25
Wohnort: Schweiz

Beitragvon Bob » 16.12.2005 20:49

Autsch, da habe ich schon wieder das + vergessen, sorry.
^[^.]
Ersetze am Anfang Beliebig viele Zeichen ausser Punkt

So für sich alleine genommen ist nur ein Zeichen außer dem Punkt erlaubt, da der Quantifyer fehlte. Ersetzt wirtd dort nicht, sondern es wird einfach geguckt, ob die aktuelle Anfrage auf die regEx passt. Sonst läuft das genau so wie du es beschrieben hast.

Die Links sehen immer noch gleich aus (<a href="./kurslokal.php?ort=zuerich"..)
und dass möchte ich ja genau vermeiden.

Diese musst du auch manuell im PHP-Script anpassen (dein Script muss also einen solchen Statischen Link im HTML-Quelltext generieren); mod_rewrite kann dies nicht.
Bob
Moderator
Moderator
 
Beiträge: 5044
Registriert: 01.10.2004 13:10

Beitragvon swsg » 16.12.2005 21:03

Diese musst du auch manuell im PHP-Script anpassen (dein Script muss also einen solchen Statischen Link im HTML-Quelltext generieren); mod_rewrite kann dies nicht.


da hasst Du mich falsch verstanden.

Das ich die Links selber ändern muss ist mir klar. Mit meiner vermeintlichen Lösung hätte ich die Links nicht anpassen müssen, was ja heisst, dass diese Lösung unbrauchbar wäre.


Es läuft nun alles. - Dank Deiner Hilfe! Merci!
Gruss swsg
swsg
.
.
 
Beiträge: 11
Registriert: 15.12.2005 20:25
Wohnort: Schweiz


Zurück zu Programmierung & Scriptanpassung für mod_rewrite

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste