Willkommen im neuen Forum von concrete5.de.
Die Anmeldung ist ab dem 15.10.2020 nur noch mit E-Mail Adresse und Passwort möglich. Eine Anmeldung mit Benutzername ist nicht mehr möglich.

Diese Nachricht löschen.
Anhang entfernen?
Zurück zur Themenliste
F
FuFu 0.png 01.04.2015 11:02

RewriteRule - Concrete5

Hallo liebe Community Wir betreiben unsere Firmen Website mit Concrete5. Für die pretty URLs hat Concrete5 folgende Einträge im htaccess File: RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME}/index.html !-f RewriteCond %{REQUEST_FILENAME}/index.php !-f RewriteRule . index.php [N] Nun möchten wir auf einigen unseren Seiten die von uns erstellte PHP-Module enthalten, URLs wie "/beispiel/?beispielid=100" durch pretty URLs wie "/beispiel/beispiel_slug/" ersetzten. Eigentlich währe dies ja einfach mit ungefähr einem solchen Eintrag gemacht: RewriteRule ^/beispiel/$ /beispiel/slug=$1 Natürlich müsste man den PHP-Code unserer PHP-Module ebenfalls anpassen. Das Problem ist nun das dies mit den RewriteRules von Concrete5 in Konflikt steht. Nun bin ich kein Experte in RewriteRules und der gleichen, noch möchte ich Concrete5 Funktionen oder Scripte verändern, da dies das updaten erschwert. Trotzdem versuchte ich im request.php an verschiedenen stellen, diesen Code als Test einzufügen: $path = preg_replace("/(\/beispiel)\/(.+)?[\/]?/im", "$1/?id=$2", $path); Jedoch ohne Erfolg. Ich habe auch versucht an verschiedenen Stellen ein Echo einzufügen, dieses wurde jedoch nie angezeigt (Nicht im HTML Quellcode vorhanden). Nun bin ich an dem Punkt angekommen, wo ich euch Fragen muss. Wie Löse ich dieses Problem mit Concrete5? Gruss FuFu
R
Remo 0.png 01.04.2015 13:35
Wieso nicht einfach eine Single Page für /beispiel machen? class BeispielController extends Controller { public function view($slug) { .. } } Ich würde sowieso davon abraten direkt im Code was umzubauen. Besser gleich sauber bauen, dann hast du keine Sorgen mit Updates, Wartbarkeit und andere Programmierer werden den Code auch verstehen.
F
FuFu 0.png 07.04.2015 11:07
Vielen Dank Remo. Ich kenne mich mit Concrete5 nicht so gut aus. Folgende Links habe ich zu diesem Problem gefunden: http://www.concrete5.org/documentation/developers/5.6/pages/single-pages http://www.concrete5.org/documentation/how-tos/developers/use-query-string-path-parts-in-a-single-page/ Nun weiss ich wie ich eine Single Page erstelle. Aber wie es weiter geht, habe ich aber nicht verstanden. Wo definiere ich dies?: class BeispielController extends Controller { public function view($slug) { .. } } Was genau muss in diese Funktion? Wo ist die Umleitung von /beispielslug/ zu ?slug=beispielslug ? Gruss FuFu
F
FuFu 0.png 07.04.2015 11:43
Hmmm ich habe das Erstellen einer Single Page doch noch nicht ganz verstanden. Ich habe nun im Verzeichnis /single_pages/ das File beispiel.php angelegt. Darin habe ich bis jetzt nur diesen Code <?php class BeispielController extends Controller { public function view($slug) { echo "|TEST 1:{$slug}|"; } } echo "|TEST 2|"; ?> Im Dashboard habe ich die Single Page beispiel angelegt. Nun aber: wie verlinke ich nun auf die Single Page beispiel.php? Wenn ich die Seite /beispiel/ aufrufe, ist diese Seite eine ganz normale, leere Concrete5 Seite, ohne meine Test-Outputs. Gruss FuFu
R
Remo 0.png 07.04.2015 14:24
Im Ordner Single Pages hast du nur die Ausgabe. Am Ende des Artikels findest du einen weiteren Link (http://www.concrete5.org/documentation/how-tos/developers/build-a-single-page-powered-editing-interface-for-concrete5/). Da siehst du wie du einen Controller erstellen musst..
F
FuFu 0.png 07.04.2015 17:24
Vielen Dank Remo! Irgendwie habe ich es jetzt hingekriegt, obwohl ich nicht alles verstanden habe. Ich habe es nun so gelöst: 1. Das File beispiel in single_pages/ erstellt. 2. Controller Klasse für beispiel erstellt: class beispielController extends Controller { public function view($slug = 'NO_SLUG_IS_SET' ) { $path = substr(__FILE__, 0, strpos(__FILE__, 'public_html')); require_once($path.'lib/some_libary.php'); if($slug == 'NO_SLUG_IS_SET' && !isset($_GET['beispielid'])) { $url = dirname(get_current_url()); echo "window.location = '{$url}';"; } else { if($slug != 'NO_SLUG_IS_SET') { $sql = "SELECT id FROM beispieltabelle WHERE AND slug='{$slug}'"; $query = mysql_query($sql); $row = mysql_fetch_assoc($query); $_GET['beispielid'] = $row['id']; } } } } 3. Unter "Full Sitemap" die Page an die richtige stelle verschoben und das alte/ursprüngliche file unbenannt. 4. Mit dem Site-Editor das ursprüngliche PHP-Modul wieder eingefügt. 5. Dies für jede Sprache wiederholt 6. Die Seiten der verschiedenen Sprachen gemapt. Da nun mein single_pages/beispiel.php ein leeres File ist, denke ich jedoch, dass ich dies nicht so gelöst habe, wie es von den C5 entwicklern gedacht währe. Hast du mir noch einen Tip? Gruss FuFu
R
Remo 0.png 07.04.2015 17:55
Ich glaub du solltest dir etwas mehr Zeit nehmen die Doku und die Beispiele anzuschauen. Du verwendest da PHP Wissen das man nicht einfach 1:1 übernehmen sollte. Ich würde dir empfehlen mehr Framework Funktionen zu nutzen und nicht einfach die Funktionen zu verwenden die du kennst. $db = Loader::db(); und auf keinen Fall die inzwischen bereits als veraltet markierten mysql_* Funktionen nutzen. Kein require_once, require, include, include_once sondern $this->inc verwenden. Immer und zwar ohne Ausnahme mit Bind Variablen arbeiten - dein Code enthält eine SQL Injection mit dem man deinen Server relativ easy lahm legen kann.. Nicht zu schnell zum Ziel schauen ;-) Auch wenn der Weg dann etwas länger sein wird, irgendwenn wirst du das mit Sicherheit aufholen!
F
FuFu 0.png 13.04.2015 09:04
Hi Remo Vielen Dank für deine Hilfe und deine Tipps. Du warst wirklich hilfreich und es scheint nun alles zu funktionieren. Alles Gute wünscht dir FuFu

Nachricht hinzufügen