Habe den Fehler gefunden.
Musste beide Funktionen leicht modifizieren und schon lief´s…
Wie man sieht habe ich nichts anderes getan als:
//$updn = $this->_updateNodes($oxRootId, true, $oxRootId);
$this->_updateNodes($oxRootId, true, $oxRootId);
und alle DB Bezeichner $rs->fields[0] in z.B. $rs->fields[oxid] umzubennenen.
Ohne debuggen wäre ich da niemals draufgekommen - Danke.
Kann mir jemand erklären warum bei mir fields[0] nicht funktioniert?
Da der Code in anderen Versionen z.B. 4.5, vielleicht auch später identisch ist, würde mich interessieren ob dort das Problem ebenfalls auftaucht.
Da die Kategorisierung ohne oxleft und oxright innerhalb des Shops funktioniert, scheint es so als wenn nested sets garnicht verwendet werden, oder?
public function updateCategoryTree($blVerbose = true, $sShopID = null)
{
$oDB = oxDb::getDb();
$sWhere = '1';
$oDB->execute("update oxcategories set oxleft = 0, oxright = 0 where $sWhere");
$oDB->execute("update oxcategories set oxleft = 1, oxright = 2 where oxparentid = 'oxrootid' and $sWhere");
// Get all root categories
$rs = $oDB->execute("select oxid, oxtitle from oxcategories where oxparentid = 'oxrootid' and $sWhere order by oxsort");
if ($rs != false && $rs->recordCount() > 0) {
while (!$rs->EOF) {
$this->_aUpdateInfo[] = "<b>Processing : ".$rs->fields[oxid]."</b>(".$rs->fields[oxtitle].")<br>";
if ( $blVerbose ) {
echo next( $this->_aUpdateInfo );
}
$oxRootId = $rs->fields[oxid];
//$updn = $this->_updateNodes($oxRootId, true, $oxRootId);
$this->_updateNodes($oxRootId, true, $oxRootId);
$rs->moveNext();
}
}
}
protected function _updateNodes($oxRootId, $isroot, $thisRoot)
{
$oDB = oxDb::getDb();
if ($isroot) {
$thisRoot = $oxRootId;
}
// Get sub categories of root categorie
$rs = $oDB->execute("update oxcategories set oxrootid = ".$oDB->quote($thisRoot)." where oxparentid = ".$oDB->quote($oxRootId));
$rs = $oDB->execute("select oxid, oxparentid from oxcategories where oxparentid = ".$oDB->quote($oxRootId)." order by oxsort");
// If there are sub categories
if ($rs != false && $rs->recordCount() > 0) {
while (!$rs->EOF) {
$parentId = $rs->fields[oxparentid];
$actOxid = $rs->fields[oxid];
$sActOxidQuoted = $oDB->quote($actOxid);
// Get the data of the parent category to the current Cat
$rs3 = $oDB->execute("select oxrootid, oxright from oxcategories where oxid = ".$oDB->quote($parentId));
while (!$rs3->EOF) {
$parentOxRootId = $rs3->fields[oxrootid];
$parentRight = (int)$rs3->fields[oxright];
$rs3->moveNext();
}
$sParentOxRootIdQuoted = $oDB->quote($parentOxRootId);
$oDB->execute("update oxcategories set oxleft = oxleft + 2 where oxrootid = $sParentOxRootIdQuoted and oxleft > '$parentRight' and oxright >= '$parentRight' and oxid != $sActOxidQuoted");
$oDB->execute("update oxcategories set oxright = oxright + 2 where oxrootid = $sParentOxRootIdQuoted and oxright >= '$parentRight' and oxid != $sActOxidQuoted");
$oDB->execute("update oxcategories set oxleft = $parentRight, oxright = ($parentRight + 1) where oxid = $sActOxidQuoted");
$this->_updateNodes($actOxid, false, $thisRoot);
$rs->moveNext();
}
}
}