Форум OlegON > Компьютеры и Программное обеспечение > Операционные системы и программное обеспечение > Программирование

Помогите с реализацией расчета стоимости монтажа : Программирование

29.03.2024 13:39


09.06.2016 10:19
aldemko
 
Всем привет
Помогите с реализацией вывода стоимости монтажа в зависимости от площади и доп функции.
Код расчета стоимости в зависимости от площади
код:


Скрытый текст (вы должны зарегистрироваться или войти под своим логином):
У вас нет прав чтобы видеть скрытый текст, содержащийся здесь.




srvSqr = это площадь

Теперь появилась немного усложнить скрипт
нужно еще учитывать доп функцию, если она есть то цена другая (на те же квадраты)
(цмс Мод х)
есть еще Дополнительное поле (TV): inverter (есть==1)
тип ввода флажок (он ставится в карточке товара)
Можно ли каким либо образом к скрипту который описан в начале прикрутить что если есть наличие инвертора (на той же площади) цена была другой ?
спасибо
09.06.2016 11:03
OlegON
 
Проблема-то в чем?
09.06.2016 13:19
aldemko
 
Проблема я не могу составить правильно запрос что бы было
если площадь >20 но <25 то цена 7500
а если >20 но <25 + инвертор то цена 8000
09.06.2016 17:50
OlegON
 
тут запросом и не пахнет, обычный алгоритм, причем, ты никаких переменных по инвертору и т.п. не вводишь, хз, что тебе подсказать.
09.06.2016 19:43
twix
 
Я вот чота не пойму... Битрикс настолько плох, что штатными средствами нельзя реализовать подобное? А как же модификаторы цен на товары? Скидки от количества? Опции?
*рукалицо*
10.06.2016 04:13
aldemko
 
Это не битрикс это МодХ
В битриксе штатными средствами можно реализовать нечто подобное.
я не ввел никаких переменных по инвертору потому что не знаю как правильно дописать его
Код:
 if($srvSqr >= 20 && $srvSqr <= 25)
                $service = 7500;
я не знаю правильным ли будет написать так

Код:
 if($srvSqr >= 20 && $srvSqr <= 25 && $inverter==0)  
                $service = 7500; - если без инвертора
 else
                if($srvSqr > 20 && $srvSqr <= 25 && $inverter==1 ) 
                    $service = 8000; - если площадь та же но есть инвертор цена выше
такой синтаксис правильным будет ?
Просто еще одна загвоздка (для меня)
как я понимаю переменной inverter в виде $inverter в модХ не интересует
данное доп поле - судя по документации МодХ может выглядеть так [[*inverter]]
и в коде вывода его на сайте тоже значится [[*inverter]]
а это доп поле (в таком виде) я наверное не смогу вписать в формулу
Зы
Хотя перечитал содержимое и [[*SrvSq]] тоже в таком виде - получается что [[*inverter]] и $inverter будет одно и тоже, так же как и квадратура

Судя по всему
Код:
 if($srvSqr >= 20 && $srvSqr <= 25 && $inverter==0)  
                $service = 7500; - если без инвертора
 else
                if($srvSqr > 20 && $srvSqr <= 25 && $inverter==1 ) 
                    $service = 8000; - если площадь та же но есть инвертор цена выше
такой синтаксис правильным будет ?
работать не будет - так как проверил не работает
10.06.2016 06:10
aldemko
 
Пробовал и по простому
не получается
написал
Код:
  if($srvSqr >= 20 && $srvSqr <= 25 and $inverter==1)
                $service = 7500;
цена монтажа вообще стала стоить 0р.

написал
Код:
  if($srvSqr >= 20 && $srvSqr <= 25 and $inverter==0)
                $service = 7500;
цена 7500
я пробовал и && и and

в начале скрипта было
Код:
<?php
$discount = $modx->getOption('discount', $scriptProperties);
$service = $modx->getOption('service', $scriptProperties);
$oldPrice = $modx->getOption('price', $scriptProperties);
$srvSqr = $modx->getOption('sqrSrv', $scriptProperties);
я по аналогии к этому дописал 
$inverter = $modx->getOption('inverter', $scriptProperties);  - ничего не изменилось

Переменная вроде верно написана - взял из страницы детального просмотра
Код:
 <tr style="border-bottom: 1px dotted #999;">
                                    <td style="border: none">Инвертор</td>
                                    <td style="border: none; text-align: right">[[!getTV? &name=`inverter` &value=`[[*inverter]]`]]</td>
                                </tr>
                                <tr style="border-bottom: 1px dotted #999;">
                                    <td style="border: none">Площадь помещения</td>
                                    <td style="border: none;text-align: right">[[*SrvSq:is=``:then=`НУ`:else=`[[*SrvSq]]`]] м<sup>2</sup></td>
                                </tr>
Доп поле Inverter имеет тип флажок
и возможные значения есть==1


Вот весь скрипт - может в нем где ошибка

Скрытый текст (вы должны зарегистрироваться или войти под своим логином):
У вас нет прав чтобы видеть скрытый текст, содержащийся здесь.
10.06.2016 06:42
aldemko
 
Это значение ничего не дает


Код:
$inverter = $modx ->getOption('inverter', $scriptProperties);
что оно есть что нет.
Даже
Код:
  else
                if($inveter==1)
                    $service = 8000;
ничего не дает (
10.06.2016 06:45
twix
 
Не мешай логические операторы. У них разный приоритет, и результат будет совсем не тот, что ты ожидаешь. Если начал использовать &&, то их и используй, не подменяя местами на AND. Да и вообще, словесные операторы как-то уже давно не встречал...

А ещё, имхо, инвертор, как модификатор, надо отдельно считать:
Код:
if ($SrvSq >= 20 && $SrvSq <= 25) {
$service = 7500;
}
...
if ($inverter == 1) {
$service += 500;
}
10.06.2016 06:57
aldemko
 
Не прибавляет 500 р
по поводу and - я просто решил пробовать разные варианты.

Код:
if(!isset($service) || $service == 0)
    if($ids[3] == 29)
    {
            if($srvSqr >= 20 && $srvSqr <= 25 )
                $service = 7500;
               
                
            else
                if($srvSqr > 25 && $srvSqr <= 35)
                    $service = 8000;
                else
                    if($srvSqr > 35 && $srvSqr <= 50)
                        $service = 9000;
                        else
                    if($srvSqr > 50 && $srvSqr <= 70)
                        $service = 10000;
                          else
                    if($srvSqr > 70 && $srvSqr <= 80)
                        $service = 10500;
                    else
                       if($srvSqr > 80 && $srvSqr <= 100)
                            $service = 11000;
    }
    
    
    
    
 if ($inverter == 1) {
$service += 500;
}
и там на разную площадь, с инвертором разная разница, то 500 то 1000 от площади зависит
Часовой пояс GMT +3, время: 13:39.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.