Перейти к содержимому


Фото
- - - - -

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

фильтр бренд админка korsmudak

  • Чтобы отвечать, сперва войдите на форум
5 ответов в теме

#1 Noxter

Noxter

    Simpla Developer

  • Фрилансер
  • 7 075 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 22.02.2019 - 13:38

Файл 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, 22.02.2019 - 14:37


#2 phukortsin

phukortsin
  • Фрилансер
  • 793 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 22.02.2019 - 16:11

Файл 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, то при открытии админки вместо привычного списка товаров будет пустое место с сообщением 'Нет товаров'.
Если кликать Рекомендуемые, Со скидкой, Активные, Неактивные, Отсутствующие, тоже 'Нет товаров'.
Если кликать по категориям, тоже 'Нет товаров'.
Админа от такого удар хватить может...

 

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

 

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


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



#3 Noxter

Noxter

    Simpla Developer

  • Фрилансер
  • 7 075 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 22.02.2019 - 16:53

Так и задумано, специально для того чтобы ты сделал лучше и выложил для всех бесплатно :)
P.S. Корс побесись ещё, уже 7к постов, прям соль тебе на рану :D

#4 question

question
  • Пользователь
  • 267 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Россия

Опубликовано 24.02.2019 - 23:43

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, 24.02.2019 - 23:47


#5 osben

osben
  • Фрилансер
  • 801 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:1.x, 2.x
  • Откуда:UA, RU

Опубликовано 01.03.2019 - 00:22



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

 

isset


Изменено: osben, 01.03.2019 - 00:23


#6 phukortsin

phukortsin
  • Фрилансер
  • 793 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 01.03.2019 - 08:55



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

 

isset

 

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

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







Также с меткой «фильтр, бренд, админка, korsmudak»

0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых