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


Фото
- - - - -

Включение и выключение брендов в админке

включить выключить выключить бренд

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

#41 Skynet

Skynet
  • Пользователь
  • 67 сообщений

Опубликовано 24.08.2017 - 22:16

Покажите содержимое функции get_brands в api/Brands.php.

 

	public function get_brands($filter = array())
	{
		$brands = array();
		$category_id_filter = '';
		if(!empty($filter['category_id']))
			$category_id_filter = $this->db->placehold('LEFT JOIN __products p ON p.brand_id=b.id LEFT JOIN __products_categories pc ON p.id = pc.product_id WHERE pc.category_id in(?@)', (array)$filter['category_id']);

        $order = 'b.name';
        if(!empty($filter['sort']))
        switch ($filter['sort'])
        {
         case 'position':
         $order = 'b.position';
         break;
         case 'name':
         $order = 'b.name';
         break;
         case 'image':
         $order = 'b.image';
         break;
        }

		// Выбираем все бренды
		$query = $this->db->placehold("SELECT DISTINCT b.id, b.name, b.url, b.meta_title, b.meta_keywords, b.meta_description, b.description, b.meta_canonical, b.image, b.visible, b.position
								 		FROM __brands b $category_id_filter ORDER BY $order");
		$this->db->query($query);

		return $this->db->results();
	}


#42 Noxter

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

Опубликовано 24.08.2017 - 22:27

UPD: 30.08.2017 Внёс правки.

Изменено: Noxter, 31.08.2017 - 03:21


#43 Skynet

Skynet
  • Пользователь
  • 67 сообщений

Опубликовано 24.08.2017 - 23:24

Спасибо большое, попробую исправить, отпишусь!



#44 Skynet

Skynet
  • Пользователь
  • 67 сообщений

Опубликовано 25.08.2017 - 10:11

Noxter

 

Сделал всё по вашей инструкции, работает. А подскажите пожалуйста, какой добавить доп. фильтр по полю visible? Не получилось.



#45 Noxter

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

Опубликовано 25.08.2017 - 15:47

Noxter
 
Сделал всё по вашей инструкции, работает. А подскажите пожалуйста, какой добавить доп. фильтр по полю visible? Не получилось.

Чуть позже сделаю и выложу инструкцию.

#46 Skynet

Skynet
  • Пользователь
  • 67 сообщений

Опубликовано 28.08.2017 - 08:18

Доброе утро, Noxter!

 

Подскажите пожалуйста?



#47 Skynet

Skynet
  • Пользователь
  • 67 сообщений

Опубликовано 30.08.2017 - 14:40

Чуть позже сделаю и выложу инструкцию.

 

Пытался сам сделать, не получилось! :(  :(  :(



#48 Noxter

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

Опубликовано 30.08.2017 - 15:39

Файл api/Brands.php, заменить функцию get_brands на эту:

public function get_brands($filter = array())
{
	$category_id_filter = '';
	$visible_filter = '';
	$active_filter = '';
	$in_stock_filter = '';

	if(isset($filter['in_stock']))
		$in_stock_filter = $this->db->placehold('AND (SELECT count(*)>0 FROM __variants pv WHERE pv.product_id=p.id AND pv.price>0 AND (pv.stock IS NULL OR pv.stock>0) LIMIT 1) = ?', intval($filter['in_stock']));

	if(isset($filter['visible']))
		$visible_filter = $this->db->placehold('AND p.visible=?', intval($filter['visible']));
		
	if(!empty($filter['category_id']))
		$category_id_filter = $this->db->placehold("LEFT JOIN __products p ON p.brand_id=b.id LEFT JOIN __products_categories pc ON p.id = pc.product_id WHERE pc.category_id in(?@) $visible_filter $in_stock_filter", (array)$filter['category_id']);

	if(isset($filter['active']))
		$active_filter = $this->db->placehold('AND visible = ?', intval($filter['active']));
		
	// Выбираем все бренды
	$query = $this->db->placehold("SELECT DISTINCT b.id, b.name, b.url, b.meta_title, b.meta_keywords, b.meta_description, b.description, b.image
										FROM __brands b $category_id_filter
										WHERE
										1
										$in_stock_filter
										$visible_filter
										$active_filter
                                                                                ORDER BY b.name");
	$this->db->query($query);

	return $this->db->results();
}


Файл view/ProductsView.php меняем выборку брендов на эту:

// Выбираем бренды, они нужны нам в шаблоне
if(!empty($category))
{
	$brands = $this->brands->get_brands(array('category_id'=>$category->children, 'visible'=>true, 'active'=>true));
	$category->brands = $brands;
}

Пробуйте.


Изменено: Noxter, 31.08.2017 - 00:01


#49 loxter

loxter
  • Забаненый
  • 118 сообщений
  • Дизайн
  • Откуда:paris

Опубликовано 30.08.2017 - 17:16

Файл api/Brands.php, заменить функцию get_brands на эту:

public function get_brands($filter = array())
{
	$category_id_filter = '';
	$visible_filter = '';
	$active_filter = '';
	$in_stock_filter = '';

	if(isset($filter['in_stock']))
		$in_stock_filter = $this->db->placehold('AND (SELECT count(*)>0 FROM __variants pv WHERE pv.product_id=p.id AND pv.price>0 AND (pv.stock IS NULL OR pv.stock>0) LIMIT 1) = ?', intval($filter['in_stock']));

	if(isset($filter['visible']))
		$visible_filter = $this->db->placehold('AND p.visible=?', intval($filter['visible']));
		
	if(!empty($filter['category_id']))
		$category_id_filter = $this->db->placehold("LEFT JOIN __products p ON p.brand_id=b.id LEFT JOIN __products_categories pc ON p.id = pc.product_id WHERE pc.category_id in(?@) $visible_filter $in_stock_filter", (array)$filter['category_id']);

	if(isset($filter['active']))
		$active_filter = $this->db->placehold('AND visible = ?', intval($filter['active']));
		
	// Выбираем все бренды
	$query = $this->db->placehold("SELECT DISTINCT b.id, b.name, b.url, b.meta_title, b.meta_keywords, b.meta_description, b.description, b.image
								 		WHERE
										1
										$in_stock_filter
										$visible_filter
										$active_filter
										FROM __brands b $category_id_filter ORDER BY b.name");
	$this->db->query($query);

	return $this->db->results();
}[/code]

Файл [b]view/ProductsView.php[/b] меняем выборку брендов на эту:
[code=auto:0]
// Выбираем бренды, они нужны нам в шаблоне
if(!empty($category))
{
	$brands = $this->brands->get_brands(array('category_id'=>$category->children, 'visible'=>true, 'active'=>true));
	$category->brands = $brands;
}
Пробуйте.

 

Запрос явно ошибочный, так как в нем сначала  поставлено WHERE, а лишь затем FROМ. Раньше такие ошибки делали начинающие, а теперь, видимо, дошла очередь до специалистов с 8-летним стажем в Simpla.



#50 Noxter

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

Опубликовано 30.08.2017 - 17:23

Запрос явно ошибочный, так как в нем сначала  поставлено WHERE, а лишь затем FROМ. Раньше такие ошибки делали начинающие, а теперь, видимо, дошла очередь до специалистов с 8-летним стажем в Simpla.

Только из-за таких дебилов как ты и не выкладывают готовые решения на форуме, ты ведь затычка во все дыры.
Ошибка не детская, а машинальная я делал на скорую руку но тебе дебилу обязательно нужно дое***** вместо того чтобы просто указать где ошибка.
P.S. Ты конченый Kors, я не знаю как тебя окружающие люди терпят.
UPD: 30.08.2017 Внёс правки.

Изменено: Noxter, 31.08.2017 - 03:20


#51 loxter

loxter
  • Забаненый
  • 118 сообщений
  • Дизайн
  • Откуда:paris

Опубликовано 30.08.2017 - 18:38

я делал на скорую руку...

 
Я так и понял.
Только "я делал" - сильно преувеличено. Тут лишь написано что-то похожее.  Делал - подразумевает минимальную ответственность - затратил пару минут, вставил код и проверил хоть один разочек. В данном случае явно этого не сделано

 

...не выкладывают готовые решения на форуме...

 

Это тоже преувеличение.

Во всяком случае, если в запросе просто поменять блоки, легко увидеть вторую ошибку...

На готовое решение никак не тянет, разве что на не слишком успешное упражнение для начинающего



#52 Skynet

Skynet
  • Пользователь
  • 67 сообщений

Опубликовано 30.08.2017 - 22:55

Файл api/Brands.php, заменить функцию get_brands на эту:

public function get_brands($filter = array())
{
	$category_id_filter = '';
	$visible_filter = '';
	$active_filter = '';
	$in_stock_filter = '';

	if(isset($filter['in_stock']))
		$in_stock_filter = $this->db->placehold('AND (SELECT count(*)>0 FROM __variants pv WHERE pv.product_id=p.id AND pv.price>0 AND (pv.stock IS NULL OR pv.stock>0) LIMIT 1) = ?', intval($filter['in_stock']));

	if(isset($filter['visible']))
		$visible_filter = $this->db->placehold('AND p.visible=?', intval($filter['visible']));
		
	if(!empty($filter['category_id']))
		$category_id_filter = $this->db->placehold("LEFT JOIN __products p ON p.brand_id=b.id LEFT JOIN __products_categories pc ON p.id = pc.product_id WHERE pc.category_id in(?@) $visible_filter $in_stock_filter", (array)$filter['category_id']);

	if(isset($filter['active']))
		$active_filter = $this->db->placehold('AND visible = ?', intval($filter['active']));
		
	// Выбираем все бренды
	$query = $this->db->placehold("SELECT DISTINCT b.id, b.name, b.url, b.meta_title, b.meta_keywords, b.meta_description, b.description, b.image
										FROM __brands b $category_id_filter ORDER BY b.name
										WHERE
										1
										$in_stock_filter
										$visible_filter
										$active_filter");
	$this->db->query($query);

	return $this->db->results();
}


Файл view/ProductsView.php меняем выборку брендов на эту:

// Выбираем бренды, они нужны нам в шаблоне
if(!empty($category))
{
	$brands = $this->brands->get_brands(array('category_id'=>$category->children, 'visible'=>true, 'active'=>true));
	$category->brands = $brands;
}

Пробуйте.

 

Спасибо огромное за ответ!

Но выдаёт вот такую ошибку на сайте:

1png_4901989_27377434.png



#53 Noxter

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

Опубликовано 30.08.2017 - 23:52

Спасибо огромное за ответ!
Но выдаёт вот такую ошибку на сайте:
1png_4901989_27377434.png

Внёс правки.

Изменено: Noxter, 31.08.2017 - 00:02


#54 loxter

loxter
  • Забаненый
  • 118 сообщений
  • Дизайн
  • Откуда:paris

Опубликовано 31.08.2017 - 09:12

После внесенных правок теперь первая ошибка исправлена и FROM стоит перед WHERE, как и должно.

Но теперь, как и предполагалось, выплыла вторая ошибка: в запросе подряд  стоят ДВА блока WHERE.

В результате имеем синтаксическую ошибку, запрос не работает.

 

Спасибо за хорошее обновление!



#55 Noxter

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

Опубликовано 31.08.2017 - 14:25

Так и было задумано

#56 loxter

loxter
  • Забаненый
  • 118 сообщений
  • Дизайн
  • Откуда:paris

Опубликовано 31.08.2017 - 15:03

Так и было задумано

 

Крутенько заворачивает опытнейший спец. Специально делать ошибки - это, должно быть, новое слово в программировании. Боюсь, моих умственных способностей не хватит, чтобы постичь всю глубину замысла...



#57 Noxter

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

Опубликовано 31.08.2017 - 15:25

Крутенько заворачивает опытнейший спец. Специально делать ошибки - это, должно быть, новое слово в программировании. Боюсь, моих умственных способностей не хватит, чтобы постичь всю глубину замысла...

Я их делаю специально для тебя, дабы ты тут "покукарекал" :D





Также с меткой «включить, выключить, выключить, бренд»

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

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