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

Выцепить картинку из базы данных


7ochukwu

Recommended Posts

Добрый день! 

Подскажите, пожалуйста как можно выцепить картинку из базы данных (дополнительные фотографии к товарам) с определенным индексом сортировки (99).

 

 

image.thumb.png.3be054069fb96d0216f73a4877306f73.png

 

 

Есть такая таблица. Здесь и prodict_id и ссылка на изображение. 

Подскажите, как можно вывести эту ссылку на картинку с индексом сортировки (1) запросом? 

 

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


SELECT * FROM `oc_product_image` WHERE `product_id` = '29' AND `sort_order` = '1' LIMIT 1

 

Змінено користувачем php
Надіслати
Поділитися на інших сайтах


37 минут назад, php сказал:

SELECT * FROM `oc_product_image` WHERE `product_id` = '29' AND `sort_order` = '1' LIMIT 1

 

Спасибо! 

Но запрос прямой. Может быть есть что то более элегантное? Используя методы ядра

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


в место 29 подставьте product_id

или что вы хотите сделать?

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


Это надо в модели товара добавить новый метод, обозвать его, например, getImagesBySortOrder($product_id, $sort_order) и в него всунуть вот этот запрос, вставив в него эти две переменные.
А в контроллере вызывать этот метод модели.
Вы об этой элегантности?

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

или просто в контроллере

$query_img = $this->db->query("SELECT * FROM `". DB_PREFIX . "product_image` WHERE `product_id` = '29' AND `sort_order` = '1' LIMIT 1");
$image = $query_img->row['image'];

 

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

3 часа назад, fanatic сказал:

или просто в контроллере


$query_img = $this->db->query("SELECT * FROM `". DB_PREFIX . "product_image` WHERE `product_id` = '29' AND `sort_order` = '1' LIMIT 1");
$image = $query_img->row['image'];

 

Дело в том, что "29" - это значение динамическое. В зависимости от товара. Как сделать динамическим? Я же не могу в SQL запрос вставить скрипт PHP

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


4 часа назад, spectre сказал:

getProductImages возвращает sort_order в том числе

Не могли бы вы поподробнее об этом.

Стал гуглить 

 

// вызов из catalog/controller/product/product.php
$this->data['images'] = array();

$results = $this->model_catalog_product->getProductImages($this->request->get['product_id']);

foreach ($results as $result) {
	$this->data['images'][] = array(
		'popup' => $this->model_tool_image->resize($result['image'], $this->config->get('config_image_popup_width'), $this->config->get('config_image_popup_height')),
		'thumb' => $this->model_tool_image->resize($result['image'], $this->config->get('config_image_additional_width'), $this->config->get('config_image_additional_height'))
	);
}

 

 

Нашел вот такую схему. 

Куда вставить значение сортировки? 

 

 

Змінено користувачем 7ochukwu
Надіслати
Поділитися на інших сайтах


38 минут назад, 7ochukwu сказал:

Дело в том, что "29" - это значение динамическое.

 

AND `sort_order` = '". $sort_order_image . "'

и перед этим подставляете в переменную нужное значение

$sort_order_image = .................

 

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

37 минут назад, 7ochukwu сказал:

Куда вставить значение сортировки? 

foreach ($results as $result) {
	if($result['sort_order'] = 29){
     		$img_29 = $result['image'];
	}

	$this->data['images'][] = array(
		'popup' => $this->model_tool_image->resize($result['image'], $this->config->get('config_image_popup_width'), $this->config->get('config_image_popup_height')),
		'thumb' => $this->model_tool_image->resize($result['image'], $this->config->get('config_image_additional_width'), $this->config->get('config_image_additional_height'))
	);
}

 

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

35 минут назад, fanatic сказал:

AND `sort_order` = '". $sort_order_image . "'

и перед этим подставляете в переменную нужное значение


$sort_order_image = .................

 

 

Пытаюсь понять что здесь написано. Но, честно, совершенно не понятно. 

 

41 минуту назад, fanatic сказал:

foreach ($results as $result) {
	if($result['sort_order'] = 29){
     		$img_29 = $result['image'];
	}

	$this->data['images'][] = array(
		'popup' => $this->model_tool_image->resize($result['image'], $this->config->get('config_image_popup_width'), $this->config->get('config_image_popup_height')),
		'thumb' => $this->model_tool_image->resize($result['image'], $this->config->get('config_image_additional_width'), $this->config->get('config_image_additional_height'))
	);
}

 

 

Индекс сортировки со значением 99, например, куда указывать? Очень сложно

 

 

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


9 минут назад, 7ochukwu сказал:

Очень сложно

 

вам же уже дали готовое решение

 

если сложно обратитесь к кому-то, заплатите пару литров и вам сделают и покажут что да как

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

53 минуты назад, fanatic сказал:

AND `sort_order` = '". $sort_order_image . "'

и перед этим подставляете в переменную нужное значение


$sort_order_image = .................

 

 

`product_id` = '29'

Проблема с этим условием. Именно оно должно ведь должно быть динамическим (разный product_id у каждого товара)

А sort_order как раз может быть статичным. 

Если я правильно все понимаю

 

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


25 минут назад, 7ochukwu сказал:

Проблема с этим условием. Именно оно должно ведь должно быть динамическим (разный product_id у каждого товара)

и в чем проблема?

так же как я показал с sort_order

где вы вообще хотите выцепить изображение? в какой ситуации?

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

Добавил в контроллер 

			foreach ($results as $result) {
					if($result['sort_order'] = 99){ // Вывод картинки сортировкой 99
     		$img_99 = $data['images'];
					}
				$data['images'][] = array(
					'popup' => $this->model_tool_image->resize($result['image'], $this->config->get($this->config->get('config_theme') . '_image_popup_width'), $this->config->get($this->config->get('config_theme') . '_image_popup_height')),
					'thumb' => $this->model_tool_image->resize($result['image'], $this->config->get($this->config->get('config_theme') . '_image_additional_width'), $this->config->get($this->config->get('config_theme') . '_image_additional_height'))
				);
			}

Пишет, переменная не определена

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


Только что, fanatic сказал:

и в чем проблема?

так же как я показал с sort_order

где вы вообще хотите выцепить изображение? в какой ситуации?

 

Дело в том что мне нужно для карточки в определенном месте вывести фотографию (одну из дополнительных). Вручную присваивается индекс фотографии из админки. Для того, чтобы не грузить 2 фото. По сути одинаковых. 

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


1 минуту назад, 7ochukwu сказал:

Добавил в контроллер 

в какой контроллер? куда именно?

чтобы код работал, сначала нужно объявить переменную  $result  и запихнуть туда изображения

 

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

1 минуту назад, fanatic сказал:

в какой контроллер? куда именно?

чтобы код работал, сначала нужно объявить переменную  $result  и запихнуть туда изображения

 

catalog/controller/product

Конечно, контроллер продукта

Змінено користувачем 7ochukwu
Надіслати
Поділитися на інших сайтах


1 час назад, fanatic сказал:

if($result['sort_order'] = 29){

if($result['sort_order'] == 29){

очепятался

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

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

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


9 минут назад, 7ochukwu сказал:

Конечно, контроллер продукта

там уже есть код перебора изображений товара

просто добавить туда  условие для вашего изображения

найти

            foreach ($results as $result) {
                $data['images'][] = array(
                  'popup' => $this->model_tool_image->resize($result['image'], $this->config->get($this->config->get('config_theme') . '_image_popup_width'), $this->config->get($this->config->get('config_theme') . '_image_popup_height')),
                  'thumb' => $this->model_tool_image->resize($result['image'], $this->config->get($this->config->get('config_theme') . '_image_additional_width'), $this->config->get($this->config->get('config_theme') . '_image_additional_height'))
                );
            }

и сделать

           

 foreach ($results as $result) {
                if($result['sort_order'] == 99){
                    $data['image_99'] = $this->model_tool_image->resize($result['image'], $this->config->get($this->config->get('config_theme') . '_image_additional_width'), $this->config->get($this->config->get('config_theme') . '_image_additional_height'));
                }
                
                $data['images'][] = array(
                  'popup' => $this->model_tool_image->resize($result['image'], $this->config->get($this->config->get('config_theme') . '_image_popup_width'), $this->config->get($this->config->get('config_theme') . '_image_popup_height')),
                  'thumb' => $this->model_tool_image->resize($result['image'], $this->config->get($this->config->get('config_theme') . '_image_additional_width'), $this->config->get($this->config->get('config_theme') . '_image_additional_height'))
                );
            }

и в шаблоне

<img src="<?php echo $image_99; ?>">

 

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

1 минуту назад, php сказал:

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

JS не подойдет скорее всего. Очень сложно идентифицировать картинку. Они могут загружаться в хаотичном порядке. Более того, скорее всего она же пойдет в качестве анонса в корзину. 

 

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


ну и проверки, вдруг не будет изображения

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

2 минуты назад, fanatic сказал:

там уже есть код перебора изображений товара

просто добавить туда  условие для вашего изображения

найти


            foreach ($results as $result) {
                $data['images'][] = array(
                  'popup' => $this->model_tool_image->resize($result['image'], $this->config->get($this->config->get('config_theme') . '_image_popup_width'), $this->config->get($this->config->get('config_theme') . '_image_popup_height')),
                  'thumb' => $this->model_tool_image->resize($result['image'], $this->config->get($this->config->get('config_theme') . '_image_additional_width'), $this->config->get($this->config->get('config_theme') . '_image_additional_height'))
                );
            }

 

В том и дело, я добавил

 

            foreach ($results as $result) {
                    if($result['sort_order'] == 99){ // Вывод картинки сортировкой 99
             $img_99 = $data['images'];
                    }
                $data['images'][] = array(
                    'popup' => $this->model_tool_image->resize($result['image'], $this->config->get($this->config->get('config_theme') . '_image_popup_width'), $this->config->get($this->config->get('config_theme') . '_image_popup_height')),
                    'thumb' => $this->model_tool_image->resize($result['image'], $this->config->get($this->config->get('config_theme') . '_image_additional_width'), $this->config->get($this->config->get('config_theme') . '_image_additional_height'))
                );
            }

Но пишет переменная img_99 не определена

 

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


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

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

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

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

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

Вхід

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

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

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

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

Important Information

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