Перейти к содержанию
Официальный форум поддержки Simpla

Выбор товаров без бренда (фильтр в админке)


Рекомендуемые сообщения

Файл simpla/ProductsAdmin.php строка примерно 32:

// Текущий бренд
$brand_id = $this->request->get('brand_id', 'integer');
if($brand_id && $brand = $this->brands->get_brand($brand_id))
{
    $filter['brand_id'] = $brand->id;
}
else
{
    $filter['brand_id'] = '';
}


Далее в api/Products.php в двух функциях (get_products и count_products) найдите код:

if(!empty($filter['brand_id']))
    $brand_id_filter = $this->db->placehold('AND p.brand_id in(?@)', (array)$filter['brand_id']);

и поменяйте его на следующий:

if(!empty($filter['brand_id']))
{
    $brand_id_filter = $this->db->placehold('AND p.brand_id in(?@)', (array)$filter['brand_id']);
}
elseif(isset($filter['brand_id']))
{
    $brand_id_filter = $this->db->placehold('AND p.brand_id IS NULL OR p.brand_id = ?', $filter['brand_id']);
}

Файл simpla/design/html/products.tpl в нужном месте пропишите ссылку:

index.php?module=ProductsAdmin&brand_id=
Изменено пользователем Noxter
Ссылка на сообщение
Поделиться на другие сайты

Файл simpla/ProductsAdmin.php строка примерно 32:

 

 

// Текущий бренд
$brand_id = $this->request->get('brand_id', 'integer');
if($brand_id && $brand = $this->brands->get_brand($brand_id))
{
    $filter['brand_id'] = $brand->id;
}
else
{
    $filter['brand_id'] = '';
}

 

 

Далее в api/Products.php в двух функциях (get_products и count_products) найдите код:

 

if(!empty($filter['brand_id']))
    $brand_id_filter = $this->db->placehold('AND p.brand_id in(?@)', (array)$filter['brand_id']);

 

и поменяйте его на следующий:

 

if(!empty($filter['brand_id']))
{
    $brand_id_filter = $this->db->placehold('AND p.brand_id in(?@)', (array)$filter['brand_id']);
}
elseif(isset($filter['brand_id']))
{
    $brand_id_filter = $this->db->placehold('AND p.brand_id IS NULL OR p.brand_id = ?', $filter['brand_id']);
}

 

Файл simpla/design/html/products.tpl в нужном месте пропишите ссылку:

index.php?module=ProductsAdmin&brand_id=

 

Интересный подход.

Если это установить на стандартную Simpla, то при открытии админки вместо привычного списка товаров будет пустое место с сообщением 'Нет товаров'.

Если кликать Рекомендуемые, Со скидкой, Активные, Неактивные, Отсутствующие, тоже 'Нет товаров'.

Если кликать по категориям, тоже 'Нет товаров'.

Админа от такого удар хватить может...

 

Если чуть-чуть на код посмотреть, сразу пару грубых ошибок видно...

 

Товарищи заказчики! Остерегайтесь подобных специалистов 'с большими скилами'...

 

А может, это так и задумано - шутка гения?

Ссылка на сообщение
Поделиться на другие сайты

Так и задумано, специально для того чтобы ты сделал лучше и выложил для всех бесплатно :)

P.S. Корс побесись ещё, уже 7к постов, прям соль тебе на рану :D

Ссылка на сообщение
Поделиться на другие сайты

simpla/ProductsAdmin.php Заменить это

        // Текущий бренд
        $brand_id = $this->request->get('brand_id', 'integer'); 
        if($brand_id && $brand = $this->brands->get_brand($brand_id))
            $filter['brand_id'] = $brand->id;

на это

 

        // Текущий бренд        

        $brand_id = $this->request->get('brand_id', 'integer'); 
        if($brand_id)
        {
            $filter['brand_id'] = $brand_id;
            $brand = $this->brands->get_brand($brand_id);
        }
 

 

 

Далее в api/Products.php в двух функциях (get_products и count_products) заменить это

 

        if(!empty($filter['brand_id']))
            $brand_id_filter = $this->db->placehold('AND p.brand_id in(?@)', (array)$filter['brand_id']);
 

 

на это
 

 

if(!empty($filter['brand_id']))
{
    if ($filter['brand_id'] < 999999)
    {
        $brand_id_filter = $this->db->placehold('AND p.brand_id in(?@)', (array)$filter['brand_id']);
    }
    else
    {
                $brand_id_filter = 'AND p.brand_id IS NULL OR p.brand_id = 0';
    }
}
 

 

теперь по адресу site.ru/index.php?module=ProductsAdmin&brand_id=999999 будут выводиться товары без принадлежности к бренду.

Ремарка. Если у вас 999999 брендов, то работать не будет.

Изменено пользователем question
Ссылка на сообщение
Поделиться на другие сайты

 

 

 if ($filter['brand_id'] < 999999)

 

isset

 

Это никак не поможет и даже навредит. 

Условие  isset($filter['brand_id']) в этом месте будет всегда истинным (потому что оно внутри блока, в котором истинно !empty($filter['brand_id']) ), и, как следствие, товары без бренда просто никогда не покажет - вся цель доработки будет убита напрочь...

Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...