2013-03-01 16 views
6

Ich habe einen Onlinedienst verwendet, um Daten von meiner anderen E-Commerce-Website in OpenCart zu übertragen, und alles scheint korrekt übertragen worden zu sein.OpenCart: So füllen Sie genau oc_category_path

Es gibt jedoch ein Problem mit den Produktkategorien. Die Kategorien wurden in die Tabelle oc_category übertragen. Es sieht jedoch so aus, als gäbe es eine weitere Tabelle namens oc_category_path, die ebenfalls ausgefüllt werden muss, wenn ich meine Kategorien im Admin bearbeiten möchte.

Wissen Sie, was diese Tabelle ist und wie ich sie korrekt ausfüllen kann (manuell in meinem Fall nehme ich an). Was genau ist die path_id und level und was bestimmt das Niveau einer Kategorie?

Verwandte Tabellen:

CREATE TABLE `oc_category` (
    `category_id` int(11) NOT NULL AUTO_INCREMENT, 
    `image` varchar(255) DEFAULT NULL, 
    `parent_id` int(11) NOT NULL DEFAULT '0', 
    `top` tinyint(1) NOT NULL, 
    `column` int(3) NOT NULL, 
    `sort_order` int(3) NOT NULL DEFAULT '0', 
    `status` tinyint(1) NOT NULL, 
    `date_added` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', 
    `date_modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', 
    PRIMARY KEY (`category_id`) 
) ENGINE=MyISAM AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 

CREATE TABLE `oc_category_description` (
    `category_id` int(11) NOT NULL, 
    `language_id` int(11) NOT NULL, 
    `name` varchar(255) NOT NULL, 
    `description` text NOT NULL, 
    `meta_description` varchar(255) NOT NULL, 
    `meta_keyword` varchar(255) NOT NULL, 
    `u_title` varchar(255) NOT NULL, 
    `u_h1` varchar(255) NOT NULL, 
    `u_h2` varchar(255) NOT NULL, 
    PRIMARY KEY (`category_id`,`language_id`), 
    KEY `name` (`name`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 

CREATE TABLE `oc_category_path` (
    `category_id` int(11) NOT NULL, 
    `path_id` int(11) NOT NULL, 
    `level` int(11) NOT NULL, 
    PRIMARY KEY (`category_id`,`path_id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 

Antwort

10

Wenn eine Kategorie in Ihrem oc speichert eine Wurzelkategorie ist, wird es einen Eintrag in der Pfadtabelle als solche "category_id, category_id, 0". Wenn diese Kategorie ein Kind hat, erhält sie zwei Einträge in der Tabelle, nämlich: - "category_id, category_id, 1" sowie "category_id, parent_id, 0".

Wenn das Kind eines seiner eigenen Kind hat, das neue Kind drei Einträge als solche haben: -
"category_id, category_id, 2"
"category_id, parent_id, 1"
„category_id, Eltern Eltern category_id , 0 "

Um dies zu veranschaulichen, nehmen wir an, dass eine Kategorie eine category_id von" 14 "hat. Es ist das erste Kind einer Kategorie mit einer category_id von "11". Diese Kategorie mit der Kategorie_ID von "11" ist das Kind in einer Kategorie mit der Kategorie-ID "1". (1> 11> 14 Als zeigt in dem Admin-Panel, mit der Ausnahme mit dem Namen anstelle des category_id)

Die oben haben 3 Einträge als solche:
"14", "14", "2"
"14", "11", "1"
"14", "1", "0"

So ist die root-Kategorie es 0 erhalten wird, die nächsten 1 erhält, und die nächsten 2, und so weiter, alles abhängig davon, wie viele Kategorienstufen es unten ist.

Ich hoffe, dass die Dinge gut genug erklären.

Wie zum Auffüllen, ist die einfachste Methode, aber keine vollständige Methode, nur die Tabelle mit "category_id, category_id, 0" zu erstellen. Dadurch werden sie im Admin-Steuerfeld angezeigt. Wenn Sie dann auf "Reparieren" klicken, wird diese Tabelle korrekt generiert.

Alternativ müssten Sie Schritt für Schritt durch Ihre Kategorietabelle gehen, indem Sie ein Array mit dessen Eltern-ID erstellen, diese Eltern-ID nach der Eltern-ID durchsuchen und sie zum Array hinzufügen, und so fort. Wenn das Array vollständig ist, dh keine Eltern mehr, ist es eine einfache Aufgabe, sie mit der richtigen "Ebene" zur Tabelle hinzuzufügen.

FYI, es gibt eine weitere Tabelle, die auch gefüllt werden muss, category_to_store, die sehr einfach "category_id, store_id" ist. Ohne diese Tabelle werden Ihre Kategorien in Ihrem Geschäft nicht angezeigt.

+0

Danke für die Antwort, es hat mir geholfen. Aber ich glaube, es gibt einen Tippfehler. In Ihrem Beispiel denke ich "14", "10", "0" sollte "14", "1", "0" lesen. – maidbloke

+0

Sie sind richtig, danke.Ich habe die Antwort bearbeitet, um sie als solche zu reflektieren. –

Verwandte Themen