X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

2 страниц V  < 1 2
Открыть тему
Тема закрыта
> Курс в shop-script
Гость_0_* Гость_0_*
сообщение 11.3.2009, 11:48; Ответить: Гость_0_*
Сообщение #12


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 в параметрах лишний)
Со "смарти" пробовала, но даже не буду приводить, т.к. все равно не вышло. И система ругается, что задан массив из несуществующей переменной.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZiTosS
ZiTosS
сообщение 11.3.2009, 17:47; Ответить: ZiTosS
Сообщение #13


У вас много где может быть ошибка.
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_* Гость_0_*
сообщение 11.3.2009, 18:42; Ответить: Гость_0_*
Сообщение #14


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

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

Но за комментарии и рекомендации по-любому спасибо.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZiTosS
ZiTosS
сообщение 12.3.2009, 11:15; Ответить: ZiTosS
Сообщение #15


Oxanita, вам надо не только в определение функции вписать имена переменных, но и при вызове.
Выложите в аттаче файлы, в которых определяется и вызывается функция formatPrice, просто вы приводите мне не весь код, я вам так ответить не смогу
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Гость_0_* Гость_0_*
сообщение 12.3.2009, 13:18; Ответить: Гость_0_*
Сообщение #16


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

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

Прикрепленные файлы
Прикрепленный файл  product_functions_old.php ( 37,9 килобайт ) Кол-во скачиваний: 97
Прикрепленный файл  product_functions.php ( 39,24 килобайт ) Кол-во скачиваний: 90
Прикрепленный файл  functions_old.php ( 29,42 килобайт ) Кол-во скачиваний: 101
Прикрепленный файл  functions.php ( 30,32 килобайт ) Кол-во скачиваний: 94
 
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZiTosS
ZiTosS
сообщение 17.3.2009, 13:38; Ответить: ZiTosS
Сообщение #17


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 у вас наверное и нету, это же константа, поэтому её надо вставлять вне строки, то есть через оператор соединения строк "."

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
2 страниц V  < 1 2
Открыть тему
Тема закрыта
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Магазин FB акаунтов от "Я - рядом!" - iRyadom.Shop! БМ, ЕААВ, EAAG, ФП нового типа!
Магазин ФБ каков - рядом!
0 Думаю 1251 28.11.2022, 22:30
автор: Думаю
Открытая тема (нет новых ответов) Лицензия на Shop script 8 + плагины
2 inetuser 2974 17.1.2022, 23:30
автор: inetuser
Открытая тема (нет новых ответов) Онлайн курс: 5 шагов к успеху за 1 месяц
28 Fubuki 7428 28.12.2020, 1:25
автор: adamsadriane
Горячая тема (нет новых ответов) Обмен: Яндекс Деньги, Киви на ваши WMR, курс 1:1 (без комиссии)
41 Nonsys 22183 22.8.2020, 17:32
автор: Nonsys
Открытая тема (нет новых ответов) Купить аккаунты недорого на red-shop.pro
Магазин аккаунтов соц сетей
17 redshop 8335 26.3.2020, 17:56
автор: Azyuka


 



RSS Текстовая версия Сейчас: 18.4.2024, 16:21
Дизайн