Jump to content

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


Recommended Posts

Файл 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=
Edited by Noxter
Link to post
Share on other sites

Файл 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, то при открытии админки вместо привычного списка товаров будет пустое место с сообщением 'Нет товаров'.

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

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

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

 

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

 

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

 

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

Link to post
Share on other sites

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

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

Link to post
Share on other sites

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 брендов, то работать не будет.

Edited by question
Link to post
Share on other sites

 

 

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

 

isset

 

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

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

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...