Prestashop 1.6 категория дерево перестроить

Я создал из исходного кода PHP код C#, чтобы перестроить дерево категорий для prestashop 1.6. Но что-то не так. Некоторые категории не будут отображаться правильно, и я думаю, что где-то что-то не так... Проблема должна быть в $n переменных, где они представляют левую и правильную нумерацию. Это должно быть что-то вроде этого: 1 Home 8 2 cat1 7 3 cat2 6 4 cat3 5 Я думаю, что это что-то с ссылкой ref... Код PHP:

public static function regenerateEntireNtree()
{
    $id = Context::getContext()->shop->id;
    $id_shop = $id ? $id: Configuration::get('PS_SHOP_DEFAULT');
    $categories = Db::getInstance()->executeS('
    SELECT c.`id_category`, c.`id_parent`
    FROM `'._DB_PREFIX_.'category` c
    LEFT JOIN `'._DB_PREFIX_.'category_shop` cs
    ON (c.`id_category` = cs.`id_category` AND cs.`id_shop` = '.(int)$id_shop.')
    ORDER BY c.`id_parent`, cs.`position` ASC');
    $categories_array = array();
    foreach ($categories as $category)
        $categories_array[$category['id_parent']]['subcategories'][] = $category['id_category'];
    $n = 1;

    if (isset($categories_array[0]) && $categories_array[0]['subcategories'])
        Category::_subTree($categories_array, $categories_array[0]['subcategories'][0], $n);
}

protected static function _subTree(&$categories, $id_category, &$n)
{
    $left = $n++;
    if (isset($categories[(int)$id_category]['subcategories']))
        foreach ($categories[(int)$id_category]['subcategories'] as $id_subcategory)
            Category::_subTree($categories, (int)$id_subcategory, $n);
    $right = (int)$n++;

    Db::getInstance()->execute('
    UPDATE '._DB_PREFIX_.'category
    SET nleft = '.(int)$left.', nright = '.(int)$right.'
    WHERE id_category = '.(int)$id_category.' LIMIT 1');
}

И мой код C#:

 public bool ReGenerateEntireTree()
    {
        System.Data.DataTable Table = SelectQuery("SELECT c.`id_category`, c.`id_parent` FROM `ps_category` c LEFT JOIN `ps_category_shop` cs " +
                                     "ON (c.`id_category` = cs.`id_category` AND cs.`id_shop` = 1) " +
                                     "ORDER BY c.`id_parent`, cs.`position` ASC");
        Dictionary<int, int> categoryArray = new Dictionary<int, int>();

        for (int i = 0; i < Table.Rows.Count; i++)
        {
            categoryArray.Add(Convert.ToInt32(Table.Rows[i]["id_category"]), Convert.ToInt32(Table.Rows[i]["id_parent"]));
        }
        int n = 1;
        SubTree(ref categoryArray, 1, ref n);
        return true;
    }

    private static void SubTree(ref Dictionary<int, int> categories, int id_category, ref int n)
    {
        int left;
        int right;
        left = n++;

        if (categories.ContainsValue(id_category))
        {
            var keysWithMatchingValues = categories.Where(p => p.Value == id_category).Select(p => p.Key);
            foreach (var key in keysWithMatchingValues)
            {
                int id_subcategory = key;
                SubTree(ref categories, id_subcategory, ref n);
            }
        }

        right = n++;

        string SQL = "UPDATE ps_category SET nleft = '" + left + "', nright = '" + right + "' WHERE id_category = " + id_category + " LIMIT 1";
        if (UpdateQuery(SQL) == 1)
        {
            //recalculateLevelDepth(id_category);
        }

    }

Спасибо!

0 ответов

Другие вопросы по тегам