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

Сервис обмена электронных валют


Курс в shop-script

#11 Гость_Oxanita_*

Гость_Oxanita_*
  • Гости
0

Отправлено 11 Март 2009 - 10:48

ZiTosS,

Я пыталась модифицировать вот эту функцию:

function ShowPriceInTheUnit( $price, $currencyID )
{
	$q_currency = db_query( "select currency_value, where2show, code from ".
		CURRENCY_TYPES_TABLE." where CID=$currencyID"); 
	$currency = db_fetch_row( $q_currency );
	
	$price = round(( 100*$price*$multiplier*$currency["currency_value"])/$divizor)/100;
	if (round($price*10) == $price*10 && round($price)!=$price) 
		$price = "$price"."0"; //to avoid prices like 17.5 - write 17.50 instead
	return $currency["where2show"] ?  $price.$currency["code"] : $currency["code"].$price;
}

фактически вводя кросс-курс ("множителем" и "делителем"), причем для каждого товара индивидуально - поскольку цены на разные группы фиксируются в разной валюте, да еще у некоторых привязка к курсам, которые отличаются от курса в нашем магазине - короче, проще и логичнее оказалось запихать эти два параметра в дополнительные поля таблицы PRODUCTS_TABLE (ss_products).
Дальше я попыталась вставить внутрь функции, которую привожу, такой запрос:

$q_divizor = db_query( "select divizor ".
		PRODUCTS_TABLE." where productID=$productID");
(и аналогично для "множителя" multiplier)

Так их система не видит.
Попыталась "втянуть" эти параметры в функцию, где идет первое обращение к ЦЕНЕ и есть возможность добиться выбора цены и соответствующих коэффициентов из ОДНОЙ строки (привязка к [$i]:

function _formatPrice($price)
{
	$price = (string)$price;
	[b]$divizor = (string)$divizor;
	$multiplier = (string)$multiplier;[/b]

	if ( !strstr($price,".") )
		$price .= ".00";

	$oldPrice = $price;		
	$res = "";

	$i = 0;
	for( $i=strlen($price)-1; $i>=0; $i-- )
	{
		if ( $price[$i] == "." )
			break;
		else
			$res = (1/$divizor[$i])*$multiplier[$i] * $price[$i].$res;
	}

	$res = ".".$res;

	$i--;
	$digitCounter = 0;
	for(; $i>=0; $i-- )
	{
		$digitCounter++;
		$res = (1/$divizor[$i])*$multiplier[$i] * $price[$i].$res;
		if ( $digitCounter == 3 && $i != 0 )
		{
			$res = ",".$res;
			$digitCounter = 0;
		}
	}
	
	return $res;
}

Все равно не работает.
Возможно, я его как-то не так "втягиваю" (может, этот string в параметрах лишний)
Со "смарти" пробовала, но даже не буду приводить, т.к. все равно не вышло. И система ругается, что задан массив из несуществующей переменной.
  • 0

#12 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 11 Март 2009 - 16:47

У вас много где может быть ошибка.
1) PRODUCTS_TABLE - это константа по вашему, она точно определена? Возможно вы просто хотели таким образом обратиться к таблице с данным именем, тогда надо так.
$q_divizor = db_query( "select divizor FROM PRODUCTS_TABLE where productID=$productID");
Так же вы забыли в SQL запросе FROM

2) про функцию _formatPrice($price)
Вы передаёте в неё всего один параметр $price, остальные два $divizor и $multiplier не определены, они же у вас в скрипте не глобальные.

Так же не увидел где вы обрабатываете свой запрос $q_divizor
  • 0

#13 Гость_Oxanita_*

Гость_Oxanita_*
  • Гости

Отправлено 11 Март 2009 - 17:42

1) FROM в цитате забыла, в запросе не забыла. Синтаксис запроса использовала такой же, как и для "взятия" валюты.
О _formatPrice($price)
Добавила туда аргументы... Система их НЕ ВИДИТ.
А я не вижу, где $price становится глобальной переменной. И почему она, из той же таблицы, не объявленная нигде глобальной - распознается скриптом, а эти нововведенные делитель с множителем - не распознаются.
Уже вроде и в product_functions.php везде подобавляла, толку ноль.

На этой почве я вчера попыталась модифицировать таблицу так, чтобы вводить цену в разных валютах в какой-то отдельный столбец, а Price подсчитывался скриптом как ВведеннаяЦена*Множитель/Делитель и обновлялась с изменением одного или нескольких из трех составляющих. В итоге поломала всё вообще, буду наверно по новой живую базу бэкапить, на локалку заносить и мучить ее дальше. Так хоть бы еще знать, в каком направлении.

Но за комментарии и рекомендации по-любому спасибо.


  • 0

#14 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 12 Март 2009 - 10:15

Oxanita, вам надо не только в определение функции вписать имена переменных, но и при вызове.
Выложите в аттаче файлы, в которых определяется и вызывается функция formatPrice, просто вы приводите мне не весь код, я вам так ответить не смогу
  • 0

#15 Гость_Oxanita_*

Гость_Oxanita_*
  • Гости

Отправлено 12 Март 2009 - 12:18

Выкладываю. Предупреждаю сразу: не пугаться (те, которые "олд" - по идее, неизменные от шоп-скрипта, а с "нормальными" именами - версии, в которых я покопалась)!
Если вписываю при вызове - скрипт пишет, что не хватает перемнных и указывает их номера (ну например, если я написала ShowPrice($price, $divizor, $multiplier, $currency) - я сейчас не останавливаюсь на точном названии переменных, а только ПРИМЕР привожу, так вот: скрипт "не видит" нововведенные divizor & multiplier, а все "родные" переменные видит.
И я не знаю, что ему еще надо, т.к. в админ-части я уже смогла настроить ввод этих самых нвоых параметров, правда - пока только там, где выводится вся категория, но принципиально то, что новую переменную внедрить само по себе не проблема. И даже вывести в админке "для проверки" вот такое вот {$Price*$multiplier/$divizor} - не проблема: все видит, считает и выводит.

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

Прикрепленные файлы


  • 0

#16 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 17 Март 2009 - 12:38

Oxanita, я так понял _formatPrice это ваша функция, определённая вами. она цену преобразует из 1000000.95 в 1,000,000.95
И это уже строка.

Я примерно представил что у вас за проблема. Вы мне только скажите, откуда у вас $divizor и $multiplier так понял, что в таблице PRODUCTS_TABLE есть 2 поля divizor и multiplier. так или нет?
Если да, то вот вам код функции ShowPriceInTheUnit
function ShowPriceInTheUnit( $price, $currencyID )
{
	$q_currency = db_query( "select currency_value, where2show, code from ".
		CURRENCY_TYPES_TABLE." where CID=$currencyID");
	$currency = db_fetch_row( $q_currency );
	
	$q_product = db_query( "select divizor, multiplier FROM ".PRODUCTS_TABLE." where productID=$productID");
	$product = db_fetch_row( $q_product );

	$price = round(( 100*$price*$product["multiplier"]*$currency["currency_value"])/$product["divizor"])/100;
	if (round($price*10) == $price*10 && round($price)!=$price)
		$price = "$price"."0"; //to avoid prices like 17.5 - write 17.50 instead
	return $currency["where2show"] ?  $price.$currency["code"] : $currency["code"].$price;
}

И так же прошу сказать. У вас точно есть таблица с именем PRODUCTS_TABLE или это константа, определяемая скриптом? Просто я смотрю на другой запрос, там CURRENCY_TYPES_TABLE это константа.

Вы пишите
"select ... FROM PRODUCTS_TABLE where productID=$productID"
А таблицы с именем PRODUCTS_TABLE у вас наверное и нету, это же константа, поэтому её надо вставлять вне строки, то есть через оператор соединения строк "."
  • 0


Оформление форума – IPBSkins.ru