Oxid und URL von Produktvarianten

Hallo zusammen,

gibt es eine Möglichkeit die “Hauptkategorie” eines Artikels über die Datenbank herauszubekommen?

Hintergrund: Ich möchte eine URL-Liste aller Artikel inkl. Direkt-Links zu allen Varianten aus der Datenbank heraus erstellen. Aber wenn einer meiner Artikel in mehreren Kategorien vorkommt, so gibt es auch verschiedene SEO-URLs. ABER: ich habe festgestellt, dass nur eine Kategorie mit den Anhängsel der Varianten funktioniert.

z.B.:

http://www.domain.de/Kategorie1/Artikel1-Farbe1-Groesse1.html (klappt)
http://www.domain.de/Kategorie2/Artikel1-Farbe1-Groesse1.html (klappt nicht)

ABER

http://www.domain.de/Kategorie1/Artikel1.html (klappt)
http://www.domain.de/Kategorie2/Artikel1.html (klappt)

Alternativ: Gibt es eine Möglichkeit über die Datenbank gleich die Varianten-URLs zu bekommen?

Danke und viele Grüße,

Thorsten

Hi Thorsten,
die Hauptkategorie über die DB bekommst mittels:

SELECT oxcategories.* FROM oxarticles
INNER JOIN oxobject2category ON oxarticles.OXID = oxobject2category.OXOBJECTID
INNER JOIN oxcategories ON oxobject2category.OXCATNID = oxcategories.OXID
WHERE oxobject2category.OXTIME = 0 AND oxarticles.OXID = "xxxxxxxxx"; 

Die Spalte OXTIME = 0 gibt an, dass die Kategorie eine Hauptkategorie ist.

Die Artikel URL der Hauptkategorie mittels:

SELECT oxseo.* FROM oxseo
INNER JOIN oxobject2category ON oxobject2category.OXOBJECTID = oxseo.OXOBJECTID
WHERE oxseo.OXOBJECTID = 'OXARTICLE.OXID' AND 
oxobject2category.OXTIME = 0 AND 
oxobject2category.OXCATNID = oxseo.OXPARAMS AND 
oxseo.OXEXPIRED = 0

OXARTICLE.OXID ersetzt du mit der OXID des Artikels.
-> und beachte OXEXPIRED… hier hat sich dann etwas am Artikel geändert wenn auf 1, sodass die URL neu berechnet werden muss.

Wenn es dir nicht um Performance geht, würde ich die Objektstruktur vom OXID verwenden,
dann hast du das Problem mit dem OXEXPIRED nicht.
Alles was mit Artikelexporten zu tun hat, ganz klar LowLevel über die DB.

Grüße, Matthias

Muss nicht immer 0 sein, meines Wissens nach ist die mit der niedrigsten oxtime die Hauptkategorie.

richtig ist wenn der Wert in Spalte oxcategories.oxparentid = ‘oxrootid’ ist

Das wäre dann eine Top-level-Kategorie, Hauptkategorie in dem Sinn wenn ein Artikel mehrere Kategorien hat, da kann die Hauptkategorie auch eine Subkategorie sein.

    // #0003650: increment all product references independent to active shop
    $query = "update oxobject2category set oxtime = oxtime + 10 where oxobjectid = {$quotedOxId} {$queryToEmbed}";
    \OxidEsales\Eshop\Core\DatabaseProvider::getInstance()->getDb()->Execute($query);

    // set main category for active shop
    $query = "update oxobject2category set oxtime = 0 where oxobjectid = {$quotedOxId} " .
          "and oxcatnid = {$quotedDefCat} {$queryToEmbed}";
    \OxidEsales\Eshop\Core\DatabaseProvider::getInstance()->getDb()->Execute($query);
    //echo "\n$sQ\n";

Ausschnitt aus ArticleExtendAjax.php -> Funktion setAsDefault -> oxtime = 0

Oder gibt es noch eine andere Stelle im Code wo Hauptkategorien gesetzt werden?

Wenn die Hauptkategorie nicht aktiv gesetzt wird ist die erste erstellte die Hauptkategorie, und in dem Fall wird setAsDefault glaub ich nicht aufgerufen.

du hast recht - habe nicht alles gelesen - wer lesen kann ist klar im Vorteil :slight_smile:

leofonic da hast du wohl Recht

Danke, der Hinweis mit OXTIME hat mir geholfen. Ich nutze jetzt folgenden SELECT um die Hauptkategorie eines Artikels auszugeben:

Leider kann ich den Code hier nicht angeben, da ich immer einen Error 403 bekomme ?!