Heute ist es unser Ziel, eine hierarchische Struktur von Kategorien zu schaffen. Uns ist wichtig, dass Kategorien bequem gespeichert und einfach dort angezeigt werden können, wo wir sie brauchen.
Manchmal erscheint das Einfache kompliziert, deshalb lege ich ein paar Codeschnipsel an, von denen ich hoffe, dass sie Ihnen bei der Implementierung von PHP-Kategorien in Form eines Baums nützlich sein werden.
Die Struktur sollte also aus der Kategorie-ID (id), dem Kategorienamen (name) und natürlich der übergeordneten Kategorie-ID (parent_id) bestehen. In MySQL sieht das so aus:
CREATE TABLE IF NOT EXISTS `category` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `parent_id` int(11) NOT NULL, PRIMARY KEY (`id`)) ENGINE =InnoDB-STANDARDZEICHENSATZ=utf8 AUTO_INCREMENT=0 ;
Minimale und verständliche Tabellenstruktur zum Speichern von Kategorien.
INSERT INTO `category` (`id`, `name`, `parent_id`) WERTE (1, „Telefone und Tablets“, „0“), (2, „Autos“, „0“), (3, „Samsung ", "1"), (4, "Apple", "1"), (5, "LG", "1"), (6, "Ford", "2"), (7, "Lexus", „2“), (8, „BMW“, „2“), (9, „ Galaxy Tab 4", "3"), (10, "Galaxy S6", "3");
Wenn parent_id=0, hat diese Kategorie keine übergeordnete Kategorie.
Hier ist alles klar und einfach. Kommen wir nun zur Auflistung der Kategorien. Aber für die korrekte Ausgabe der Liste müssen wir zuerst die gesamte Liste der PHP-Kategorien erhalten und erst dann unseren Baum rekursiv bilden. Die folgende Funktion dient zum Abrufen dieser Liste:
Funktion get_cat() ( // Abfrage der Datenbank $sql = "SELECT * FROM category"; $result = mysql_query($sql); if(!$result) ( return NULL; ) $arr_cat = array(); if( mysql_num_rows ($Ergebnis) != 0) ( //For($i = 0; $i< mysql_num_rows($result);$i++) { $row = mysql_fetch_array($result,MYSQL_ASSOC); //Формируем массив, где ключами являются адишники на родительские категории if(empty($arr_cat[$row["parent_id"]])) { $arr_cat[$row["parent_id"]] = array(); } $arr_cat[$row["parent_id"]] = $row; } //возвращаем массив return $arr_cat; } }
//das Katalog-Array abrufen $result = get_cat();
Jetzt brauchen wir eine Funktion mit Rekursion
Funktion view_cat($arr,$parent_id = 0) ( //Rekursionsbedingungen if(empty($arr[$parent_id])) ( return; ) echo "
- "; // Durchlaufe das Array und zeige for($i = 0; $i< count($arr[$parent_id]);$i++) {
echo "
- " .$arr[$parent_id][$i]["name"].""; //Rekursion - prüfen, ob untergeordnete Kategorien vorhanden sind view_cat($arr,$arr[$parent_id][$i]["id "] ); echo " "; ) echo "
Jetzt muss nur noch das Verzeichnis mit der rekursiven Funktion auf dem Bildschirm angezeigt werden
View_cat($ergebnis);
Und im Allgemeinen ist das alles. Auf diese Weise können wir einen vollständigen Kategorienbaum mit unendlichen Unterkategorien erhalten.
) Ich habe Ihnen ein Beispiel für die Verwendung regulärer Ausdrücke gezeigt, um bestimmte Teile zu finden Quellcode Seiten. Jetzt lernen wir, wie man sie selbst schreibt. Diese Fähigkeit hilft Ihnen beim Schreiben, Text von unnötigen Fragmenten zu befreien, in großen Textmengen nach den richtigen Teilen zu suchen und so weiter.
Erscheinungsdatum: 20.10.2013
Wir schreiben weiterhin einen Parser für Live-Internet-Besucherstatistiken. Wenn sich gerade jemand bei uns angemeldet hat, dann rate ich Ihnen, damit zu beginnen, wo wir uns ohne Autorisierung mit dem Dienst verbunden haben. Dort haben wir gelernt, wie man Inhalte von geöffneten Seiten erhält, die nicht passwortgeschützt sind. Tatsächlich ist der Zugriff auf die meisten Sites jedoch gesperrt, sodass ein Skript, das nicht weiß, wie man sich anmeldet, wenig Sinn macht, wie Sie verstehen. Aber keine Sorge, wir werden es jetzt beheben.
Erscheinungsdatum: 08.10.2013
Guten Tag, Leser! Es ist Zeit, etwas Übung zu bekommen. Sie haben bereits genug Wissen, um nützliche Skripte zu schreiben, die Ihnen die Arbeit erleichtern. Einer davon kann ein Parser sein. Was es ist, habe ich in meinem eigenen ausführlich beschrieben. Wenn Sie es also nicht wissen, rate ich Ihnen, es zu lesen. Kurz gesagt besteht die Essenz des Parsers darin, zu suchen und zu isolieren notwendige Informationen aus einem großen Text. Im Fall des Internets zieht dies meistens die erforderlichen Daten von den Seiten der Sites heraus. In unserem Fall ist dies Liveinternet. So lass uns gehen!
Erscheinungsdatum: 10.03.2013
Dieser Artikel konzentriert sich auf ein so leistungsstarkes Tool wie cURL sowie auf eine PHP-Bibliothek, die den Zugriff auf dieses Tool ermöglicht – libcurl. Wozu das alles? Zur Kommunikation mit dem Server über Datenübertragungsprotokolle wie http oder ftp. Der Rest der Protokolle ist für uns nicht besonders interessant, wenn sich jemand mit diesem Thema vertiefen möchte, muss er englischsprachige Ressourcen ausgraben, und dieser Artikel enthält die Grundlagen und Anwendungsbeispiele.
Erscheinungsdatum: 24.11.2012
Erscheinungsdatum: 05.11.2012
Und jetzt gibt es eine ziemlich große, aber nicht komplizierte Lektion über die Arbeit mit Dateien in PHP. Zunächst einmal, wofür sind die Dateien? Schließlich können Sie alles in der Datenbank speichern MySQL-Daten oder PostgreSQL oder was auch immer. Aber manchmal gibt es solche Aufgaben, wenn die Verwendung der Datenbank mit all der Verarbeitung und Sorge um die Sicherheit der Verbindung nicht ratsam ist. Zum Beispiel müssen Sie einen regulären Zähler erstellen, und davor haben wir in unserem Projekt keine Datenbank verwendet. Warum sollten wir also wegen eines winzigen Zählers eine Datenbank starten und nur ein paar Zeilen darin speichern? Es ist viel einfacher, Dateien zu verwenden. Außerdem unterstützt das Hosting manchmal Datenbanken überhaupt nicht, dann bleiben Dateien im Allgemeinen der einzige Ausweg.
Erscheinungsdatum: 04.11.2012
Wenn Sie Ihren Benutzern erlauben, Text (Name oder andere Informationen) an Ihre Website zu senden, müssen Sie vorsichtig sein. Sie müssen sicher sein, dass Sie keine Sicherheitslücken auf der Website haben, die Angreifer zum Hacken verwenden können. Wenn Sie dennoch Daten vom Benutzer erhalten müssen, verwenden Sie unbedingt die htmlentities-Funktion, um zu verhindern, dass HTML-Code oder Skripts ausgeführt werden, die schädlich und gefährlich sein können!
Erscheinungsdatum: 04.11.2012
In dieser Lektion werden wir uns Techniken zum Übergeben von Daten zwischen Formularen und Seiten ansehen. Diese Methoden sind POST und GET. Wir werden über jedes einzeln und ausführlicher sprechen. Im Allgemeinen ist es für die Kommunikation zwischen Formularen erforderlich. Zum Beispiel füllen wir einige Felder auf der Seite aus und müssen sie zur Verarbeitung auf eine andere Seite übertragen.
Erscheinungsdatum: 03.11.2012
Wie Sie vielleicht schon erraten haben, ist die do while-Schleife eine leicht modifizierte Version der while-Schleife, die wir in früheren Tutorials gesehen haben. Wenn Sie sich daran erinnern, wie das normale while funktioniert, dann wird es Ihnen leichter fallen, die neue Schleife zu verstehen. Wiederholen wir: Der Körper der While-Schleife wird ausgeführt, wenn die Bedingung wahr ist, und nicht ausgeführt, wenn sie nicht wahr ist, aber sie kann nicht einmal ausgeführt werden, wenn die Bedingung von Anfang an falsch ist. Wie funktioniert do while?
Erscheinungsdatum: 03.11.2012
Stellen Sie sich vor, Sie haben ein assoziatives Array, über das Sie iterieren möchten. PHP bietet eine einfache Möglichkeit, jedes Element eines Arrays der Reihe nach mit dem Foreach-Konstrukt zu verwenden.
Gibt ein Array von Objekten mit Kategorieinformationen zurück.
Die an diese Funktion übergebenen Parameter sind den an die Funktion wp_list_categories() übergebenen Parametern sehr ähnlich und können entweder als Array oder als Abfragezeichenfolge übergeben werden: type=post&order=DESC .
✈ 1 Mal = 0,005625 s = So langsam| 50000 mal = 11,98s = langsam| PHP 7.1.11, WP 4.9.5
Verwendung
$kategorien = get_categories($args);Nutzungsmuster
$categories = get_categories(array("taxonomy" => "category", "type" => "post", "child_of" => 0, "parent" => "", "orderby" => "name", " order" => "ASC", "hide_empty" => 1, "hierarchical" => 1, "exclude" => "", "include" => "", "number" => 0, "pad_counts" => FALSCH, // volle Liste Parameter, siehe Beschreibung der Funktion http://wp-kama.ru/function/get_terms)); if($categories)( foreach($categories as $cat)( // Daten im $cat-Objekt // $cat->term_id // $cat->name (Kategorie 1) // $cat->slug (Rubrika - 1) // $cat->term_group (0) // $cat->term_taxonomy_id (4) // $cat->Taxonomy (Kategorie) // $cat->description (Beschreibungstext) // $cat-> parent (0) // $cat->count (14) // $cat->object_id (2743) // $cat->cat_ID (4) // $cat->category_count (14) // $cat-> category_description (Beschreibungstext) // $cat->cat_name (Kategorie 1) // $cat->category_nicename (rubrika-1) // $cat->category_parent (0) ) ) Taxonomie (Linie) Der Name der zu verarbeitenden Taxonomie. Seit Version 3.0 hinzugefügt.Standard: "Kategorie" Art (Linie)
- post - Beitragskategorien (Standard);
- link - Abschnitte von Links.
Standard: "posten"
Default: "" Sortieren nach (Linie)
Sortieren der empfangenen Daten nach bestimmten Kriterien. Zum Beispiel nach der Anzahl der Beiträge in jeder Kategorie oder nach Kategorienamen. Folgende Kriterien stehen zur Verfügung:
- ID - Sortierung nach ID;
- name - nach Namen sortieren (Standard);
- slug - Sortierung nach alt. Name (Schnecke);
- count - nach der Anzahl der Einträge in der Kategorie;
- term_group - nach Gruppe.
Standard: "Name"
Befehl (Linie)
Die im Parameter "orderby" angegebene Sortierrichtung:
- ASC - in der Reihenfolge vom kleinsten zum größten (1, 2, 3; a, b, c);
- DESC - in umgekehrter Reihenfolge, vom größten zum kleinsten (3, 2, 1; c, b, a).
Voreinstellung: "ASC"
Ausblenden_leer (logisch)
Ob leere Kategorien (keine Einträge) erhalten werden sollen oder nicht:
- 1 (wahr) - nicht leer erhalten,
- 0 (falsch) - leer werden.
Standard: wahr
Hierarchisch (logisch) Wenn der Parameter auf eingestellt ist Stimmt, enthält das Ergebnis leere untergeordnete Kategorien, deren untergeordnete Kategorien Einträge enthalten (nicht leer).
Standard: wahr ausschließen (String/Array) Schließen Sie alle Kategorien aus der Liste aus. Sie müssen Kategorie-IDs durch Kommas getrennt oder in einem Array angeben. Wenn dieser Parameter angegeben ist, wird der Parameter child_of überschrieben.
Default: "" enthalten (String/Array) Nur die angegebenen Kategorien auflisten. Sie müssen Kategorie-IDs durch Kommas getrennt oder in einem Array angeben.
Default: "" Anzahl (Anzahl) Grenze. Die Anzahl der abzurufenden Kategorien. Standardmäßig keine Einschränkungen – alle Kategorien werden abgerufen. pad_counts (logisch) Wenn wahr, dann ist die Zahl, die die Anzahl der Einträge in den übergeordneten Kategorien anzeigt, die Summe ihrer eigenen Einträge und Einträge aus untergeordneten Kategorien.
Standard: falsch
Beispiele
#1 Dropdown-Liste
Um eine Dropdown-Liste mit Kategorien zu erstellen, können wir eine weitere spezielle Funktion wp_dropdown_categories() verwenden:
wp_dropdown_categories(array("hide_empty" => 0, "name" => "category_parent", "orderby" => "name", "s selected" => $category->parent, "hierarchical" => true, "show_option_none" => __("Keine")));
Bei diesem Ansatz verlieren wir jedoch etwas Flexibilität beim Erstellen der Liste, da wir am Ende eine vollständig erstellte Liste erhalten.
Daher ist es in einigen Fällen logischer, eine Dropdown-Liste mit der Funktion zu erstellen get_categories(). Hier ist ein Beispiel (angenommen, wir möchten die Unterkategorien (Kinder) der Kategorie 10 anzeigen):
#2 Liste der Kategorien und deren Beschreibung
Dieses Beispiel zeigt uns, wie man Links zu Kategorien auflistet, wobei unmittelbar nach jedem Link eine Beschreibung der Kategorie erscheint (wird beim Erstellen / Bearbeiten einer Kategorie angegeben):
"Name", "Auftrag" => "ASC")); foreach($categories as $category)( echo "
Kategorie: term_id) . ""title="" . sprintf(__("Alle Beiträge in %s anzeigen"), $category->name) . "" " . ">" . $kategorie->name."
"; Echo"Beschreibung:". $category->description . "
"; Echo"Anzahl der Beiträge: ". $category->count . "
"; } ?>Anmerkungen
- Siehe: get_terms() Art der Argumente, die geändert werden können.
Liste der Änderungen
Seit Version 2.1.0 | Eingeführt. |
Der Code getcategories : wp-includes/category.php WP 5.3.2
"Kategorie"); $args = wp_parse_args($args, $defaults); /** * Filtert die Taxonomie, die zum Abrufen von Begriffen verwendet wird, wenn get_categories() aufgerufen wird. * * @seit 2.7.0 * * @param string $taxonomy Taxonomie, aus der Begriffe abgerufen werden. * @param array $args Ein Array von Argumenten. Siehe get_terms(). */ $args["Taxonomie"] = apply_filters("get_categories_taxonomy", $args["Taxonomy"], $args); // Rückwärtskompatibilität if (isset($args["type"]) && "link" == $args["type"]) ( _deprecated_argument(__FUNCTION__, "3.0.0", sprintf(/* translaters: 1: " type => link", 2: "taxonomy => link_category" */ __("%1$s ist veraltet. Verwenden Sie stattdessen %2$s."), "geben Sie => Link ein
",
"Taxonomie => link_category
")); $args["taxonomy"] = "link_category"; ) $categories = get_terms($args); if (is_wp_error($categories)) ( $categories = array(); ) else ( $categories = (array ) $categories; foreach (array_keys($categories) as $k) ( _make_cat_compat($categories[ $k ]); ) ) return $categories; ) In diesem Artikel (Webmaster-Level - Fortgeschrittene) werden wir auf unterschiedliche Weise über die sogenannten sprechen. Facettennavigation. Um die Aneignung des Materials zu vereinfachen, empfehle ich, den Wikipedia-Artikel „Facet-Klassifikation“ und Veröffentlichungen in englischer Sprache (aber mit Bildern!) „Design better faceted navigation for your websites“ durchzugehen.
Facettennavigation, gefiltert nach Farbe oder Preisspanne, kann für Ihre Besucher nützlich sein, ist aber oft nachteilig für die Suche, da mehrere Adresskombinationen mit doppeltem Inhalt erstellt werden. Aufgrund von Duplikaten können Suchmaschinen die Website nicht schnell nach Inhaltsaktualisierungen durchsuchen, was sich entsprechend auf die Indexierung auswirkt. Um dieses Problem zu minimieren und Webmastern dabei zu helfen, die facettierte Navigation suchfreundlich zu gestalten, möchten wir Folgendes tun:
Ideal für Benutzer und die Google-Suche
Eindeutiger Pfad zu Produkt-/Artikelseiten:
Stellt die URL für die Kategorieseite dar:
http://www.example.com/category.php?category=gummy-candies
Stellt eine URL für ein bestimmtes Produkt dar:
http://www.example.com/product.php?item=swedish-fish
Unerwünschte Duplikate durch facettierte Navigation
Auf dieselbe Seite kann von verschiedenen Webadressen aus zugegriffen werden:
Kanonische Seite
URL: example.com/produkt.php? item=schwedischer Fisch
Seite duplizieren
URL:beispiel.com/produkt.php? item=schwedischer-fisch&category=gummibonbons&preis=5-10
category=gummibonbons&taste=sauer&preis=5-10
Fehler:
- Macht für Google keinen Sinn, da Nutzer selten nach [$9:55 Marmelade] suchen.
- Es macht für Crawler keinen Sinn, denselben Artikel ("Obstsalat") auf übergeordneten Kategorieseiten zu finden (entweder "Gummi" oder "Sauergummi").
- Ein negativer Punkt für den Websitebesitzer, da Indexanfragen mit mehreren Versionen derselben Kategorie verwässert werden.
- Ein negativer Punkt für den Websitebesitzer, da die Bandbreite der Website nutzlos und unnötig belastet wird
URL: example.com/category.php? category=gummibonbons&taste=sauer&preis=über-10
Fehler:
- Falsch angegebener Code für Suchmaschinen (in diesem Fall sollte die Seite den Code 404 angeben)
- Leere Seite für Benutzer
Schlechteste (nicht suchfreundliche) Lösungen für facettierte Navigation
Beispiel 1: In der URL werden nicht standardmäßige Parameter verwendet: Kommas und Klammern statt Schlüssel=Wert&:
- example.com/category? [Kategorie:Gummibonbons] [Sortieren:Preis-niedrig-bis-hoch]][sid:789]
- example.com/category?category , gummibonbons , sort , lowtohigh , sid , 789
example.com/category? category=gummibonbons&sort=low-to-high&sid=789
Beispiel #2: Verwenden von Verzeichnissen oder Dateipfaden anstelle von Optionen in Wertelisten, die den Inhalt der Seite nicht ändern:
example.com/c123/s789/product?swedish-fish
(wobei /c123/ die Kategorie ist, /s789/ die Sitzungs-ID, die den Inhalt der Seite nicht ändert)
Gute Entscheidung:
- example.com /gummibonbons/ product?item=schwedischer-fisch&sid=789(das Verzeichnis /gummy-candy/ verändert den Inhalt der Seite sinnvoll)
- example.com/product?item=schwedischer-fisch& category=gummibonbons&sid=789 (URL-Parameter geben Suchmaschinen mehr Flexibilität, um festzulegen, wie effizient gecrawlt werden soll)
Zu den gängigen Werten, die den Inhalt der Seite nicht verändern und als URL-Parameter aufgeführt werden sollten, gehören:
- Session-ID
- ID-Verfolgung
- Referrer-Identifikatoren
- Zeitstempel
Verwendung von geringfügigen Daten, die von Website-Benutzern generiert wurden (z. B. Längengrad/Breitengrad oder „vor Tagen“) in gecrawlten und indexierten URLs:
- example.com/find-a-doctor? Radius=15&Breitengrad=40.7565068&Längengrad=-73.9668408
- example.com/article?category=health& Vor Tagen = 7
- example.com/find-a-doctor? city=san-francisco&neighborhood=soma
- example.com/articles?category=health& Datum = 10. Januar 2014
- beispiel.com /filtern/ suche-einen-arzt?radius=15&latitude=40.7565068&longitude=-73.9668408
- beispiel.com /filtern/ article?category=health&days-ago=7
User-Agent: *
Nicht zulassen: /filtern/
Beispiel Nr. 4. URL-Parameter ohne Logik hinzufügen.
- beispiel.com /gummibonbons/lutscher/gummibonbons/ Gummibärchen/Produkt?schwedischer Fisch
- example.com/product? cat=gummibonbons&cat=lutscher&cat=gummibonbons&cat=gummibonbons&item=schwedischer-fisch
- example.com /gummy-candy/ product?item=swedish-fish
- example.com/product? item=schwedischer-fisch&category=gummibonbons
Beispiel #5: Weitere Verfeinerungen (Filterung) vorschlagen, wenn es keine Ergebnisse gibt.
Schlecht:
Erlauben Sie Benutzern, Filter auszuwählen, wenn es keine zu verfeinernden Elemente gibt.
Verfeinerung auf eine Seite mit null Ergebnissen (z. B. Preis=über-10), was Benutzer frustriert und unnötige Suchanfragen für Suchmaschinen verursacht.
Wie man:
Erstellen Sie Links nur, wenn es Elemente gibt, die der Benutzer auswählen kann. Wenn das Ergebnis Null ist, markieren Sie den Link als „grau“ (d. h. nicht anklickbar). Um die Benutzerfreundlichkeit weiter zu verbessern, sollten Sie erwägen, neben jedem Filter eine Anzeige für die Elementanzahl einzufügen.
Das Anzeigen einer Seite mit null Ergebnissen (z. B. Preis=über-10) ist nicht zulässig, außerdem ist es Benutzern verboten, unnötige Klicks zu tätigen, und Suchmaschinen, diese nicht nützliche Seite zu crawlen.
Es ist notwendig, unnötige URLs zu vermeiden und den Besucherraum zu minimieren, indem URLs nur generiert werden, wenn Produkte verfügbar sind. Dies trägt dazu bei, dass Benutzer auf Ihrer Website bleiben (weniger Klicks auf die Zurück-Schaltfläche, wenn kein Produkt gefunden wird), und die Anzahl möglicher URLs, die Suchmaschinen bekannt sind, wird reduziert. Wenn die Seite nicht nur „vorübergehend vergriffen“ ist, sondern wahrscheinlich auch nie relevante Informationen enthalten wird, ziehen Sie in Erwägung, ihr einen 404-Antwortcode zu geben. Auf der 404-Seite können Sie eine nützliche Nachricht für Benutzer mit mehr Navigationsoptionen oder einem Suchfeld entwerfen, damit Benutzer verwandte Produkte finden können.
Für neue Websites, deren Webmaster die Implementierung einer facettierten Navigation erwägen, gibt es mehrere Optionen, um das Crawling (das Sammeln von Adressen auf Ihrer Website, die dem Googlebot bekannt sind) von Seiten mit eindeutigem Inhalt zu optimieren und die Suchmaschinenindizierung doppelter Seiten zu reduzieren (Konsolidierung von Indizierungssignalen).
Bestimmen Sie, welche URL-Parameter Suchmaschinen benötigen, um jede einzelne Inhaltsseite zu crawlen (dh bestimmen Sie, welche Parameter erforderlich sind, um mindestens einen Klickpfad zu jedem Element zu erstellen). Erforderliche Parameter können Artikel-ID , Kategorie-ID , Seite usw. sein.
Bestimmen Sie, welche Parameter für Besucher bei ihren Abfragen nützlich sind und welche eher zu Duplikaten beim Crawling und Indexieren führen. Im Beispiel für Süßwaren (Marmelade) könnte der URL-Parameter "Geschmack" für Benutzer mit den Abfragen im Beispiel wertvoll sein Geschmack = sauer . Es ist jedoch logisch, den Parameter „Preis“ als unnötige Doppelung zu betrachten category=gummibonbons&taste=sauer& Preis = über-10 . Andere gängige Beispiele:
- Wertvolle Parameter für Suchmaschinen: Artikel-ID , Kategorie-ID , Name , Marke ...
- Unnötige Parameter: Session-ID , Preisspanne ...
Option 1: und interne Links
Markieren Sie alle unnötigen URLs mit dem . Dies reduziert die Arbeitskosten des Suchroboters und verhindert eine Verringerung der Scanfrequenz. Sie müssen das Crawling global über die robots.txt verwalten (Anmerkung des Übersetzers: siehe Artikel "").
Verwenden Sie das Attribut rel="canonical", um Seiten für den Suchindex von Seiten zu trennen, die dort nicht benötigt werden (beispielsweise auf der Seite page Preis=5-10
Sie können das Attribut rel="canonical" schreiben, das die Kategorie aller sauren Marmeladen angibt example.com/category.php?category=gummibonbons&taste=sauer& seite=alle
).
Option 2: Robots.txt und Disallow
URLs mit unnötigen Parametern werden in das /filtering/-Verzeichnis aufgenommen, das in robots.txt geschlossen wird (verboten nicht zulassen). Dadurch können alle Suchmaschinen nur den „korrekten“ Intralink (Inhalt) der Website crawlen, das Crawlen unerwünschter URLs wird jedoch sofort blockiert. Zum Beispiel ( example.com/category.php?category=gummibonbons), wenn die wertvollen Parameter item, category und taste wären und die Session-ID und der Preis redundant wären, dann wäre die URL für taste:
example.com/category.php?category=gummibonbons& Geschmack = sauer,
aber alle unnötigen Parameter, wie Preis, wird die URL in einem vordefinierten Verzeichnis enthalten - /filtering/:
beispiel.com /filtern/ category.php?category=gummibonbons&price=5-10,
die dann per robots.txt gebannt werden:
User-Agent: *
Nicht zulassen: /filtern/
Option 3: Separate Hosts
Stellen Sie sicher, dass die oben aufgeführten besten Lösungen (z. B. für Junk-Adressen) weiterhin gelten. Ansonsten haben Suchmaschinen bereits eine große Linkmasse im Index gebildet. Daher wird Ihre Arbeit darauf abzielen, das weitere Wachstum unnötiger Seiten, die vom Googlebot angezeigt werden, zu reduzieren und Indizierungssignale zu konsolidieren.
Verwenden Sie Parameter mit Standardcodierung und Schlüssel=Wert-Format.
Stellen Sie sicher, dass Werte, die den Inhalt der Seite nicht verändern, wie z. B. Session-IDs, als Schlüssel=Wert implementiert sind, nicht als Verzeichnisse.
Lassen Sie keine Klicks zu und generieren Sie keine URLs, wenn keine Elemente zum Filtern vorhanden sind.
Fügen Sie der URL-Parameterzuordnung Logik hinzu: Entfernen Sie unnötige Parameter, anstatt ständig Werte hinzuzufügen (z. B. vermeiden Sie, einen Link wie diesen zu generieren: example.com/product?cat=gummy-candy&cat=lollis &cat=gummy-candy&item=swedish-fish).
Speichern Sie wertvolle Parameter in der URL, indem Sie sie zuerst auflisten (weil URLs in den Suchergebnissen sichtbar sind) und weniger relevante Parameter zuletzt (z. B. die Sitzungs-ID).
Vermeiden Sie diese Linkstruktur: example.com/category.php? Sitzungs-ID=123&Tracking-ID=456&category=gummibonbons&taste=sauer
Passen Sie die URL-Einstellungen in den Webmaster-Tools an, wenn Sie genau wissen, wie Links auf Ihrer Website funktionieren.
Stellen Sie sicher, dass bei der Verwendung von JavaScript zum dynamischen Verwalten von Inhalten (Sortieren/Filtern/Ausblenden) ohne Aktualisierung der URL echte Webadressen auf Ihrer Website vorhanden sind, die einen Suchwert haben, z. B. Hauptkategorien und Produktseiten, die gecrawlt und indexiert werden können . Versuchen Sie, nicht nur die Startseite (also eine URL) für Ihre gesamte Seite zu verwenden, sondern den Inhalt der Navigation dynamisch über JavaScript zu ändern – dadurch erhalten Benutzer leider nur eine URL in der Suche. Stellen Sie außerdem sicher, dass die Leistung die dynamische Filterung nicht negativ beeinflusst, da dies den Benutzer daran hindert, mit der Website zu arbeiten.
Verbessern Sie die Indizierung verschiedener Seiten mit demselben Inhalt, indem Sie das rel="canonical"-Attribut auf der privilegierten Version der Seite angeben. Das Attribut rel="canonical" kann innerhalb einer oder mehrerer Domains verwendet werden.
Optimieren Sie die Indizierung von „paginierten“ Inhalten (z. B. Seite=1 und Seite=2 aus der Kategorie „Gummibonbons“) durch (entweder):
- Fügen Sie einer Reihe von Seiten ein rel="canonical"-Attribut hinzu, das die kanonische Kategorie mit dem Parameter "view-all" angibt (z. B. Seite=1, Seite=2 und Seite=3 aus der Kategorie "Gummibonbons" mit rel=" kanonisch“ an category=gummibonbons&page=all), um sicherzustellen, dass die Seite für Benutzer relevant ist und schnell geladen wird.
- Verwenden Sie das Paginierungs-Markup rel="next" und rel="prev" um die Beziehung zwischen einzelnen Seiten anzuzeigen (siehe "Paginierung mit rel="next" und rel="prev" ") .
Und so werde ich zunächst beschreiben, womit wir arbeiten werden und was wir brauchen werden.
System: PHP 5 und höher, mySQL 4 und höher
Helfer Klassen: dbsql.class.php (Datenbankklasse)
Verschachtelte Kategorieklasse: classTreeCategory.php (direkt die Hauptklasse, ihre Auflistung und Erläuterungen sind unten angegeben.
Erstellen Sie in der Datenbank eine Tabelle mit folgender Struktur:
Anzeigen von MySQL-Code
Diese Tabelle enthält ein Feld ICH WÜRDE- Seriennummer der Kategorie, Podcast- hat für Kategorien erster Ordnung den Wert Null oder die ID der übergeordneten Kategorie, Name- Name der Kategorie.
Ein Beispiel für die Klasse, die Kategorien als Liste mit Unterkategorien anzeigt:
PHP-Code anzeigen
include("dbsql.class.php") ; include("classTreeCategory.php" ) ; $DB = new DB_Engine("mysql" , $settings [ "dbHost" ] , $settings [ "dbUser" ] , $settings [ "dbPass" ] , $settings [ "dbName" ] ) ; // Verbindung zur Datenbank herstellen, Zugangsdaten angeben$kategorie = neue Baumkategorie ($DB ) ; // an die Kategorieklasse übergeben, das Objekt der Arbeit mit der Datenbank$kategorie -> tabelle = "kategorie" ; // Tabellenname in der Datenbank mit Kategorien$array = $kategorie -> getCategory() ; // Alle Kategorien aus der Datenbank in Form eines mehrstufigen Arrays abrufen, sortiert und verschachtelt bereits in der von uns benötigten Reihenfolge$category -> outCategory ($array , "option" ) ; // Vorbereiten der Ausgabe von Kategorien (Bilden von HTML), Übergeben eines Arrays mit Kategorien echo $kategorie -> html ; // Kategorien als HTML ausgeben |
Wie Sie im obigen Beispiel sehen können, ist alles extrem einfach, wir erstellen ein neues $category-Objekt, legen fest, mit welcher Datenbanktabelle wir arbeiten: 'category', dann erhalten wir aus der Tabelle eine Liste aller Kategorien, die bereits als Array formatiert sind und hierarchisch unter Berücksichtigung aller Unterkategorien zerlegt. dann übergeben wir das Array an die Methode outCategory(), die uns einen vorgefertigten HTML-Code generiert, der nur noch im Browser angezeigt werden muss.
Die outCategory()-Methode nimmt, wie wir sehen können, zwei Parameter @array und @string, im ersten Parameter ein Array mit allen Kategorien und im zweiten einen String, der einen Wert enthält Möglichkeit oder Tisch, gibt dieser Wert an, welche Art von HTML-Code generiert werden soll.
Bedeutung Möglichkeit
HTML-Code anzeigen
Um den angegebenen HTML-Code in das Auswahlfeld eines beliebigen Formulars einzufügen.
Bedeutung Tisch- generiert den folgenden HTML-Code:
HTML-Code anzeigen
Dieser HTML-Code ist praktisch zum Einfügen in eine Tabelle, die alle Unterkategorien unserer Kategorien anzeigt.
Die Klasse hat auch die folgenden Methoden:
deleteItem($id);- Entfernt eine Kategorie, trotz der verschachtelten
delCategory($array, $id);- löscht eine Kategorie mit allen verschachtelten Unterkategorien, $array - ein Array mit allen Kategorien, vorbereitet durch die Methode $category->getCategory(), $id - Nummer der zu löschenden Kategorie
Artikel hinzufügen();- Diese Methode sollte aufgerufen werden, wenn Sie eine Kategorie hinzufügen möchten, während diese Methode die Werte aus den von der POST-Methode übertragenen Daten liest, d.h. aus dem Array $_POST.
$name=$this->PHP_slashes(strip_tags($_POST['name'])); // Kategoriename
$podcat=intval($_POST['podcat']); // ID der übergeordneten Kategorie, wenn 0 angegeben ist, ist die Kategorie die Wurzel.
updateItem(); - ähnlich der vorherigen Methode, außer dass diese Methode die Kategorie, ihren Namen und ihre Verschachtelungsebene aktualisiert.
Die ganze Klasse war innerhalb einer Stunde geschrieben und hat natürlich Mängel, aber das alles lässt sich beheben. Seine Verwendung ist für Bildungszwecke ratsam, obwohl Sie es übrigens, nachdem Sie es ein wenig beendet haben, in jedes System einbetten und seine Arbeit genießen können)).
Ich wäre Ihnen dankbar, wenn Sie in den Kommentaren Ihre eigenen Möglichkeiten zur Lösung dieses Problems anbieten - das Organisieren von Kategorien mit unendlicher Verschachtelungsebene.