1 Отредактировано shute (26-05-2017 17:29:31)

Тема: Баг. Удаление категории

Движок : Версия: 4.12 Premium

При удалении категории удаляются товары, которые к ней не относятся.
Проблема в следующем коде движка:

SELECT route.id, route.entity_id, route.type, route.parent_url, route.url FROM route WHERE route.parent_url LIKE 'ИмяКатегории%'

Символ % позволяет отбирать категории в которых начало имени совпадает с ИмяКатегории при этом не учитывается, что они находятся в другой ветке. Также возвращаются все записи таблицы route если ИмяКатегории пустое.

И нельзя ли добавить поле IsDelete, которое отвечает за пометку удаления записи при этом ее физически не удаляя, и добавить функцию удаления записей где это поле равно Истина?
Это сделает систему более устойчивой к сохранению данных и гибкой.

Thumbs up Thumbs down

Re: Баг. Удаление категории

если не сложнео напишите как устранить то о чем вы пишите и где! тоже с этим встретился!

Код скидки на мебель от производителя для сайта ImageCMS: ic2016qp26 - 5%

3 Отредактировано shute (01-06-2017 20:42:26)

Re: Баг. Удаление категории

Инъекция пишет:

если не сложнео напишите как устранить то о чем вы пишите и где! тоже с этим встретился!


application\modules\core\models\RouteQuery.php

Функцию

public function deleteWithChildren(Route $route) {
        $this->filterByParentUrl($route->getFullUrl() . '%', Criteria::LIKE)->delete();
        $route->delete();
    }

изменить на

public function deleteWithChildren(Route $route) {
        $FullUrl = $route->getFullUrl();
        if(!empty($FullUrl))
                $this->filterByParentUrl($FullUrl . '%', Criteria::LIKE)->delete();
        $route->delete();
    }

Эта функция не удаляет все категории, когда удаляется категория с пустым URL. Для учета иерархии (подчинения), когда в разных ветках может быть одинаков URL (лучше его сразу избегать) просто дописывается цикл обхода результата функции $this->filterByParentUrl($FullUrl . '%', Criteria::LIKE) с анализом подчинения.

Thumbs up Thumbs down