Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Автоматически фото для категории и под категории


zava19

Recommended Posts

Добрый день написал функцию для кнопки для админки для заполнения категории фото если нет ( нет для того что бы в ручную можно было менять если фото не та взята из товара )

Посмотрите можно как то оптимизировать запросы и код? Спасибо

    public function getImageCategories()
    {
        // set image caterory of products
        $query = $this->db->query("SELECT `category_id` FROM `oc_category` WHERE `image` = ''");
        foreach ($query->rows as $result) {
            $id_category = $result['category_id'];
            $pathImage = $this->db->query("SELECT `oc_product`.`image`  FROM `oc_product`  INNER JOIN `oc_product_to_category` ON `oc_product`.`product_id` = `oc_product_to_category`.`product_id` AND `category_id` = $id_category  AND `oc_product`.`image` > '' LIMIT 1;");
            if ($pathImage->rows) {
                foreach ($pathImage->rows as $category_path) {
                    $urlImagePath = $category_path['image'];
                    $this->db->query("UPDATE `oc_category` SET `image` = '" . $urlImagePath . "'  WHERE `oc_category`.`category_id` = '" . $id_category . "';");
                }
            } else {
                $pathImageCh = $this->db->query("SELECT `oc_category`.`image`  FROM  `oc_category`   WHERE  `oc_category`.`parent_id` = " . $id_category . " AND `oc_category`.`image` > '' LIMIT 1;");
                if (!empty($pathImageCh->rows[0]['image'])) {
                    $this->db->query("UPDATE `oc_category` SET `image` = '" . $pathImageCh->rows[0]['image'] . "'  WHERE `oc_category`.`category_id` = '" . $id_category . "';");
                }
            }
        }
    }
}

 

Надіслати
Поділитися на інших сайтах


2 часа назад, zava19 сказал:

Посмотрите можно как то оптимизировать запросы и код?

Можно )

public function setCategoriesImage() {
	$this->db->query("UPDATE `" . DB_PREFIX . "category` AS `c`, `" . DB_PREFIX . "product_to_category` AS `ptc`, `" . DB_PREFIX . "product` AS `p` SET `c`.`image` = `p`.`image` WHERE `c`.`category_id` = `ptc`.`category_id` AND `ptc`.`product_id` = `p`.`product_id` AND `c`.`image` = '' AND `p`.`image` <> '' AND `ptc`.`main_category` = 1");
}

Изображения для категорий берёт из товаров основной категории.

Если надо устанавливать изобрахения в вышестоящих категориях и в них нет товаров - то вот такой вариант установит изображения из подкатегорий

public function setCategoriesImage() {
	$this->db->query("UPDATE `" . DB_PREFIX . "category` AS `c`, `" . DB_PREFIX . "product_to_category` AS `ptc`, `" . DB_PREFIX . "product` AS `p` SET `c`.`image` = `p`.`image` WHERE `c`.`category_id` = `ptc`.`category_id` AND `ptc`.`product_id` = `p`.`product_id` AND `c`.`image` = '' AND `p`.`image` <> '' AND `ptc`.`main_category` = 1");
	$this->db->query("UPDATE `" . DB_PREFIX . "category` AS `c`, `" . DB_PREFIX . "product_to_category` AS `ptc`, `" . DB_PREFIX . "product` AS `p` SET `c`.`image` = `p`.`image` WHERE `c`.`category_id` = `ptc`.`category_id` AND `ptc`.`product_id` = `p`.`product_id` AND `c`.`image` = '' AND `p`.`image` <> ''");
}

Это варианты для ocStore, для opencart вот так

public function setCategoriesImage() {
	$this->db->query("UPDATE `" . DB_PREFIX . "category` AS `c`, `" . DB_PREFIX . "product_to_category` AS `ptc`, `" . DB_PREFIX . "product` AS `p` SET `c`.`image` = `p`.`image` WHERE `c`.`category_id` = `ptc`.`category_id` AND `ptc`.`product_id` = `p`.`product_id` AND `c`.`image` = '' AND `p`.`image` <> ''");
}

 

А если в методы addCategory и editCategory модели категорий

перед строкой

$this->cache->delete('category');

добавить строку

$this->db->query("UPDATE `" . DB_PREFIX . "category` AS `c`, `" . DB_PREFIX . "product_to_category` AS `ptc`, `" . DB_PREFIX . "product` AS `p` SET `c`.`image` = `p`.`image` WHERE `c`.`category_id` = `ptc`.`category_id` AND `ptc`.`product_id` = `p`.`product_id` AND `c`.`image` = '' AND `p`.`image` <> '' AND `ptc`.`main_category` = 1");

то и кнопка не понадобится...

  • +1 1
Надіслати
Поділитися на інших сайтах

16 часов назад, Yesvik сказал:

Можно )


public function setCategoriesImage() {
	$this->db->query("UPDATE `" . DB_PREFIX . "category` AS `c`, `" . DB_PREFIX . "product_to_category` AS `ptc`, `" . DB_PREFIX . "product` AS `p` SET `c`.`image` = `p`.`image` WHERE `c`.`category_id` = `ptc`.`category_id` AND `ptc`.`product_id` = `p`.`product_id` AND `c`.`image` = '' AND `p`.`image` <> '' AND `ptc`.`main_category` = 1");
}

Изображения для категорий берёт из товаров основной категории.

Если надо устанавливать изобрахения в вышестоящих категориях и в них нет товаров - то вот такой вариант установит изображения из подкатегорий


public function setCategoriesImage() {
	$this->db->query("UPDATE `" . DB_PREFIX . "category` AS `c`, `" . DB_PREFIX . "product_to_category` AS `ptc`, `" . DB_PREFIX . "product` AS `p` SET `c`.`image` = `p`.`image` WHERE `c`.`category_id` = `ptc`.`category_id` AND `ptc`.`product_id` = `p`.`product_id` AND `c`.`image` = '' AND `p`.`image` <> '' AND `ptc`.`main_category` = 1");
	$this->db->query("UPDATE `" . DB_PREFIX . "category` AS `c`, `" . DB_PREFIX . "product_to_category` AS `ptc`, `" . DB_PREFIX . "product` AS `p` SET `c`.`image` = `p`.`image` WHERE `c`.`category_id` = `ptc`.`category_id` AND `ptc`.`product_id` = `p`.`product_id` AND `c`.`image` = '' AND `p`.`image` <> ''");
}

Это варианты для ocStore, для opencart вот так


public function setCategoriesImage() {
	$this->db->query("UPDATE `" . DB_PREFIX . "category` AS `c`, `" . DB_PREFIX . "product_to_category` AS `ptc`, `" . DB_PREFIX . "product` AS `p` SET `c`.`image` = `p`.`image` WHERE `c`.`category_id` = `ptc`.`category_id` AND `ptc`.`product_id` = `p`.`product_id` AND `c`.`image` = '' AND `p`.`image` <> ''");
}

 

А если в методы addCategory и editCategory модели категорий

перед строкой


$this->cache->delete('category');

добавить строку


$this->db->query("UPDATE `" . DB_PREFIX . "category` AS `c`, `" . DB_PREFIX . "product_to_category` AS `ptc`, `" . DB_PREFIX . "product` AS `p` SET `c`.`image` = `p`.`image` WHERE `c`.`category_id` = `ptc`.`category_id` AND `ptc`.`product_id` = `p`.`product_id` AND `c`.`image` = '' AND `p`.`image` <> '' AND `ptc`.`main_category` = 1");

то и кнопка не понадобится...

Спасибо да там логика такова что для главных у которых нет фото  берётся  не из товара а повторно из изображений категорий  и там где установлено не меняется , не всегда с товара прилетают адекватные фото) . 

Надіслати
Поділитися на інших сайтах


11 часов назад, zava19 сказал:

для главных у которых нет фото  берётся  не из товара а повторно из изображений категорий

Тогда второй запрос должен быть такой

$this->db->query("UPDATE `" . DB_PREFIX . "category` AS `c`, `" . DB_PREFIX . "category` AS `pc` SET `c`.`image` = `pc`.`image` WHERE `c`.`category_id` = `pc`.`parent_id` AND `c`.`image` = '' AND `pc`.`image` <> ''");

 

11 часов назад, zava19 сказал:

там где установлено не меняется

Во всех запросах которые я предложил не изменяются установленные изображения

 

11 часов назад, zava19 сказал:

не всегда с товара прилетают адекватные фото

Странно, выборка идёт из основных изображений товаров, а не из дополнительных... получается вопрос с адекватностью надо решать руками

 

Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.