Οδηγίες για τη χρήση του jSQL Injection, ενός πολυλειτουργικού εργαλείου για την εύρεση και την εκμετάλλευση ενέσεων SQL στο Kali Linux. Μενού πολλαπλών επιπέδων σε PHP και MySQL Inurl php αναγνωριστικό παιχνιδιού
Κανένας ιστότοπος δεν είναι ολοκληρωμένος χωρίς πλοήγηση ή, όπως τον αποκαλούν επίσης, «μενού ιστότοπου». Έτσι, το μενού τοποθεσίας μπορεί να είναι μονού ή πολυεπίπεδου με τη μορφή δέντρου. Εάν δεν υπάρχουν ιδιαίτερες δυσκολίες όσον αφορά την υλοποίηση με ένα μενού ενός επιπέδου, τότε κατά τη δημιουργία ενός μενού πολλαπλών επιπέδων πρέπει να σκεφτείτε προσεκτικά.
Το πιο σημαντικό πράγμα σε αυτήν την εργασία είναι να σχεδιάσουμε τη βάση δεδομένων για το πολυεπίπεδο μενού μας. Ας δημιουργήσουμε έναν πίνακα Κατηγορίες με τρία πεδία ταυτότητα, τίτλος, μητρική εταιρείαΟπου:
- ταυτότητα- αναγνωριστικό
- Τίτλος- Όνομα μενού
- Μητρική εταιρεία- Προεπιλεγμένη κατηγορία γονέα 0
Το πεδίο είναι υπεύθυνο για τη διακλάδωση του μενού Μητρική εταιρείαΑν Γονέας = 0, τότε αυτή η κατηγορία είναι η γονική κατηγορία. Για να προσθέσετε απογόνους στη γονική κατηγορία, πρέπει να καθορίσετε στο πεδίο γονέα ταυτότηταο σωστός γονιός. Για παράδειγμα:
Πίνακες με κατηγορίες
Όπως φαίνεται από τον πίνακα, η γονική κατηγορία Αυτοκίνηταυπάρχουν δύο απόγονοι - αυτό είναι MazdaΚαι Hondaπου σχετίζονται ανά τομέα Μητρική εταιρεία. Και η κατηγορία Μοτοσικλέτεςδύο απόγονοι είναι KawasakiΚαι Harley. Παράλληλα, η κατηγορία Σκάφη δεν έχει απογόνους. Ελπίζω να καταλαβαίνετε πώς να συνδέσετε κατηγορίες.
Στη συνέχεια περνάμε από τα λόγια στην πράξη. Ας δημιουργήσουμε έναν πίνακα Κατηγορίες.
ΔΗΜΙΟΥΡΓΗΣΤΕ ΠΙΝΑΚΑ ΑΝ ΔΕΝ ΥΠΑΡΧΕΙ «κατηγορίες» («id» int(10) χωρίς υπογραφή NOT NULL AUTO_INCREMENT, «title» varchar(255) NOT NULL, «parent» int(10) ανυπόγραφο NOT NULL, PRIMARY KEY («id») ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=20 ; -- -- Απόρριψη δεδομένων από τον πίνακα "κατηγορίες" -- INSERT INTO "categories" ("id", "title", "parent") ΤΙΜΕΣ (1, "Cars", 0), (2, "Motorcycles", 0 ) , (3, "Mazda", 1), (4, "Honda", 1), (5, "Kawasaki", 2), (6, "Harley", 2), (7, "Mazda 3", 3 ), (8, "Mazda 6", 3), (9, "Sedan", 7), (10, "Hatchback", 7), (11, "Boats", 0), (12, "Liftback" , 8), (13, "Crossover", 8), (14, "White", 13), (15, "Red", 13), (16, "Black", 13), (17, "Green" , 13), (18, "Mazda CX", 3), (19, "Mazda MX", 3);Ο αλγόριθμος εργασίας αποτελείται από τα εξής:
Δημιουργήστε μια σύνδεση με τη βάση δεδομένων
query("SET NAMES "utf8""); /* * Αυτός είναι ο "επίσημος" αντικειμενοστραφής τρόπος για να γίνει αυτό * ωστόσο το $connect_error δεν λειτούργησε μέχρι τις εκδόσεις 5.2.9 και 5.3.0 της PHP. */ if ($mysqli->connect_error) ( die("Σφάλμα σύνδεσης (" . $mysqli->connect_errno . ") " . $mysqli->connect_error); ) /* * Εάν πρέπει να είστε σίγουροι για συμβατότητα με εκδόσεις πριν από την 5.2 .9, * είναι καλύτερα να χρησιμοποιήσετε αυτόν τον κωδικό */ if (mysqli_connect_error()) ( die("Σφάλμα σύνδεσης (" . mysqli_connect_errno() . ") " . mysqli_connect_error()); )Σύνταξη συνάρτησης για λήψη δεδομένων από τον πίνακα Κατηγορίες
//Λήψη του πίνακα του μενού μας από τη βάση δεδομένων ως συνάρτηση πίνακα getCat($mysqli)( $sql = "SELECT * FROM `categories`"; $res = $mysqli->query($sql); //Δημιουργία πίνακας όπου το κλειδί του πίνακα είναι το αναγνωριστικό μενού $cat = array(); while($row = $res->fetch_assoc())( $cat[$row["id"]] = $row; ) επιστροφή $ Γάτα; )Λαμβάνουμε έναν πίνακα σαν αυτόν, όπου το κλειδί του πίνακα είναι το αναγνωριστικό κατηγορίας.
Λειτουργία κατασκευής από μασίφ ξύλο από τον Tommy Lacroix
//Συνάρτηση για την κατασκευή ενός δέντρου από έναν πίνακα από τη συνάρτηση Tommy Lacroix getTree($dataset) ( $tree = array(); foreach ($dataset as $id => &$node) ( //Εάν δεν υπάρχουν συνημμένα εάν ( !$node[" parent"])( $tree[$id] = &$node; )else( //Εάν υπάρχουν παιδιά, τότε επαναλάβετε μέσω του πίνακα $dataset[$node["parent"]]["childs "][$id] = &$ node; ) ) return $tree;)Παίρνουμε έναν πίνακα με τη μορφή δέντρου
Ολόκληρο το σενάριο
query("SET NAMES "utf8""); /* * Αυτός είναι ο "επίσημος" αντικειμενοστραφής τρόπος για να γίνει αυτό * ωστόσο το $connect_error δεν λειτούργησε μέχρι τις εκδόσεις 5.2.9 και 5.3.0 της PHP. */ if ($mysqli->connect_error) ( die("Σφάλμα σύνδεσης (" . $mysqli->connect_errno . ") " . $mysqli->connect_error); ) /* * Εάν πρέπει να είστε σίγουροι για συμβατότητα με εκδόσεις πριν από την 5.2 .9, * είναι καλύτερα να χρησιμοποιήσετε αυτόν τον κωδικό */ if (mysqli_connect_error()) ( die("Σφάλμα σύνδεσης (" . mysqli_connect_errno() . ") " . mysqli_connect_error()); ) //Λήψη του πίνακα του μενού μας από τη βάση δεδομένων ως συνάρτηση πίνακα getCat($mysqli)( $sql = "SELECT * FROM `categories`"; $res = $mysqli->query($sql); //Δημιουργία πίνακα όπου το κλειδί πίνακα είναι το αναγνωριστικό μενού $cat = array(); ενώ ($row = $res->fetch_assoc())( $cat[$row["id"]] = $row; ) return $cat;) //Συνάρτηση για κατασκευή ενός δέντρου από έναν πίνακα από τη συνάρτηση Tommy Lacroix getTree($dataset) ( $tree = array(); foreach ($dataset as $id => &$node) ( //Εάν δεν υπάρχουν συνημμένα εάν (!$node[ "parent"])( $tree[$id] = &$node; )else( //Εάν υπάρχουν απόγονοι, τότε περάστε από τον πίνακα $dataset[$node["parent"]]["childs"][$ id] = &$node; ) ) return $tree; ) //Λήψη προετοιμασμένου πίνακα με δεδομένα $cat = getCat($mysqli); //Δημιουργία ενός μενού δέντρου $tree = getTree($cat); //Πρότυπο για την εμφάνιση ενός μενού με τη μορφή μιας συνάρτησης δέντρου tplMenu($category)( $menu = "- ". showCat($category["childs"]) ."
- ".$cat_menu."
Αποτέλεσμα εργασίας
Μενού πολλαπλών επιπέδων σε PHP + MySQL για τον πίνακα διαχείρισης
Εάν θέλετε να χρησιμοποιήσετε αυτό το μενού στον πίνακα διαχείρισης του ιστότοπού σας, τότε πρέπει να ξαναγράψετε μερικές λειτουργίες tplMenu(), showCat().
".$category["title"].""; )else( $menu = " "; ) if(isset($category["childs"]))($i = 1; for($j = 0; $j< $i; $j++){ $str .= "→"; } $i++; $menu .= showCat($category["childs"], $str); } return $menu; } /** * Рекурсивно считываем наш шаблон **/ function showCat($data, $str){ $string = ""; $str = $str; foreach($data as $item){ $string .= tplMenu($item, $str); } return $string; } //Получаем HTML разметку $cat_menu = showCat($tree, ""); //Выводим на экран echo ""; ?>
Αποτέλεσμα εργασίας
Επιλέξτε Αυτοκίνητα → Mazda →→ Mazda 3 →→→ Sedan →→→ Hatchback →→ Mazda 6 →→→ Liftback →→→ Crossover →→→→ Λευκό →→→→ Κόκκινο → →→→ Μαύρο →→→→ Πράσινο → Mazda CX →→ Mazda MX → Μοτοσικλέτες Honda → Kawasaki → Harley BoatsΕκτελέστε το ληφθέν αρχείο κάνοντας διπλό κλικ (πρέπει να έχετε μια εικονική μηχανή).
3. Ανωνυμία κατά τον έλεγχο μιας τοποθεσίας για ένεση SQL
Ρύθμιση Tor και Privoxy στο Kali Linux
[Ενότητα υπό ανάπτυξη]
Ρύθμιση Tor και Privoxy στα Windows
[Ενότητα υπό ανάπτυξη]
Ρυθμίσεις διακομιστή μεσολάβησης στο jSQL Injection
[Ενότητα υπό ανάπτυξη]
4. Έλεγχος της τοποθεσίας για ένεση SQL με jSQL Injection
Η εργασία με το πρόγραμμα είναι εξαιρετικά απλή. Απλώς πληκτρολογήστε τη διεύθυνση του ιστότοπου και πατήστε ENTER.
Το παρακάτω στιγμιότυπο οθόνης δείχνει ότι ο ιστότοπος είναι ευάλωτος σε τρεις τύπους εγχύσεων SQL (οι πληροφορίες σχετικά με αυτές υποδεικνύονται στην κάτω δεξιά γωνία). Κάνοντας κλικ στα ονόματα των ενέσεων, μπορείτε να αλλάξετε τη μέθοδο που χρησιμοποιείται:
Επίσης, οι υπάρχουσες βάσεις δεδομένων μας έχουν ήδη εμφανιστεί.
Μπορείτε να δείτε τα περιεχόμενα κάθε πίνακα:
Συνήθως, το πιο ενδιαφέρον πράγμα σχετικά με τους πίνακες είναι τα διαπιστευτήρια διαχειριστή.
Αν είστε τυχεροί και βρείτε τα δεδομένα του διαχειριστή, τότε είναι πολύ νωρίς για να χαρείτε. Πρέπει ακόμα να βρείτε τον πίνακα διαχειριστή όπου θα εισαγάγετε αυτά τα δεδομένα.
5. Αναζητήστε πίνακες διαχειριστή με jSQL Injection
Για να το κάνετε αυτό, μεταβείτε στην επόμενη καρτέλα. Εδώ μας υποδέχεται μια λίστα πιθανών διευθύνσεων. Μπορείτε να επιλέξετε μία ή περισσότερες σελίδες για έλεγχο:
Η ευκολία έγκειται στο γεγονός ότι δεν χρειάζεται να χρησιμοποιήσετε άλλα προγράμματα.
Δυστυχώς, δεν υπάρχουν πολλοί απρόσεκτοι προγραμματιστές που αποθηκεύουν κωδικούς πρόσβασης σε καθαρό κείμενο. Αρκετά συχνά στη γραμμή κωδικού πρόσβασης βλέπουμε κάτι σαν
8743b52063cd84097a65d1633f5c74f5
Αυτό είναι χασίς. Μπορείτε να το αποκρυπτογραφήσετε χρησιμοποιώντας ωμή βία. Και... Το jSQL Injection έχει ενσωματωμένο brute forcer.
6. Κατακερματισμός ωμής δύναμης με χρήση jSQL Injection
Η αναμφισβήτητη ευκολία είναι ότι δεν χρειάζεται να αναζητήσετε άλλα προγράμματα. Υπάρχει υποστήριξη για πολλά από τα πιο δημοφιλή hashes.
Αυτή δεν είναι η καλύτερη επιλογή. Για να γίνετε γκουρού στην αποκωδικοποίηση των κατακερματισμών, συνιστάται το Βιβλίο "" στα Ρωσικά.
Αλλά, φυσικά, όταν δεν υπάρχει άλλο πρόγραμμα στη διάθεσή σας ή δεν υπάρχει χρόνος για μελέτη, το jSQL Injection με την ενσωματωμένη λειτουργία brute force θα σας φανεί πολύ χρήσιμο.
Υπάρχουν ρυθμίσεις: μπορείτε να ορίσετε ποιοι χαρακτήρες περιλαμβάνονται στον κωδικό πρόσβασης, το εύρος μήκους κωδικού πρόσβασης.
7. Λειτουργίες αρχείων μετά τον εντοπισμό ενέσεων SQL
Εκτός από τις λειτουργίες με βάσεις δεδομένων - την ανάγνωση και την τροποποίησή τους, εάν εντοπιστούν ενέσεις SQL, μπορούν να εκτελεστούν οι ακόλουθες λειτουργίες αρχείων:
- ανάγνωση αρχείων στον διακομιστή
- μεταφόρτωση νέων αρχείων στον διακομιστή
- ανέβασμα κελύφους στον διακομιστή
Και όλα αυτά υλοποιούνται στο jSQL Injection!
Υπάρχουν περιορισμοί - ο διακομιστής SQL πρέπει να έχει δικαιώματα αρχείων. Οι διαχειριστές του έξυπνου συστήματος τα έχουν απενεργοποιήσει και δεν θα μπορούν να αποκτήσουν πρόσβαση στο σύστημα αρχείων.
Η παρουσία προνομίων αρχείου είναι αρκετά απλό να ελεγχθεί. Μεταβείτε σε μία από τις καρτέλες (ανάγνωση αρχείων, δημιουργία κελύφους, αποστολή νέου αρχείου) και προσπαθήστε να εκτελέσετε μία από τις καθορισμένες λειτουργίες.
Μια άλλη πολύ σημαντική σημείωση - πρέπει να γνωρίζουμε την ακριβή απόλυτη διαδρομή προς το αρχείο με το οποίο θα εργαστούμε - διαφορετικά τίποτα δεν θα λειτουργήσει.
Δείτε το παρακάτω στιγμιότυπο οθόνης:
Σε οποιαδήποτε προσπάθεια λειτουργίας σε ένα αρχείο, λαμβάνουμε την ακόλουθη απάντηση: Χωρίς προνόμιο FILE(χωρίς δικαιώματα αρχείου). Και εδώ δεν μπορεί να γίνει τίποτα.
Αν αντ 'αυτού έχετε άλλο σφάλμα:
Πρόβλημα εγγραφής στο [όνομα_καταλόγου]
Αυτό σημαίνει ότι προσδιορίσατε εσφαλμένα την απόλυτη διαδρομή όπου θέλετε να γράψετε το αρχείο.
Για να μαντέψετε μια απόλυτη διαδρομή, πρέπει να γνωρίζετε τουλάχιστον το λειτουργικό σύστημα στο οποίο λειτουργεί ο διακομιστής. Για να το κάνετε αυτό, μεταβείτε στην καρτέλα Δίκτυο.
Ένα τέτοιο ρεκόρ (γραμμή Win64) μας δίνει λόγους να υποθέσουμε ότι έχουμε να κάνουμε με λειτουργικό σύστημα Windows:
Keep-Alive: timeout=5, max=99 Διακομιστής: Apache/2.4.17 (Win64) PHP/7.0.0RC6 Σύνδεση: Keep-Alive Μέθοδος: HTTP/1.1 200 OK Content-Length: 353 Ημερομηνία: Παρ, 11 Δεκ 2 11:48:31 GMT X-Powered-By: PHP/7.0.0RC6 Τύπος περιεχομένου: text/html; σύνολο χαρακτήρων=UTF-8
Εδώ έχουμε μερικά Unix (*BSD, Linux):
Μεταφορά-Κωδικοποίηση: τεμαχισμένη Ημερομηνία: Παρ, 11 Δεκεμβρίου 2015 11:57:02 GMT Μέθοδος: HTTP/1.1 200 OK Keep-Alive: timeout=3, max=100 Σύνδεση: keep-alive Content-Type: text/html X- Τροφοδοτείται από: PHP/5.3.29 Διακομιστής: Apache/2.2.31 (Unix)
Και εδώ έχουμε το CentOS:
Μέθοδος: HTTP/1.1 200 OK Λήγει: Πέμ. 19 Νοεμβρίου 1981 08:52:00 GMT Set-Cookie: PHPSESSID=9p60gtunrv7g41iurr814h9rd0; path=/ Σύνδεση: keep-alive X-Cache-Lookup: MISS από t1.hoster.ru:6666 Διακομιστής: Apache/2.2.15 (CentOS) X-Powered-By: PHP/5.4.37 X-Cache: MISS από t1.hoster.ru Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Ημερομηνία: Παρ, 11 Δεκεμβρίου 2015 12:08:54 GMT Μεταφορά-Κωδικοποίηση: τεμαχισμένο Περιεχόμενο-Τύπος: κείμενο/html; σύνολο χαρακτήρων=WINDOWS-1251
Στα Windows, ένας τυπικός φάκελος για τοποθεσίες είναι C:\Διακομιστής\δεδομένα\htdocs\. Αλλά, στην πραγματικότητα, αν κάποιος «σκέφτηκε» να φτιάξει έναν διακομιστή στα Windows, τότε, πολύ πιθανό, αυτό το άτομο δεν έχει ακούσει τίποτα για προνόμια. Επομένως, θα πρέπει να αρχίσετε να προσπαθείτε απευθείας από τον κατάλογο C:/Windows/:
Όπως μπορείτε να δείτε, όλα πήγαν καλά την πρώτη φορά.
Αλλά τα ίδια τα κελύφη jSQL Injection εγείρουν αμφιβολίες στο μυαλό μου. Εάν έχετε δικαιώματα αρχείου, τότε μπορείτε εύκολα να ανεβάσετε κάτι με μια διεπαφή ιστού.
8. Μαζικός έλεγχος τοποθεσιών για ενέσεις SQL
Και ακόμη και αυτή η λειτουργία είναι διαθέσιμη στο jSQL Injection. Όλα είναι εξαιρετικά απλά - κατεβάστε μια λίστα ιστότοπων (μπορείτε να εισαγάγετε από ένα αρχείο), επιλέξτε αυτούς που θέλετε να ελέγξετε και κάντε κλικ στο κατάλληλο κουμπί για να ξεκινήσει η λειτουργία.
Συμπέρασμα από το jSQL Injection
Το jSQL Injection είναι ένα καλό, ισχυρό εργαλείο για αναζήτηση και στη συνέχεια χρήση ενέσεων SQL που βρίσκονται σε ιστότοπους. Τα αναμφισβήτητα πλεονεκτήματά του: ευκολία χρήσης, ενσωματωμένες σχετικές λειτουργίες. Το jSQL Injection μπορεί να είναι ο καλύτερος φίλος ενός αρχαρίου όταν αναλύει ιστότοπους.
Μεταξύ των ελλείψεων, θα σημειώσω την αδυναμία επεξεργασίας βάσεων δεδομένων (τουλάχιστον δεν βρήκα αυτή τη λειτουργικότητα). Όπως συμβαίνει με όλα τα εργαλεία GUI, ένα από τα μειονεκτήματα αυτού του προγράμματος μπορεί να αποδοθεί στην αδυναμία χρήσης του σε σενάρια. Ωστόσο, σε αυτό το πρόγραμμα είναι επίσης δυνατός κάποιος αυτοματισμός - χάρη στην ενσωματωμένη λειτουργία μαζικού ελέγχου τοποθεσίας.
καθιερωμένο δείγμα και πιστοποιητικό. Για ειδική έκπτωση σε τυχόν σχολές και μαθήματα!
Στο προηγούμενο άρθρο του ιστολογίου, έγραψα για τις ενδιαφέρουσες καινοτομίες της τελευταίας έκδοσης του WordPress - έναν ειδικό μηχανισμό για τη δημιουργία και τη διαχείριση . Τώρα έχει γίνει πολύ πιο βολικό και ευκολότερο για τους απλούς χρήστες να δημιουργούν μενού διαφορετικής πολυπλοκότητας, τα οποία μπορούν να αποτελούνται όχι μόνο από σελίδες ή κατηγορίες ιστολογίου, αλλά και να έχουν συνδέσμους προς οποιαδήποτε διεύθυνση URL. Για την εμφάνιση του μενού στο πρότυπο, χρησιμοποιείται μια ειδική συνάρτηση wp_nav_menu - θα σας πω γι 'αυτό σήμερα.
Εάν δεν υπάρχει ενότητα μενού στον διαχειριστή του WordPress, μπορείτε να την ενεργοποιήσετε προσθέτοντας ειδικό κώδικα στο αρχείο functions.php
Εδώ είναι πρώτα το όνομα του μενού που δημιουργήσαμε. Αυτή είναι η χρήση μιας συνάρτησης στη γενική περίπτωση χωρίς γραφικά στοιχεία· θα χρειαστεί να εργαστείτε με αυτά λίγο διαφορετικά εκεί. Ωστόσο, η συνάρτηση wp_nav_menu μπορεί να εξαχθεί χωρίς ορίσματα, με αποτέλεσμα να "εξεταστούν" διαφορετικές καταστάσεις - πρώτα, μια αντιστοίχιση με το όνομα μενού, εάν έχει καθοριστεί τουλάχιστον ένα στοιχείο μενού για αυτήν, διαφορετικά ένα μη κενό μενού απλά θα εμφανίζεται κ.λπ. . Αλλά και πάλι, σας συμβουλεύω να χρησιμοποιήσετε απλώς τον παραπάνω κώδικα και να μην καταλάβετε τι θα πρέπει να βγάζει η συνάρτηση χωρίς ορίσματα. Η σύνταξή του είναι η εξής:
Εδώ χρησιμοποιούνται οι ακόλουθες παράμετροι:
$μενού— επιλεγμένο αναγνωριστικό για το μενού — ID, slug ή όνομα μενού.
$container- Το μενού UL είναι "τυλιγμένο" σε ένα κοντέινερ DIV από προεπιλογή χρησιμοποιώντας αυτήν τη ρύθμιση.
$container_class— υποδεικνύει την κλάση του κοντέινερ, από προεπιλογή η τιμή του είναι menu-(menu slug)-container, δηλαδή, στην περίπτωσή μας, για παράδειγμα, θα υπάρχει ένα class menu-first-container.
$container_id— μπορείτε να προσθέσετε ένα αναγνωριστικό στο κοντέινερ, που δεν καθορίζεται από προεπιλογή.
$menu_class— κλάση για το στοιχείο μενού UL, η τιμή του είναι μενού.
$menu_id— Αναγνωριστικό για το στοιχείο ul, από προεπιλογή μενού-(slug)
$ηχώ— εάν δεν θέλετε να εμφανιστεί το μενού, αλλά να επιστρέψετε την τιμή της συνάρτησης, χρησιμοποιήστε την τιμή 0 για αυτήν τη ρύθμιση.
$fallback_cb— εάν το μενού δεν υπάρχει, καλείται η συνάρτηση wp_page_menu.
$πριν— ορίζει το κείμενο που εμφανίζεται πριν από τη σύνδεση Α.
$link_before— εμφανίζει τη φράση πριν από το κείμενο του συνδέσμου, που δεν καθορίζεται.
$link_after— εμφανίζεται μετά το κείμενο του συνδέσμου, επίσης κενό.
$βάθος— ορίζει τον αριθμό των επιπέδων ιεραρχίας για την εμφάνιση του μενού· η προεπιλεγμένη τιμή 0 εμφανίζει ολόκληρο το μενού.
$walker- κάποιου είδους ακατανόητο προσαρμοσμένο "αντικείμενο περιπατητή", πιθανότατα πιο απαραίτητο από προχωρημένους προγραμματιστές.
$theme_location— η θέση θέματος όπου θα χρησιμοποιηθεί το μενού πρέπει να ενεργοποιηθεί μέσω register_nav_menu() για να μπορεί ο χρήστης να το επιλέξει. Επίσης, προφανώς, κάποιο είδος όχι εντελώς σαφούς ρύθμισης κατά την εργασία με γραφικά στοιχεία.
Παραδείγματα χρήσης της συνάρτησης wp_nav_menu
Ο απλούστερος κώδικας που δίνεται στον κώδικα είναι:
Αφαίρεση του κοντέινερ DIV από το μενού
"")); ?>
Κατ 'αρχήν, δεν υπάρχει τίποτα περίπλοκο στη δημιουργία και τη διαχείριση ενός μενού WordPress 3.0. Οι προγραμματιστές έχουν απλοποιήσει σημαντικά τη διαδικασία εργασίας και έχουν επεκτείνει τις δυνατότητες αυτού του στοιχείου πλοήγησης. Η λύση χρησιμοποιείται συχνά σε μια ποικιλία εργασιών προτύπων, για παράδειγμα, κατά τη δημιουργία για εκδόσεις για φορητές συσκευές και υπολογιστές. Λίγο αργότερα θα προσθέσω μερικά ακόμη αποσπάσματα για το θέμα.
ΥΣΤΕΡΟΓΡΑΦΟ. Φρουρά. Ένα ενδιαφέρον και χρήσιμο blog για webmasters στο SEO, όπου θα βρείτε απαντήσεις στις ερωτήσεις σας σχετικά με το SEO.
Η εταιρεία Aweb έχει καθιερωθεί εδώ και πολύ καιρό πολύ καλά στον τομέα της προώθησης ιστοσελίδων, της βελτιστοποίησης και της προώθησης μηχανών αναζήτησης στο Διαδίκτυο.
Επειδή εκθέτει τα περιεχόμενα της ενότητας menu.php. Παρακάτω θα παρουσιάσουμε τη δική μας ανάπτυξη μενού σε PHP, η οποία γράφτηκε από την αρχή στο σημειωματάριο.
Αυτός ο κώδικας θα είναι ιδιαίτερα χρήσιμος για δυναμικούς ιστότοπους που διαθέτουν προσαρμοσμένες μηχανές. Θα προσφέρω δύο επιλογές κώδικα που έχουν μικρές διαφορές (οι διαφορές θα εξηγηθούν αργότερα).
Αρχικά, θα δώσω μια κατά προσέγγιση δομή του ιστότοπου για τον οποίο είναι κατάλληλο αυτό το μενού. Η δομή του ιστότοπου πρέπει να μοιάζει με αυτό (κλασική προβολή):
/index.html /razdel_1/ /razdel_1/articles_1.html /razdel_1/articles_2.html ... /razdel_2/ /razdel_2/articles_1.html /razdel_2/articles_2.html ... ... ... /razdel_N/articles_2 .html
Ο ιστότοπος μπορεί επίσης να περιέχει υποενότητες για ενότητες:
/razdel_1/podzaderl_1/ /razdel_1/podzaderl_1/articles_1.html /razdel_1/podzaderl_1/articles_2.html ... /razdel_1/podzaderl_2/articles_1.html /razdel_1/podzaderl_2.htmlarticles_2
Αυτή η δομή θα λειτουργήσει και για το μενού μας με μικρές μόνο διαφορές.
Προτείνω να δημιουργήσετε ένα ξεχωριστό αρχείο για το μενού σε php. Για παράδειγμα, το menu.php θα ήταν ένα εξαιρετικό όνομα για ένα τέτοιο αρχείο. Για την υλοποίηση του μενού, παρέχεται επίσης ένα στυλ μενού σε CSS για να το κάνει αμέσως περισσότερο ή λιγότερο όμορφο. Φυσικά, αυτό το στυλ δίνεται μόνο για αναφορά, καθώς τα σχέδια των τοποθεσιών είναι πολύ διαφορετικά.
Κώδικας για το στυλ μενού σε CSS:
.menu ( ύψος:42px; padding:0 0 0 16px; background:url(images/spacer.png) repeat; ) .menu li ( display:block; float:left; ) .menu li.active ( φόντο: #000011 ; ) .menu a ( color:#FFF; display:block; line-height:42px; text-decoration:none; padding:0 14px; ) .menu a:hover (background:url(images/spacer.png) repeat ;)
Τώρα, ας δούμε την πρώτη επιλογή για την υλοποίηση ενός μενού στην PHP, η οποία είναι λίγο απλοποιημένη.
Η πρώτη έκδοση του κώδικα μενού στην PHP
\n"; για ($i=0;$i": " "; ηχώ " ".$array_menu[$i]["name"]." \n";) ηχώ ""; ?>
Το μενού μπορεί να χωριστεί σε δύο μέρη. Το πρώτο περιέχει τον πίνακα πληροφοριών $array_menu, ο οποίος περιέχει τα ονόματα των ενοτήτων μας με συνδέσμους προς ενότητες. Υπάρχει μια επιλογή εισαγωγής αυτών των δεδομένων στη βάση δεδομένων mySQL, αλλά δεν υπάρχει ιδιαίτερο νόημα σε αυτό, καθώς το δείγμα είναι πολύ μικρό, επομένως αυτό δεν θα επηρεάσει την ταχύτητα της εργασίας.
Το δεύτερο μέρος περιέχει την έξοδο του μενού μέσω ενός βρόχου for. Ο κύκλος συγκρίνει τη διεύθυνση τοποθεσίας με τη διεύθυνση από τον πίνακα $array_menu. Εάν υπάρχει αντιστοιχία, τότε εμφανίζουμε την επόμενη ενότητα μενού με μια ειδική ενεργή κλάση:
Η σειρά στον πίνακα θα διατηρηθεί όταν εμφανιστεί το μενού στον ιστότοπο. Δηλαδή, ο πίνακας πρέπει να συμπληρωθεί με τη σειρά που πρέπει να εμφανίζεται το μενού.
Σημείωση:
Εάν οι διευθύνσεις URL (διευθύνσεις) των επικεφαλίδων των ενοτήτων μοιάζουν με:
/τμήμα 1
ή σαν αυτό
/razdel_1/nazvanie_razdela.html
τότε πρέπει να γράψετε μια ακριβή αντιστοίχιση στο array_menu:
$array_menu[$i]["url"]="/razdel_1"
ή για τη δεύτερη περίπτωση:
$array_menu[$i]["url"]="/razdel_1/nazvanie_razdela.html";
Πώς λειτουργεί η πρώτη επιλογή μενού;
Επισημαίνει το μενού μόνο εάν βρίσκεστε στη διεύθυνση κεφαλίδας ενότητας. Για παράδειγμα, εάν η διεύθυνση της σελίδας είναι /razdel_1/articles_1.html, τότε το μενού δεν θα επισημανθεί με κανέναν τρόπο.
Η δεύτερη έκδοση του κώδικα είναι μια τροποποιημένη έκδοση της πρώτης και παρέχει τη δυνατότητα επισήμανσης μενού ακόμη και σε άρθρα που βρίσκονται σε ενότητες.
Η δεύτερη έκδοση του κώδικα μενού στην PHP
"; για ($i=0;$i": " "; echo "".$array_menu[$i]["title"]." "; ) else ( echo ($URL) == ($array_menu[$i]["url"]) ? "": " "; echo "".$array_menu[$i]["title"]." "; ) ) ηχώ ""; ?>
Εάν σας ενδιαφέρει η απάντηση στην ερώτηση πώς να δημιουργήσετε ένα μενού ιστότοπου, τότε έχετε έρθει στη σωστή διεύθυνση.
Θα εξετάσουμε τη δημιουργία ενός δυναμικού μενού στην PHP, γραμμένο ειδικά για προγραμματισμό ανδρείκελων, καθώς και για όσους βρίσκονται ακόμα στη δεξαμενή.
Μάθημα 3. Δημιουργία μενού σε php για δυναμική ιστοσελίδα - για ανδρείκελα
Ας δημιουργήσουμε τη μελλοντική διάταξη της ιστοσελίδας μας. Για να το κάνουμε αυτό, θα σχεδιάσουμε έναν πολύ όμορφο ιστότοπο στο Photoshop και θα τον κόψουμε σε κομμάτια. Ας φανταστούμε ότι η κεφαλίδα, το λογότυπο, το μενού και το υποσέλιδο δεν είναι γραμμένα με λέξεις, όπως σε αυτό το παράδειγμα, αλλά πρόκειται για κομψά και χρωματιστά σχεδιασμένα στοιχεία του ιστότοπου.
Ας δημιουργήσουμε τρεις σελίδες για παράδειγμα και ας τις ονομάσουμε Ενότητα 1, Ενότητα 2, Ενότητα 3
Αυτό το κείμενο θα είναι διαφορετικό για διαφορετικές σελίδες, αλλά δεν θα ασχοληθούμε με αυτό και θα το αφήσουμε όπως είναι σε όλες τις σελίδες.
Ας ξεκινήσουμε τη δημιουργία ενός ιστότοπου σε PHP.
1. Επιλέξτε τα μπλοκ κεφαλίδας, λογότυπου, μενού, υποσέλιδου σε ξεχωριστά αρχεία με την επέκταση php ή html
header.html
logo.html
menu.html
footer.html
Ας προσθέσουμε ένα αρχείο με αυτό το κείμενο για να μπορούμε να το δούμε σε όλες τις σελίδες. Ας τον φωνάξουμε text.html
Σημείωση. Από εδώ και στο εξής, θα κρατάω περαιτέρω αρχεία απευθείας στο αρχείο. text.html
2. Ας δημιουργήσουμε ένα πρότυπο για τον ιστότοπό μας σε PHP.
Για να το κάνουμε αυτό, θα κάνουμε ένα απλό πράγμα - αποθηκεύουμε το πραγματικό αρχείο, αλλά με την επέκταση php και σβήνουμε όλο το περιεχόμενο κειμένου. Μπορεί να μην είναι επαγγελματικό, αλλά είναι κατανοητό, αλλά θα τα περιπλέκουμε όλα αργότερα. Τώρα το κύριο πράγμα είναι να κατανοήσουμε την αρχή της διάταξης.
3. Τώρα δεν χρειαζόμαστε το αρχείο template.html.
Χάρη σε αυτόν, έχουμε μια ιδέα για το πώς θα μοιάζει ο ιστότοπός μας.
4. Το πρότυπό μας είναι αρχείο template.php
Τώρα θα εισαγάγουμε όλα τα στοιχεία του ιστότοπου σε αυτόν χρησιμοποιώντας την εντολή include.
5. Ας δημιουργήσουμε τρεις σελίδες, όπως θα κάναμε αρχικά.
Τμήμα 1, ας καλέσουμε 1.php
Τομέας 2, ας καλέσουμε 2.php
Ενότητα 3, ας καλέσουμε 3.php
Για να το κάνετε αυτό, μπορείτε να χρησιμοποιήσετε την απλούστερη εντολή αποθήκευση ως...
Να εξηγήσω για τους μικρούς: ανοίξτε το αρχείο template.php, μετά πατήστε αποθήκευση ως...και αποθηκεύστε το με το όνομα 1.php, επαναλάβετε τη διαδικασία και αποθηκεύστε τις σελίδες του ιστότοπου διαδοχικά 2.php, 3.php
Καταλήξαμε σε 3 σελίδες με το ίδιο σχέδιο. Απλώς επικολλήστε το αντί για αρχείο text.htmlάλλο, συμπληρώστε με διαφορετικές εικόνες ή κάποιους κώδικες html, σενάρια και το περιεχόμενο κάθε σελίδας θα είναι μοναδικό.
Προσοχή!
Εάν το αρχείο δεν έχει δημιουργηθεί index.phpγια την κύρια σελίδα, στη συνέχεια στο πρόγραμμα περιήγησης, πληκτρολογώντας τη διεύθυνση του ιστότοπου, δεν θα δούμε τον ίδιο τον ιστότοπο, αλλά μόνο τη δομή του καταλόγου (λίστα φακέλων).
Μπορείτε να κοιτάξετε στο Ντένβερ και να δείτε μόνοι σας. Ας διορθώσουμε την κατάσταση - δημιουργήστε ένα αρχείο index.phpκαι ας τηλεφωνήσουμε χωρίς άλλη καθυστέρηση Σπίτι. Ταυτόχρονα, ας δημιουργήσουμε ένα αρχείο text-home.htmlκαι χρησιμοποιώντας την εντολή περιλαμβάνωτοποθετήστε το στη νέα κύρια σελίδα του ιστότοπου.
6. Πώς μπορώ να προβάλω έναν ιστότοπο σε php;
Απλώς δεν θα δούμε τι έγινε. Αυτό δεν είναι πλέον πρότυπο με επέκταση html.
Αλλά ούτε πρόβλημα. Χρειαζόμαστε το δικό μας, δηλ. τοπικός διακομιστής στον υπολογιστή σας. Για να το κάνουμε αυτό, θα εγκαταστήσουμε το Denver και θα δούμε το αποτέλεσμα της δουλειάς μας σε ένα πρόγραμμα περιήγησης χωρίς σύνδεση στο διαδίκτυο.
Τώρα αυτή είναι η σειρά. Πληκτρολογούσα τη διεύθυνση του ιστότοπου και είδα όλα όσα μόλις είχαν δημιουργηθεί σε κανονική μορφή με σχέδιο.
Τώρα ας πάρουμε το μενού PHP του ιστότοπου.
1. Ανοίξτε το μενού αρχείου.html και μετατρέψτε τις ενότητες 1, 2 και 3 σε συνδέσμους στον ιστότοπο. Οι σύνδεσμοι στην PHP δημιουργούνται με διαφορετικούς τρόπους.
Το καθήκον μας είναι να μάθουμε πώς να αισθανόμαστε τον ιστότοπο που δημιουργήθηκε σε PHP. Επομένως, θα δημιουργήσουμε συνδέσμους όπως σε μια κανονική στατική τοποθεσία Ενότητα 1, κ.λπ.
Μου αρέσει πολύ αυτή η διαδικασία δημιουργίας συνδέσμων στο Macromedia Dreamweaver. Έχετε χρόνο να θερίσετε Εντάξεικαι πιείτε καφέ.
2. Πώς να κάνετε έναν σύνδεσμο στο μενού ανενεργό εάν ο επισκέπτης βρίσκεται σε αυτήν τη σελίδα.
Θα είναι πιο βολικό για τον επισκέπτη να πλοηγηθεί στον ιστότοπο γνωρίζοντας σε ποια σελίδα βρίσκεται.
Εάν έχετε ακολουθήσει όλα τα βήματα αυστηρά σημείο προς σημείο, θα δείτε ότι όλοι οι σύνδεσμοι στο μενού είναι πάντα ενεργοί. Πώς να το διορθώσετε;
Αρχικά, ας θυμηθούμε τον ορισμό του τι είναι Δηλώσεις υπό όρους
– αυτό συμβαίνει όταν κάποια ενέργεια εκτελείται ή δεν εκτελείται ανάλογα με τις συνθήκες.
Ας κάνουμε τα εξής:
- Θα χρειαστούμε μεταβλητέςκαι ένα υπό όρους χειριστή:
if ($master == "Κύρια")// αυτή η συνθήκη. Εάν εκτελεστεί, τότε σε αυτή τη θέση του μενού, χρησιμοποιώντας την εντολή echo, εισάγονται συνηθισμένες ετικέτες HTML που εμφανίζουν την επιγραφή "Home".
ηχώ "
Σπίτι
";αλλού// σημαίνει "αλλιώς" - τι θα συμβεί εάν δεν πληρούται η προϋπόθεση. Σε αυτήν την περίπτωση, εάν δεν πληρούται η προϋπόθεση, η επιγραφή "Αρχική σελίδα" θα είναι ένας σύνδεσμος που οδηγεί στην κύρια σελίδα.
ηχώ "
Σπίτι
";- Καταλήξαμε στον όρο, αλλά έτσι έλεγχος μεταβλητής – πρέπει να το ρωτήσεις.
Για να γίνει αυτό, θα τοποθετήσουμε τα ακόλουθα μπλοκ κώδικα σε όλες τις σελίδες:
$master = "Κύρια";
$master = "Ενότητα 1";
$master = "Ενότητα 2";
$master = "Ενότητα 3";
Όπως μπορείτε να δείτε, κάθε σελίδα έχει τον δικό της κώδικα.
Έτσι, τα πρακτικά μας βήματα για τη δημιουργία ενός μενού PHP θα είναι τα εξής:
1) Ανοίξτε το αρχείο index.php
και επικολλήστε τον κωδικό
$master = "Κύρια";
στο σημείο όπου εισάγετε τον κωδικό που εμφανίζει το ίδιο το μενού τοποθεσίας συμπεριλάβετε το "menu.html"?
?>
2) Ανοίξτε το αρχείο menu.htmlκαι εισάγετε τον κώδικα με τη συνθήκη αντί για έναν απλό σύνδεσμο html στην κύρια σελίδα.
Κοιτάμε στο πρόγραμμα περιήγησης και θαυμάζουμε! Αν πάμε στην κεντρική σελίδα, ο σύνδεσμος δεν είναι πλέον ενεργός!
3) Επαναλάβετε τα σημεία 1 και 2 με τις σελίδες 1.php, 2.php, 3.php
Επανάληψη 1:
1) Ανοίξτε το αρχείο 1.php και εισάγετε πριν από τον κώδικα που εμφανίζει ένα μπλοκ μενού με μια δεδομένη μεταβλητή
$master = "Ενότητα 1";
2) Ανοίξτε το αρχείο menu.html και εισαγάγετε τον κωδικό με την συνθήκη αντί για έναν απλό σύνδεσμο Τμήμα 1, κάνοντας τις ακόλουθες αλλαγές:
if ($master == "Ενότητα 1")// αυτή η συνθήκη. Εάν εκτελεστεί, τότε σε αυτή τη θέση του μενού, χρησιμοποιώντας την εντολή echo, εισάγονται συνηθισμένες ετικέτες HTML που εμφανίζουν την επιγραφή "Section 1".
ηχώ "
Τμήμα 1
";αλλού// σημαίνει "αλλιώς" - τι θα συμβεί εάν δεν πληρούται η προϋπόθεση. Σε αυτήν την περίπτωση, εάν δεν πληρούται η προϋπόθεση, η επιγραφή "Section 1" θα είναι ένας σύνδεσμος που οδηγεί στην κύρια σελίδα.
ηχώ "
Τμήμα 1
";Το θαύμα έγινε ξανά! Τώρα αν είμαστε στη σελίδα Τμήμα 1, ο σύνδεσμος στο μενού δεν είναι ενεργός.
Η επανάληψη είναι η μητέρα της μάθησης! Ή για αυτούς στο τανκ! Πάλι
Επανάληψη 2
1) Ανοιχτό αρχείο 2.phpκαι επικολλήστε τον κωδικό.
$master = "Ενότητα 2";
2) Ανοίξτε ξανά το αρχείο menu.html και επικολλήστε τον κώδικα με την συνθήκη
if ($master == "Ενότητα 2")// αυτή η συνθήκη. Εάν εκτελεστεί, τότε σε αυτή τη θέση του μενού, χρησιμοποιώντας την εντολή echo, εισάγονται συνηθισμένες ετικέτες HTML που εμφανίζουν την επιγραφή "Section 2".
ηχώ "
Τομέας 2
";αλλού// σημαίνει "αλλιώς" - τι θα συμβεί εάν δεν πληρούται η προϋπόθεση. Σε αυτήν την περίπτωση, εάν δεν πληρούται η προϋπόθεση, η επιγραφή "Section 2" θα είναι ένας σύνδεσμος που οδηγεί στην κύρια σελίδα.
ηχώ "
Τομέας 2
";Επανάληψη 3
1) Ανοιγμα αρχείο 3.phpκαι ορίστε τη μεταβλητή.
$master = "Ενότητα 3";
2) Στο αρχείο menu.html εισάγουμε τον κωδικό με μια συνθήκη αντί για έναν σύνδεσμο Ενότητα 3, οι αλλαγές είναι:
if ($master == "Ενότητα 3")// αυτή η συνθήκη. Εάν εκτελεστεί, τότε σε αυτή τη θέση του μενού, χρησιμοποιώντας την εντολή echo, εισάγονται συνηθισμένες ετικέτες HTML που εμφανίζουν την επιγραφή "Section 3".
ηχώ "
Ενότητα 3
";αλλού// σημαίνει "αλλιώς" - τι θα συμβεί εάν δεν πληρούται η προϋπόθεση. Σε αυτήν την περίπτωση, εάν δεν πληρούται η προϋπόθεση, η επιγραφή "Section 3" θα είναι ένας σύνδεσμος που οδηγεί στην κύρια σελίδα.
ηχώ "
Ενότητα 3
";Συμπέρασμα: αντί για συνδέσμους σε αυτόν τον τύπο μενού
Σπίτι
Τμήμα 1
Τομέας 2
Ενότητα 3
Αυτό το μάθημα για την php γράφτηκε ως απάντηση σε πολυάριθμα αιτήματα από επισκέπτες του ιστότοπου και είναι ένας πρακτικός οδηγός για να μάθετε πώς να δημιουργείτε ένα δυναμικό μενού για έναν ιστότοπο σε php.
Το επόμενο φύλλο εξαπάτησης του webmaster θα σας πει πώς να δημιουργήσετε μοναδικούς τίτλους, περιγραφές και λέξεις-κλειδιά για κάθε σελίδα στην PHP.
Μπορείτε να κάνετε λήψη του αρχείου με όλα τα πρότυπα του ιστότοπου και τα αρχεία μενού php. Συνιστάται για νέους στον προγραμματισμό.
Εάν είστε έτοιμοι να μελετήσετε σοβαρά την PHP, τότε είναι δύσκολο να βρείτε ένα καλύτερο μάθημα βίντεο από τον Popov. Έχει μεγάλη εμπειρία και καλό στυλ.
]]> ]]>