read more links...

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

read more links...

Δημοσίευση από korgr » 21 Μάιος 2016 11:13

Εγώ στο Odyssey CMS ακολούθησα την εξής λογική χωρίς mod_rewrite

htaccess:
Options +FollowSymlinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* handler.php [L]
Έτσι όλα τα Not Found (γιατί στην ουσία ένα τέτοιο είναι ένα SEF URL) κατευθύνονται στο handler.php το οποίο κάνει parse το URI και κτίζει το actual URL
Φυσικά αν έχω απενεργοποιήσει τα SEF URLs στα settings οδηγώ σε παύση το script και παίρνω το πραγματικό 404 Not found
Αν το parsing οδηγεί σε πραγματικό content URL τότε ορίζω

Κώδικας: Επιλογή όλων

header('HTTP/1.1: 200 OK');
και σερβίρω το content, διαφορετικά και πάλι 404 Not Found

Το μυστικό είναι να δημιουργήσεις μια κλάση που θα χειρίζεται τα SEF URLs και κυρίως θα τα κτίζει στην δημιουργία του markup
Για παράδειγμα:

Κώδικας: Επιλογή όλων

<a href="<?php $sef->url&#40;'index.php?section=articles&view=list&catID=3&langID=1'&#41;;?>">Text of link</a>
Αυτό αν υποθέσουμε πως η κατηγορία με id=3 είναι η «Τα νέα μας» και είναι ενεργοποιημένα τα SEF URLs θα επιστρέψει στο markup το:

Κώδικας: Επιλογή όλων

<a href="/gr/articles/list/ta-nea-mas">Text of link</a>
διαφορετικά θα επιστρέψει το:

Κώδικας: Επιλογή όλων

<a href="index.php?section=articles&view=list&catID=3&langID=1'">Text of link</a>
δηλαδή το original URL

Serghio
Δημοσιεύσεις: 451
Εγγραφή: 08 Φεβ 2011 19:20
Τοποθεσία: Περιστέρι

read more links...

Δημοσίευση από Serghio » 23 Μάιος 2016 10:55

Serghio έγραψε:ας αφήσουμε την κατηγορία για αργότερα.Οπότε στο πίνακα που αποθηκεύω τους τιτλους των αρθρων θα μπορουσε να υπάρχει και ενα άλλο column που αποθηκεύεται το url και με βάση αυτο θα γινεται το ψαξιμο....
Αυτο προυποθέτει βέβαια οτι θα "παίρνω" τον τιτλο και με ενα function θα βάζω τις παύλες και το αποτέλεσμα αυτού θα το βάζω στην βάση.Τα λέω καλά;
Οκ....θα πάω για αυτό τελικά,,,υπάρχει ένα ερώτημα όμως.
Πως θα παίρνω τον τιτλο απο το URL(για να ψάξω στην βάση) οταν θα ειναι αυτης της μορφής
www.domain.com/enas-titlos

To enas-titlos πως θα το παιρνω;
Eδω δεν μπορεί να γίνει χρήση της GET variable.

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

read more links...

Δημοσίευση από korgr » 23 Μάιος 2016 13:03

Πρέπει να κάνεις μια function πχ toLatin() η οποία θα παίρνει τον κάθε τίτλο και θα αντικαθιστά κάθε χαρακτήρα με τον αντίστοιχο λατινικό και τα κενά με παύλες

Serghio
Δημοσιεύσεις: 451
Εγγραφή: 08 Φεβ 2011 19:20
Τοποθεσία: Περιστέρι

read more links...

Δημοσίευση από Serghio » 23 Μάιος 2016 15:33

korgr έγραψε:Πρέπει να κάνεις μια function πχ toLatin() η οποία θα παίρνει τον κάθε τίτλο και θα αντικαθιστά κάθε χαρακτήρα με τον αντίστοιχο λατινικό και τα κενά με παύλες
Kατι λάθος κατάλαβες νομίζω....δεν μπορώ να καταλάβω που πήγε το μυαλό σου.
Ας πάρουμε το εξής παράδειγμα:
www.domain.com/g=titlos.php

Αν στο παραπάνω θέλω να "πάρω" τον τίτλο απλώς κάνω αυτο:

$title=$_ GET['q'];

Aν όμως έχω ένα SEF URL σαν και αυτό
www.domain.com/titlos

Το παραπάνω δεν μπορεί να γινει...

alou
Script Master
Δημοσιεύσεις: 1374
Εγγραφή: 24 Αύγ 2007 19:52
Επικοινωνία:

read more links...

Δημοσίευση από alou » 23 Μάιος 2016 17:34

Προσπάθησε να καταλάβεις τη λειτουργία των rewrite στο htaccess, αυτό που σου έγραψε ο korgr παραπάνω είναι μια τέτοια περίπτωση που θα πάρει το  example.com/titlos και θα το δρομολογήσει πχ στο index.php?slug=titlos και στη συνέχεια ένα query τύπου select * from pages where slug = "titlos" θα σου φέρει το αποτέλεσμα.

Πριν ξεκινήσεις, σχεδίασε λίγο τη δομή των request γιατί το domain.com/titlos θα οδηγήσει σε προβλήματα, προτίμησε κάτι του στυλ example.com/pages/title ή example.com/users/alou που παραπέμπουν σε model/item ή κάτι παρόμοιο που έχει μια πιο δομημένη λογική.

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

read more links...

Δημοσίευση από korgr » 23 Μάιος 2016 20:34

Serghio έγραψε: Kατι λάθος κατάλαβες νομίζω....δεν μπορώ να καταλάβω που πήγε το μυαλό σου.
Έχεις δίκιο, κατάλαβα λάθος πως ήθελες να δεις πως δημιουργείται το sef url
Όπως είπε και ο alou πρέπει να προκαθορίσεις ένα pattern για το sef url σου και όπως ανέφερα πριν και εγώ πρέπει να κάνεις parse το URI

Για παράδειγμα εγώ έχω καταλήξει στο εξής pattern:
language/section/view/url-slag
Πχ gr/articles/list/ta-nea-mas
Έχοντας καταλήξει στο pattern σου, κάνεις parse κάπως έτσι:

Κώδικας: Επιλογή όλων

<?php
$uri= explode&#40;"?", $_SERVER&#91;'REQUEST_URI'&#93;&#41;; // χωρίζεις το sef-url από το query string
$query_string = $uri&#91;1&#93;; // το query string
$sef_url_parts = explode&#40;'/', $uri&#91;0&#93;&#41;; // χωρίζεις σε κάθε τμήμα του sef url
array_shift&#40;$sef_url_parts&#41;; // the first element will be empty so we get rid of it
// Στον πίνακα $sef_url_parts έχεις όλα τα parts του sef url ξεκινώντας από το home dir
// η συνέχεια επί της οθόνης σου ;&#41;
?>
Το ανωτέρω αν ξέρεις την list μπορεί να γίνει και με

Κώδικας: Επιλογή όλων

list&#40;$parts, $query_string&#41; = explode&#40;"?", $_SERVER&#91;'REQUEST_URI'&#93;&#41;;
$sef_url_parts = explode&#40;'/', $parts&#41;; // χωρίζεις σε κάθε τμήμα του sef url
array_shift&#40;$sef_url_parts&#41;; // the first element will be empty so we get rid of it

Serghio
Δημοσιεύσεις: 451
Εγγραφή: 08 Φεβ 2011 19:20
Τοποθεσία: Περιστέρι

read more links...

Δημοσίευση από Serghio » 30 Μάιος 2016 17:18

alou έγραψε:Προσπάθησε να καταλάβεις τη λειτουργία των rewrite στο htaccess, αυτό που σου έγραψε ο korgr παραπάνω είναι μια τέτοια περίπτωση που θα πάρει το  example.com/titlos και θα το δρομολογήσει πχ στο index.php?slug=titlos και στη συνέχεια ένα query τύπου select * from pages where slug = "titlos" θα σου φέρει το αποτέλεσμα.
.
Προσπαθώ να κάνω το παραπάνω αλλά έχει παρουσιαστεί αυτό το πρποβλημα www.freestuff.gr/forums/viewtopic.php?t=69941

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες