[ОТВЕТИТЬ]
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 от площади зависит
10.06.2016 07:41
aldemko
 
Оо вышло
я не там ковырял
В общем за вывод в карточке отвечает другая строка

Код:
  <div class="install-cost">
                                Цена с установкой: <br/><span>[[!viewPrice? &price=`[[*tradeprice]]`&service=`[[*servicePrice]]`&sqrSrv=`[[*SrvSq]]&discount=`[[*discount]]`&islabel=`0`]] р.</span>

я переделал в 
  <div class="install-cost">
                                Цена с установкой: <br/><span>[[!viewPrice? &price=`[[*tradeprice]]`&service=`[[*servicePrice]]`&sqrSrv=`[[*SrvSq]]`&inverter=`[[*inverter]]`&discount=`[[*discount]]`&islabel=`0`]] р.</span>
вставил тот код который ты дал и 500 рублей добавило (в карточке товара, в просмотре каталога нет - но это нужно будет шаблон найти и добавить ), но как теперь совместить все с площадью

20-25 без инвертора = 7500 с инвертором 8к
25-35 без = 8к с инвертором например 10
то-есть что бы можно было регулировать

кажется разобрался
сейчас отпишу

В общем получилось у меня такое
Код:
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) {
  if($srvSqr >= 20 && $srvSqr <= 25 )
                $service = 8000;
               
                
            else
                if($srvSqr > 25 && $srvSqr <= 35)
                    $service = 8500;
                else
                    if($srvSqr > 35 && $srvSqr <= 50)
                        $service = 9500;
                        else
                    if($srvSqr > 50 && $srvSqr <= 70)
                        $service = 11000;
                          else
                    if($srvSqr > 70 && $srvSqr <= 80)
                        $service = 11500;
                    else
                       if($srvSqr > 80 && $srvSqr <= 100)
                            $service = 12000;
}
и вывод подправленный в карточке товара
Код:
 <div class="install-cost">
                                Цена с установкой: <br/><span>[[!viewPrice? &price=`[[*tradeprice]]`&service=`[[*servicePrice]]`&sqrSrv=`[[*SrvSq]]`&inverter=`[[*inverter]]`&discount=`[[*discount]]`&islabel=`0`]] р.</span>
Осталось вывести измененную цену в каталоге а не в карточке товара, но это уже в шаблоне надо поковыряться
Спасибо
15.06.2016 06:13
aldemko
 
Загвоздка получается

код:
Код:
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) {
  if($srvSqr >= 20 && $srvSqr <= 25 )
                $service = 8000;
               
                
            else
                if($srvSqr > 25 && $srvSqr <= 35)
                    $service = 8500;
                else
                    if($srvSqr > 35 && $srvSqr <= 50)
                        $service = 9500;
                        else
                    if($srvSqr > 50 && $srvSqr <= 70)
                        $service = 11000;
                          else
                    if($srvSqr > 70 && $srvSqr <= 80)
                        $service = 11500;
                    else
                       if($srvSqr > 80 && $srvSqr <= 100)
                            $service = 12000;
}


в таком варианте в карточке товара цена на монтаж (берем 25 кв для примера) остается 7500. но так как есть инвертор должна быть 8000
для реализации вывода в карточке достаточно было дописать:
Код:
 Цена с установкой: <br/><span>[[!viewPrice? &price=`[[*tradeprice]]`&service=`[[*servicePrice]]`&sqrSrv=`[[*SrvSq]]`&inverter=`[[*inverter]]`&discount=`[[*discount]]`&islabel=`0`]] р.</span>
в карточке товара теперь все отлично выводится, но есть еще каталог товаров общий - там цена по прежнему 7500.
При этом если я в карточке вручную впишу 8000 тысяч то цена будет ( в каталоге товаров ) 8000 тысяч.

Получается что расчет $service производится лишь на основе площади, и
Код:
 if ($inverter == 1) {
  if($srvSqr >= 20 && $srvSqr <= 25 )
                $service = 8000;
не влияет на изменение.

каким образом можно заставить меняться цену переменной service ?
15.06.2016 06:39
aldemko
 
Конечно было бы проще изменить шаблон вывода
Но я запутался в этом модХ

вот что выводит таблицу каталога
код:
Код:
 <table class="productTbl">
                    [[!getConditioners? &productTemplates=`7` &categoryTemplates=`17` &id=`[[*id]]`]]
                    </table>


в шаблонах 7 и 17 ничего значительного и примечательного нет
вот шаблон getConditioners
Код:
Код:
<?php
$start_time = microtime(true);

if(!isset($_GET['select']) || $id == 3)
$out = $modx->runSnippet('Wayfinder', array(
                'startId' => $id,
                'ignoreHidden' => 1,
                'outerTpl' => 'catOuterTpl',
                'rowTpl' => 'catOuterRowTpl',
                'innerTpl' => 'catInnerTpl',
                'innerRowTpl' => 'catInnerRowTpl',
                'where' => '{"isfolder":1}',
            ));

if(isset($_GET['select']) || $id != 3){
    //ИД шаблона или шаблонов, которые будут представлять из себя заголовки секций
    //по-умолчанию - шаблон 8 - Производитель кондиционеров
    $categoryTemplates = isset($categoryTemplates) ? $categoryTemplates : 8;
    //ИД шаблона или шаблонов, которые будут представлять из себя строку товара
    //по-умолчанию - шаблон 7 - Кондиционер
    $productTemplates = isset($productTemplates) ? $productTemplates : 7;
    
    $out = '';
    $inverter = 0;
    $square = 20;
    $noise = 0;
    $rh = 2.7;
    $llvl = 0;
    $ccnt = 1;
    $pcnt = 1;
    $tvFilter = '';
    
    if(isset($_GET['rh'])){
        $rh = $_GET['rh'];
    }
    
    if(isset($_GET['llvl'])){
        $llvl = $_GET['llvl'];
    }
    
    if(isset($_GET['ccnt'])){
        $ccnt = $GET['ccnt'];
    }
    
    if(isset($_GET['pcnt'])){
        $pcnt = $_GET['pcnt'];
    }
    
    if(isset($_GET['noise'])){
        $noise = $_GET['noise'];
    }
    
    if(isset($_GET['inverter'])){
            $inverter = $_GET['inverter'];
            $tvFilter = '"inverter:=:AND":1';
    }
    
    if(isset($_GET['sq'])){
        $square = $_GET['sq'];
        $coolingPwr = ceil((($llvl/1000)*$square*$rh+0.3*$ccnt+0.1*$pcnt)*10)/10;
        $out = $out . '<br/>Минимальная необходимая мощность охлаждения: ' . $coolingPwr . 'кВт';
    
        if($tvFilter == '')
            $tvFilter = '"coolingPwr:>=,<:AND":[' . $coolingPwr . ',' . ($coolingPwr + 1) . ']';
        else
            $tvFilter = $tvFilter . ',"coolingPwr:>=,<:AND":[' . $coolingPwr  . ',' . ($coolingPwr + 1) . ']';
    }
    
    $tvFilter = '{' . $tvFilter . '}';
    //die($tvFilter);
    $where = 'WHERE template in (' . $categoryTemplates . ')';
    
    if(isset($id) && $id != 3)
        $where = $where . ' AND (parent = ' . $id . ' OR id = ' . $id . ')';
    if(isset($manufacturer))
        $where = $where . ' AND (id = ' . $manufacturer . ' OR parent = ' . $manufacturer . ')';
    
    if(isset($limit))    
        $limit = ' LIMIT ' . $limit;
    else
        $limit = '';

    $sql='SELECT DISTINCT id FROM modx_site_content ' . $where;
    //die($sql);
    $query = $modx->prepare($sql);
    $query->execute();
    
    $result = $query->fetchAll(PDO::FETCH_ASSOC);
    foreach($result as $row){
        $currentParent = $row['id'];
        $conditioners = $modx->runSnippet('getProducts', array(
                'parents' => $currentParent,
                'depth' => 3,
                'returnIDs' => 1,
                'where' => '{"isfolder": 0}',
                'tvFilters' => $tvFilter,
            ));
        if($conditioners != ''){
            //Секция
            $out = $out . $modx->runSnippet('getProducts', array(
                    'parents' => -1,
                    'resources' => $currentParent,
                    'tpl' => 'condSectionTpl',
                ));
            //Кондиционеры в секции
            $out = $out . $modx->runSnippet('getProducts', array(
                    'parents' => -1,
                    'resources' => $conditioners,
                    'includeTVs' => 1,
                    'processTVs' => 1,
                    'sortbyTV' => 'tradeprice',
                    'sortbyTVType' => 'integer',
                    'tpl' => 'conditionersTpl',
                ));
        }
    }
}

$end_time = microtime(true) - $start_time;
return $out;


но здесь нет ни слова про цену с монтажом и переменной service тоже ... (
15.06.2016 07:58
aldemko
 
В обещем если я пишу

Код:
    
  if (!isset($service) || $service == 0 || $inverter == 1) {
  if($srvSqr >= 20 && $srvSqr <= 25 )
                $service = 8000;
               
                
            else
                if($srvSqr > 26 && $srvSqr <= 35)
                    $service = 8500;
                else
                    if($srvSqr > 36 && $srvSqr <= 50)
                        $service = 9500;
                        else
                    if($srvSqr > 51 && $srvSqr <= 70)
                        $service = 11000;
                          else
                    if($srvSqr > 71 && $srvSqr <= 80)
                        $service = 11500;
                    else
                       if($srvSqr > 81 && $srvSqr <= 100)
                            $service = 12000;
}
при этом убираю первую часть кода
Код:
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;
                            
                            
    }
то данные в списке (каталоге) товаров меняются
значит мне нужно изменить как то в одной формуле значение service,
если 20-25 service = 7500 если имеется inverter ==1 то service = 8000
если 25-235 service = 8000 если имеется inverter ==1 то service = 8500
и тд и тп

попробовал затею, как это сделать но не вышло. видимо не так прописываю условия - с точки зрения правильности написания (составления в php)
15.06.2016 08:20
aldemko
 
Я надеюсь я уже близок
убираю верхние расчеты пишу $service =1
везде цена монтажа равно 1р.
15.06.2016 08:49
aldemko
 
В общем единственное что мне пришло в голову:

Код:
if(!isset($service) || $service == 0 )
    if($ids[3] == 29)
    {
            if($srvSqr >= 20 && $srvSqr <= 25 )
                $service = 7500 ;
изменить на
Код:
if(!isset($service) || $service == 0 )
    if($ids[3] == 29)
    {
            if($srvSqr >= 20 && $srvSqr <= 25 )
                $service = 7500 ;
      
            else
                if($srvSqr > 20 && $srvSqr <= 25 $interter ==1)
                    $service = 8000;
Но это не работает тоже (

так тоже

Код:
if(!isset($service) || $service == 0 || $interter ==0)
    if($ids[3] == 29)
    {
            if($srvSqr >= 20 && $srvSqr <= 25 )
                $service = 7500 ;
      
            else
                if($srvSqr > 20 && $srvSqr <= 25 $interter ==1)
                    $service = 8000;
15.06.2016 09:46
aldemko
 
Это тоже не работает (

код:
Код:
if(!isset($service) || $service == 0 )
    if($ids[3] == 29)
    {
            if($srvSqr >= 20 && $srvSqr <= 25 )
                $service = 7500 ;
      
            else
                if($srvSqr > 20 && $inverter ==1)
                    $service = 8000;
                else
                    if($srvSqr > 26 && $srvSqr <= 35)
                        $service = 8000;
                      
                  else
                    if($srvSqr > 26 && $inverter ==1)
                        $service = 8500;           
                      else
                    if($srvSqr > 36 && $srvSqr <= 50)
                        $service = 9000;       
   else
                    if($srvSqr > 36 && $inverter ==1)
                        $service = 9500;       	
  else
                    if($srvSqr > 51 && $srvSqr <= 70)
                        $service = 10000;     
 else
                    if($srvSqr > 51 && $inverter ==1)
                        $service = 11000;    
else
                    if($srvSqr > 71 && $srvSqr <= 80)
                        $service = 10500;  	
 else
                    if($srvSqr > 71 && $inverter ==1)
                        $service = 11500;    	
else
                    if($srvSqr > 81 && $srvSqr <= 100)
                        $service = 11000;  	
 else
                    if($srvSqr > 81 && $inverter ==1)
                        $service = 12000;    							
    }
15.06.2016 21:09
KirillHome
 
Цитата:
aldemko Это тоже не работает (

код:
Код:
if(!isset($service) || $service == 0 )
    if($ids[3] == 29)
    {
            if($srvSqr >= 20 && $srvSqr <= 25 )
                $service = 7500 ;
      
            else
                if($srvSqr > 20 && $inverter ==1)
                    $service = 8000;
                else
                    if($srvSqr > 26 && $srvSqr <= 35)
                        $service = 8000;
                      
                  else
                    if($srvSqr > 26 && $inverter ==1)
                        $service = 8500;           
                      else
                    if($srvSqr > 36 && $srvSqr <= 50)
                        $service = 9000;       
   else
                    if($srvSqr > 36 && $inverter ==1)
                        $service = 9500;       	
  else
                    if($srvSqr > 51 && $srvSqr <= 70)
                        $service = 10000;     
 else
                    if($srvSqr > 51 && $inverter ==1)
                        $service = 11000;    
else
                    if($srvSqr > 71 && $srvSqr <= 80)
                        $service = 10500;  	
 else
                    if($srvSqr > 71 && $inverter ==1)
                        $service = 11500;    	
else
                    if($srvSqr > 81 && $srvSqr <= 100)
                        $service = 11000;  	
 else
                    if($srvSqr > 81 && $inverter ==1)
                        $service = 12000;    							
    }
А по человечески проверки написать - не, не получится?

код:
Код:
if(!isset($service) || $service == 0 )
{
   if($ids[3] == 29)
   {
      if($srvSqr >= 20)
      {
         if($srvSqr <= 25 )
         {
            $service = 7500 ;
            if $inverter==1
            {
               $service = $service + 500;
            }
         }
         else
         {
            if($srvSqr <= 35)
            {
               $service = 8000;
               if $inverter==1
               {
                  $service = $service + 500;
               }
            }
            else
            {
               if($srvSqr <= 50)
               {
                  $service = 9000;
                  if $inverter==1
                  {
                     $service = $service + 500;
                  }
               }
               else
               {
                  if($srvSqr <= 70)
                  {
                     $service = 10000;
                     if $inverter==1
                     {
                        $service = $service + 1000;
                     }
                  }
                  else
                  {
                     if($srvSqr <= 80)
                     {
                        $service = 10500;
                        if $inverter==1
                        {
                           $service = $service + 1000;
                        }
                     }
                     else
                     {
                        if($srvSqr <= 100)
                        {
                           $service = 11000;
                           if $inverter==1
                           {
                              $service = $service + 1000;
                           }
                        }
                     }
                  }
               }
            }
         }
      }
   }
}

Вопрос - что нужно делать, если $srvSqr
1) Меньше 20
2) Больше 100
16.06.2016 02:37
aldemko
 
В общем
код:
Код:
if(!isset($service) || $service == 0 )
{
   if($ids[3] == 29)
   {
      if($srvSqr >= 20)
      {
         if($srvSqr <= 26 )
         {
            $service = 7500 ;
            if ($inverter==1)
            {
               $service = $service + 500;
            }
         }
         else
         {
            if($srvSqr <= 35)
            {
               $service = 8000;
               if ($inverter==1)
               {
                  $service = $service + 500;
               }
            }
            else
            {
               if($srvSqr <= 50)
               {
                  $service = 9000;
                  if ($inverter==1)
                  {
                     $service = $service + 500;
                  }
               }
               else
               {
                  if($srvSqr <= 70)
                  {
                     $service = 10000;
                     if ($inverter==1)
                     {
                        $service = $service + 1000;
                     }
                  }
                  else
                  {
                     if($srvSqr <= 80)
                     {
                        $service = 10500;
                        if ($inverter==1)
                        {
                           $service = $service + 1000;
                        }
                     }
                     else
                     {
                        if($srvSqr <= 100)
                        {
                           $service = 11000;
                           if ($inverter==1)
                           {
                              $service = $service + 1000;
                           }
                        }
                     }
                  }
               }
            }
         }
      }
   }
}


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

в карточке товара это выглядит так
код:
Код:
 <div class="install-cost">
                                Цена с установкой: <br/><span>[[!viewPrice? &price=`[[*tradeprice]]`&service=`[[*servicePrice]]`&sqrSrv=`[[*SrvSq]]`&inverter=`[[*inverter]]`&discount=`[[*discount]]`&islabel=`0`]] р.</span>


при этом если написать вместо
код:
Код:
if(!isset($service) || $service == 0 )
{
   if($ids[3] == 29)
   {
      if($srvSqr >= 20)
      {
         if($srvSqr <= 26 )
         {
            $service = 7500 ;
            if ($inverter==1)
            {
               $service = $service + 500;
            }
         }
         else
         {
            if($srvSqr <= 35)
            {
               $service = 8000;
               if ($inverter==1)
               {
                  $service = $service + 500;
               }
            }
            else
            {
               if($srvSqr <= 50)
               {
                  $service = 9000;
                  if ($inverter==1)
                  {
                     $service = $service + 500;
                  }
               }
               else
               {
                  if($srvSqr <= 70)
                  {
                     $service = 10000;
                     if ($inverter==1)
                     {
                        $service = $service + 1000;
                     }
                  }
                  else
                  {
                     if($srvSqr <= 80)
                     {
                        $service = 10500;
                        if ($inverter==1)
                        {
                           $service = $service + 1000;
                        }
                     }
                     else
                     {
                        if($srvSqr <= 100)
                        {
                           $service = 11000;
                           if ($inverter==1)
                           {
                              $service = $service + 1000;
                           }
                        }
                     }
                  }
               }
            }
         }
      }
   }
}


$service=1;

то цена с монтажом становится +1 к цене везде и в карточке и в каталоге

Я не очень понимаю почему так:
код:
Код:
if(!isset($service)|| $service == 0)
{
   if($ids[3] == 29)
   {
      if($srvSqr >= 20)
      {
         if($srvSqr <= 25 )
         {
            $service = 7500 ;  Если изменить это значение - оно меняется и в карточке и в каталоге
            if ($inverter==1)
            {
               $service = $service + 500;  Это значение ни на что не влияет, только почему, я пробовал и $service = 8000 и $service == 8000
            }
         }
16.06.2016 03:04
aldemko
 
в общем я изменил $inverter==1 на $inverter=1
и цена монтажа везде стала как инверторная - даже у тех кто не инвертор.
получается либо service принимает значение без инвертора, либо с ним. а одновременно разные значения не хочет почему то (


я вообще запутался
если я пишу :

Код:
if(!isset($service)|| $service == 0)
{
   if($ids[3] == 29)
   {
      if($srvSqr >= 20)
      {
         if($srvSqr <= 25 )
         {
            $service = 7500 ;
            if ($inverter==0)
            {
               $service = $service + 500;
            }
         }
то не инверторный прибавляет к цене 500 рублей
а инверторные не меняют значение - принимают лишь значение цены не инверторного. Почему так ?


Елемент выводящий таблицу каталога с ценой
Код:
  <table class="productTbl">
                    [[!getConditioners? &productTemplates=`7` &categoryTemplates=`17` &id=`[[*id]]`]]
                    </table>
я уже пересмотрел все файлы с Id 7 и 17
нигде нет упоминания про то как формируется вывод каталога

есть снипнет

getConditioners:
Код:
<?php
$start_time = microtime(true);

if(!isset($_GET['select']) || $id == 3)
$out = $modx->runSnippet('Wayfinder', array(
                'startId' => $id,
                'ignoreHidden' => 1,
                'outerTpl' => 'catOuterTpl',
                'rowTpl' => 'catOuterRowTpl',
                'innerTpl' => 'catInnerTpl',
                'innerRowTpl' => 'catInnerRowTpl',
                'where' => '{"isfolder":1}',
            ));

if(isset($_GET['select']) || $id != 3){
    //ИД шаблона или шаблонов, которые будут представлять из себя заголовки секций
    //по-умолчанию - шаблон 8 - Производитель кондиционеров
    $categoryTemplates = isset($categoryTemplates) ? $categoryTemplates : 8;
    //ИД шаблона или шаблонов, которые будут представлять из себя строку товара
    //по-умолчанию - шаблон 7 - Кондиционер
    $productTemplates = isset($productTemplates) ? $productTemplates : 7;
    
    $out = '';
    $inverter = 0;
    $square = 20;
    $noise = 0;
    $rh = 2.7;
    $llvl = 0;
    $ccnt = 1;
    $pcnt = 1;
    $tvFilter = '';
    
    if(isset($_GET['rh'])){
        $rh = $_GET['rh'];
    }
    
    if(isset($_GET['llvl'])){
        $llvl = $_GET['llvl'];
    }
    
    if(isset($_GET['ccnt'])){
        $ccnt = $GET['ccnt'];
    }
    
    if(isset($_GET['pcnt'])){
        $pcnt = $_GET['pcnt'];
    }
    
    if(isset($_GET['noise'])){
        $noise = $_GET['noise'];
    }
    
    if(isset($_GET['inverter'])){
            $inverter = $_GET['inverter'];
            $tvFilter = '"inverter:=:AND":1';
    }
    
    if(isset($_GET['sq'])){
        $square = $_GET['sq'];
        $coolingPwr = ceil((($llvl/1000)*$square*$rh+0.3*$ccnt+0.1*$pcnt)*10)/10;
        $out = $out . '<br/>Минимальная необходимая мощность охлаждения: ' . $coolingPwr . 'кВт';
    
        if($tvFilter == '')
            $tvFilter = '"coolingPwr:>=,<:AND":[' . $coolingPwr . ',' . ($coolingPwr + 1) . ']';
        else
            $tvFilter = $tvFilter . ',"coolingPwr:>=,<:AND":[' . $coolingPwr  . ',' . ($coolingPwr + 1) . ']';
    }
    
    $tvFilter = '{' . $tvFilter . '}';
    //die($tvFilter);
    $where = 'WHERE template in (' . $categoryTemplates . ')';
    
    if(isset($id) && $id != 3)
        $where = $where . ' AND (parent = ' . $id . ' OR id = ' . $id . ')';
    if(isset($manufacturer))
        $where = $where . ' AND (id = ' . $manufacturer . ' OR parent = ' . $manufacturer . ')';
    
    if(isset($limit))    
        $limit = ' LIMIT ' . $limit;
    else
        $limit = '';

    $sql='SELECT DISTINCT id FROM modx_site_content ' . $where;
    //die($sql);
    $query = $modx->prepare($sql);
    $query->execute();
    
    $result = $query->fetchAll(PDO::FETCH_ASSOC);
    foreach($result as $row){
        $currentParent = $row['id'];
        $conditioners = $modx->runSnippet('getProducts', array(
                'parents' => $currentParent,
                'depth' => 3,
                'returnIDs' => 1,
                'where' => '{"isfolder": 0}',
                'tvFilters' => $tvFilter,
            ));
        if($conditioners != ''){
            //Секция
            $out = $out . $modx->runSnippet('getProducts', array(
                    'parents' => -1,
                    'resources' => $currentParent,
                    'tpl' => 'condSectionTpl',
                ));
            //Кондиционеры в секции
            $out = $out . $modx->runSnippet('getProducts', array(
                    'parents' => -1,
                    'resources' => $conditioners,
                    'includeTVs' => 1,
                    'processTVs' => 1,
                    'sortbyTV' => 'tradeprice',
                    'sortbyTVType' => 'integer',
                    'tpl' => 'conditionersTpl',
                ));
        }
    }
}

$end_time = microtime(true) - $start_time;
return $out;
16.06.2016 03:44
aldemko
 
Я вроде как нашел где хранится шаблон вывода каталога
он в БД забит
код:
Код:
<tr class="product">
    <td>
    <div style="position:relative">
        <img src="[[+tv.itemImg:phpthumbof=`w=70`]]">
        [[If?&subject=`[[+tv.discountIcon]]`&operator=`notempty`&then=`<img src="[[+tv.discountIcon:phpthumbof=`w=30`]]" style="position:absolute;top:0;right:0;">`&else=``]]
    </div>
    </td>
    <td class="lAlign"><a href="[[~[[+id]]]]" title="[[+pagetitle]]">[[+menutitle]]</a><br/><br/><span style="font-size: 11px; color: #555">Инвертор: [[!getTV? &name=`inverter` &value=`[[+tv.inverter]]`]]; <br/>Серия: [[getResourceField? &id=`[[+parent]]` &field=`pagetitle`]]</span></td>
    <td>[[+tv.SrvSq]] м<sup>2</sup></td>
    <td>[[+tv.coolingPwr]]</td>
    <td>[[+tv.heatingPwr]]</td>
    <td style="font-weight:bold; color:#361d59; font-family: Tahoma !important; font-size: 10px">[[!viewPrice? &price=`[[+tv.tradeprice]]`&service=`0`&discount=`[[+tv.discount]]`&islabel=`0`]] р.</td>
    <td><span style="color: #0047FF;font-size: 11px;">[[!viewPrice?&id=`[[+id]]`&price=`[[+tv.tradeprice]]`&service=`[[+tv.servicePrice]]`&sqrSrv=`[[+tv.SrvSq]]`&discount=`[[+tv.discount]]`&islabel=`0`]] р.</span></td>
    <td><input style="width:13px" type="checkbox" name="compare" id="compare[[+id]]" value="1" onclick="return shkCompare.toCompare([[+id]],[[+parent]],this)" [[+id:in_compare=`checked="checked"`]] /></td>
    <td><a class="ask-btn" title="[[+longtitle]]">Заказать</a></td>
</tr>






Изменил шаблон:
<tr class="product">
<td>
<div style="position:relative">
<img src="[[+tv.itemImg:phpthumbof=`w=70`]]">
[[If?&subject=`[[+tv.discountIcon]]`&operator=`notempty`&then=`<img src="[[+tv.discountIcon:phpthumbof=`w=30`]]" style="position:absolute;top:0;right:0;">`&else=``]]
</div>
</td>
<td class="lAlign"><a href="[[~[[+id]]]]" title="[[+pagetitle]]">[[+menutitle]]</a><br/><br/><span style="font-size: 11px; color: #555">Инвертор: [[!getTV? &name=`inverter` &value=`[[+tv.inverter]]`]]; <br/>Серия: [[getResourceField? &id=`[[+parent]]` &field=`pagetitle`]]</span></td>
<td>[[+tv.SrvSq]] м<sup>2</sup></td>
<td>[[+tv.coolingPwr]]</td>
<td>[[+tv.heatingPwr]]</td>
<td style="font-weight:bold; color:#361d59; font-family: Tahoma !important; font-size: 10px">[[!viewPrice? &price=`[[+tv.tradeprice]]`&service=`0`&discount=`[[+tv.discount]]`&islabel=`0`]] р.</td>
<td><span style="color: #0047FF;font-size: 11px;">[[!viewPrice?&id=`[[+id]]`&price=`[[+tv.tradeprice]]`&service=`[[+tv.servicePrice]]`&inverter=`[[+tv.inverter]]`&sqrSrv=`[[+tv.SrvSq]]`&discount=`[[+tv.discount]]`&islabel=`0`]] р.</span></td>
<td><input style="width:13px" type="checkbox" name="compare" id="compare[[+id]]" value="1" onclick="return shkCompare.toCompare([[+id]],[[+parent]],this)" [[+id:in_compare=`checked="checked"`]] /></td>
<td><a class="ask-btn" title="[[+longtitle]]">Заказать</a></td>
</tr>

и все нормально теперь и в карточке, и в каталоге

всем спасибо.
Дурацкий модх, половина шаблонов в бд половина в файлах ...
Опции темы


Часовой пояс GMT +3, время: 16:33.

 

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