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

Вывод цены из БД


inoplanetny

Recommended Posts

Помогите, пожалуйста, вывести цену продукта (на его странице) в первоначальном виде,

т.е. "8950.0000", а не "8,950.00 р.". Может быть в PHP есть какая-либо функция? :unsure:

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


Прошу прощения ).

Установлена ocStore 0.2.2. Шаблон default.

На странице продукта (например, /index.php?route=product/product&path=46_48&product_id=59) пытаюсь вывести значение $price, в том виде, в котором она хранится в БД. Выводится с запятой и словом "руб" (8,500.00 руб). А требуется вывести как в БД - 8500.0000.

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


Прошу прощения ).

Установлена ocStore 0.2.2. Шаблон default.

На странице продукта (например, /index.php?route=product/product&path=46_48&product_id=59) пытаюсь вывести значение $price, в том виде, в котором она хранится в БД. Выводится с запятой и словом "руб" (8,500.00 руб). А требуется вывести как в БД - 8500.0000.

В файле \catalog\controller\product\product.php в строчке 200 это если у тебя нет цпецыальных предложений.

$this->data['price'] = $this->currency->format($this->tax->calculate($product_info['price'], $product_info['tax_class_id'], $this->config->get('config_tax')));

замени на

$this->data['price'] = $product_info['price'];

Если есть спец предложения (discount) то в строчке 196

это

$this->data['price'] = $this->currency->format($this->tax->calculate($discount, $product_info['tax_class_id'], $this->config->get('config_tax')));

Замени на

$this->data['price'] =$discount;

И все должно выводится, так как хранится в базе!

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


Большое спасибо!

Появился ещё один вопрос, как вывести (там же) дату окончания действия спец. предложения?

Идем в \catalog\model\catalog\

открываем файл - product.php

Ищем функцию - getProductDiscount() и запрос в ней

$query = $this->db->query("SELECT price FROM " . DB_PREFIX . "product_discount WHERE product_id = '" . (int)$product_id . "' AND customer_group_id = '" . (int)$customer_group_id . "' AND quantity = '1' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY priority ASC, price ASC LIMIT 1");

Изменяем его на

$query = $this->db->query("SELECT price,date_end  FROM " . DB_PREFIX . "product_discount WHERE product_id = '" . (int)$product_id . "' AND customer_group_id = '" . (int)$customer_group_id . "' AND quantity = '1' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY priority ASC, price ASC LIMIT 1");

Ниже


if ($query->num_rows) {
	return $query->row['price'];
} else {
	return FALSE;
}

Изсеняем на


if ($query->num_rows) {
	return $query->row;
} else {
	return FALSE;
}

Ищем функцию getProductSpecial()

ищем


$query = $this->db->query("SELECT priceFROM " . DB_PREFIX . "product_special WHERE product_id = '" . (int)$product_id . "' AND customer_group_id = '" . (int)$customer_group_id . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY priority ASC, price ASC LIMIT 1");

if ($query->num_rows) {
	return $query->row['price'];
} else {
	return FALSE;
}

Меняем на


$query = $this->db->query("SELECT price,date_end  FROM " . DB_PREFIX . "product_special WHERE product_id = '" . (int)$product_id . "' AND customer_group_id = '" . (int)$customer_group_id . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY priority ASC, price ASC LIMIT 1");

if ($query->num_rows) {
	return $query->row;
} else {
	return FALSE;
}

Идем в \catalog\controller\product\product.php

Ищем


if ($discount) {
	$this->data['price'] = $this->currency->format($this->tax->calculate($discount, $product_info['tax_class_id'], $this->config->get('config_tax')));
				
	$this->data['special'] = FALSE;
} else {
	$this->data['price'] = $this->currency->format($this->tax->calculate($product_info['price'], $product_info['tax_class_id'], $this->config->get('config_tax')));
			
	$special = $this->model_catalog_product->getProductSpecial($this->request->get['product_id']);
			
	if ($special) {
		$this->data['special'] = $this->currency->format($this->tax->calculate($special, $product_info['tax_class_id'], $this->config->get('config_tax')));
	} else {
		$this->data['special'] = FALSE;
	}
}

Меняем на


if ($discount) {
	$this->data['price'] = $discount['price'];
	$this->data['descount_date_end'] = date($this->language->get('date_format_short'), strtotime($discount['date_end']));
				
	$this->data['special'] = FALSE;
} else {
	$this->data['price'] = $product_info['price'];
			
	$special = $this->model_catalog_product->getProductSpecial($this->request->get['product_id']);
			
	if ($special) {
		$this->data['special'] = $special['price'];
		$this->data['special_date_end'] = date($this->language->get('date_format_short'), strtotime($special['date_end']));
	} else {
		$this->data['special'] = FALSE;
	}
}

Открываем фаблон вывода и в нужные места вставляем переменные

$descount_date_end - это дата окончания скидки

$special_date_end - это дата окончания спец предложения

Вроде все! Но если у тебя выводится модуль АКЦИИ и страница АКЦИИ, то в контроллере, может нужно будет сделать изменения...

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


с Вашим кодом всё работает! ;)

Но в "catalog/controller/product.php" у меня немного другой код, т.к. добавил это: https://opencartforum.com/topic/2004-спецпредложения-скидка-в-процентах/, в итоге, изменив "catalog/model/catalog/product.php", а "catalog/controller/product.php" оставив как есть, вылетает: Fatal error: Unsupported operand types in ***/system/library/currency.php on line 70.

А код следующий, ковыряю уже часа полтора :(

			if ($discount) {
				$this->data['price'] = $this->currency->format($this->tax->calculate($product_info['price'], $product_info['tax_class_id'], $this->config->get('config_tax')));
				
				$this->data['special'] = FALSE;
			} else {
							
				$this->data['price'] = $this->currency->format($this->tax->calculate($product_info['price'], $product_info['tax_class_id'], $this->config->get('config_tax')));
			
				$special = $this->model_catalog_product->getProductSpecial($this->request->get['product_id']);
				$GLOBALS["special_clean"] = $special;
				
				if ($special < 1) {$special = (int)($product_info['price'] * $special);  $special = round($special,-1);} // наша строка для расчета скидки в процентах
							
				if ($special) {
					$this->data['special'] = $this->currency->format($this->tax->calculate($special, $product_info['tax_class_id'], $this->config->get('config_tax')));
					//$this->data['price'] = $product_info['price'];
					$this->data['price'] = $this->currency->format($this->tax->calculate($product_info['price'], $product_info['tax_class_id'], $this->config->get('config_tax')));
				} else {
					$this->data['special'] = FALSE;
				}
			}

В шаблоне вывожу следующую строку:

if (isset($special) and $special !=0) 
	{
	$percent = (1 - $GLOBALS["special_clean"])*100;
	echo "</br></br><p class='skidka'>".$text_skidka." ".round($percent)."%</br>до ".$special_date_end."</p>";
	}
Надіслати
Поділитися на інших сайтах


В файле \catalog\controller\product\product.php в строчке 200 это если у тебя нет цпецыальных предложений.

Ну зачем же сразу такой вандализм...

Данные из БД (в сыром виде) доступны во вьювере через массив $product_info

<?php echo $product_info['price']; ?>
Надіслати
Поділитися на інших сайтах

Ну зачем же сразу такой вандализм...

Данные из БД (в сыром виде) доступны во вьювере через массив $product_info

<?php echo $product_info['price']; ?>

А в чем вандализм? Я также принципи написал, только сделал не вывод, а занес в $this->data['price']. Все остальное если внимательно посмотреть код, то используется, если для товара есть Спецпредложения или этот товар Акционный.

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


Если используются спецпредложения или скидки на количестве - то надо править контроллер, а в простейшем случае, с которого ты начал описание, можно контроллер не трогать.

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

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

Если используются спецпредложения или скидки на количестве - то надо править контроллер, а в простейшем случае, с которого ты начал описание, можно контроллер не трогать.

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

Это я впринципи понимаю, но, оказывается изменения в контроллере он сделал уже до того как я посоветовал это делать и "+" даже логично можно подумать, если есть функция спрецвпредложения, то ее будут использовать (нужно ж как-то привлекать клиентов на праздники).

Тем боле по опыту знаю, и это даже написанно на оффсайте, в мануале, что стандартная тема урезана и не показывает всех возможностей OpenCart.

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


А код следующий, ковыряю уже часа полтора :(

Выложи код функции getProductSpecial() какой был до изменений.

Просто не изменял таким образом вывод спецпредложений.

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


Выложи код функции getProductSpecial() какой был до изменений.

Просто не изменял таким образом вывод спецпредложений.

public function getProductSpecial($product_id) {
		if ($this->customer->isLogged()) {
			$customer_group_id = $this->customer->getCustomerGroupId();
		} else {
			$customer_group_id = $this->config->get('config_customer_group_id');
		}

		$query = $this->db->query("SELECT price FROM " . DB_PREFIX . "product_special WHERE product_id = '" . (int)$product_id . "' AND customer_group_id = '" . (int)$customer_group_id . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY priority ASC, price ASC LIMIT 1");

		if ($query->num_rows) {
			return $query->row['price'];
		} else {
			return FALSE;
		}
	}
Надіслати
Поділитися на інших сайтах


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

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

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

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

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

Вхід

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

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

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

Important Information

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