Автоматический расчет стоимости

Добрый день!

Необходимо сделать автоматический расчет цены и вывести число на сайте

1) Есть 2 tv поля: 1-е поле (tv price 1)- цена постройки 1 этажного дома (какое-то число)

2-е поле (tv price 2) — цена постройки 2-х этажного дома (какое-то число)

2) Есть 2 категории ресурсов (одноэтажные и двухэтажные)

3) Также есть tv поле (tv plochad) с указанием площади дома

Необходимо чтобы tv plochad умножалось на цену tv price 1, если ресурс создан в категории одноэтажных домов либо на tv price 2, если ресурс создан соответственно в категории двухэтажных домов и умноженное число выводилось во фронтэнде.

Т.е должна быть проверка в какой категории создан ресурс.

Надеюсь понятно расписал )

Помогите плиз!

Спасибо!
Алексей
23 ноября 2015, 11:46
modx.pro
1
1 455
0

Комментарии: 25

Илья Уткин
23 ноября 2015, 17:01
+1
[[*plochad:mpy=`[[*parent:eq=`17`:then=`[[*price_1]]`:else=`[[*price_2]]`]]`]]

Но лучше, конечно, написать сниппет [[*id:getPrice]]:
if (isset($input) && $input) {
  $resource = $modx->getObject('modResource', $input);
  if (!$resource) return '';
} else {
  $resource = $modx->resource;
}
switch ($resource->parent) {
  // Перечисляем категории 1-этажных домов
  case 17:
  case 22:
  case 38:
    $output = $resource->getTVValue('price_1') * $resource->getTVValue('plochad');
    break;
  // И двухэтажных
  case 24:
    $output = $resource->getTVValue('price_2') * $resource->getTVValue('plochad');
    break;
  default:
    $output = '';
    break;
}
return $output;
    Алексей
    24 ноября 2015, 10:52
    0
    Спасибо за ответ!

    Не работает что-то )

    Создал сниппет getPrice.

    [[*id:getPrice]] если это вставляю, то выводит просто id ресурса

    Что не так?
      Илья Уткин
      24 ноября 2015, 11:02
      0
      Может, [[+id:getPrice]]?
        Алексей
        24 ноября 2015, 11:09
        0
        Тогда вообще пусто…
          Алексей
          24 ноября 2015, 11:15
          0
          Если вставляю [[*plochad:mpy=`[[*parent:eq=`17`:then=`[[*price_1]]`:else=`[[*price_2]]`]]`]]

          то выводит просто общую площадь…
    Алексей
    24 ноября 2015, 14:14
    0
    Илья, выручайте )
      Илья Уткин
      24 ноября 2015, 14:24
      0
      Проверьте названия твшек
        Алексей
        24 ноября 2015, 14:35
        0
        Проверил… все правильно указываю!
          Илья Уткин
          24 ноября 2015, 14:37
          0
          Ну тогда я не знаю… может, у сообщесва будут идеи…
            Алексей
            24 ноября 2015, 14:43
            0
            Спасибо за попытки )
      Алексей
      24 ноября 2015, 16:36
      0
      Ребята, помогите советом.
        Воеводский Михаил
        24 ноября 2015, 17:39
        0
        Сниппет Илья написал правильный.

        Напишите ид обеих категорий и скиньте итоговый код код сниппета, который создали у себя.
        Алексей
        25 ноября 2015, 09:19
        0


        сам сниппет

        <?php
        if (isset($input) && $input) {
        $resource = $modx->getObject('modResource', $input);
        if (!$resource) return '';
        } else {
        $resource = $modx->resource;
        }
        switch ($resource->parent) {
        // Перечисляем категории 1-этажных домов
        case 2:
        $output = $resource->getTVValue('price_etag_1') * $resource->getTVValue('plochad_obchaya');
        break;
        // И двухэтажных и мансардных
        case 24:
        case 34:
        $output = $resource->getTVValue('price_etag_2') * $resource->getTVValue('plochad_obchaya');
        break;
        default:
        $output = '';
        break;
        }
        return $output;

        вызываю на странице так [[*id:getPrice]]

        При вызове только id категории выводится
          Алексей
          25 ноября 2015, 09:39
          0
          Если вызывать так [[!getPrice]], и TV price_etag_1 и price_etag_2 присвоить шаблону вывода дома и вбить цифры в эти TV в любом доме, то все считается, но ТОЛЬКО для конкретного дома

          Если TV присвоить просто странице каталога, тогда пишет цена 0
            Илья Уткин
            25 ноября 2015, 19:36
            +1
            Разверните-ка дерево ресурсов и укажите, у каких ресурсов указана цена, у каких указана площадь. Если я в этот раз правильно понял, то вот так должно работать:

            <?php
            if (isset($input) && $input) {
                $resource = $modx->getObject('modResource', $input);
                if (!$resource) return '';
            } else {
                $resource = $modx->resource;
            }
            switch ($resource->parent) {
                // Перечисляем категории 1-этажных домов
                case 2:
                    $output = $resource->Parent->getTVValue('price_etag_1') * $resource->getTVValue('plochad_obchaya');
                    break;
                // И двухэтажных и мансардных
                case 24:
                case 34:
                    $output = $resource->Parent->getTVValue('price_etag_2') * $resource->getTVValue('plochad_obchaya');
                    break;
                default:
                    $output = '';
                    break;
            }
            return $output;
              Алексей
              25 ноября 2015, 20:00
              0
              вот дерево ресурсов



              поля цены выставил для ресурса проекты домов(корень)

              поле площади есть у каждого ресурса (конкретного дома)

              Вставил Ваш обновленный код… все равно не работает… только id показывает
                Илья Уткин
                25 ноября 2015, 20:02
                +2
                <?php
                if (isset($input) && $input) {
                    $resource = $modx->getObject('modResource', $input);
                    if (!$resource) return '';
                } else {
                    $resource = $modx->resource;
                }
                $root = $modx->getObject('modResource', 1);
                switch ($resource->parent) {
                    // Перечисляем категории 1-этажных домов
                    case 2:
                        $output = $root->getTVValue('price_etag_1') * $resource->getTVValue('plochad_obchaya');
                        break;
                    // И двухэтажных и мансардных
                    case 24:
                    case 34:
                        $output = $root->getTVValue('price_etag_2') * $resource->getTVValue('plochad_obchaya');
                        break;
                    default:
                        $output = '';
                        break;
                }
                return $output;
                  Алексей
                  25 ноября 2015, 20:08
                  0
                  УРА! Заработало!

                  Спасибище Вам Илья!
                    Илья Уткин
                    25 ноября 2015, 20:12
                    0
                    Вот в следующий раз всегда структуру тоже показывайте. Мы, программисты, хоть и обладаем экстрасенсорными способностями, но в меньшей степени, чем, например, Пахом…

                      Алексей
                      26 ноября 2015, 10:44
                      0
                      Спасибо!

                      Обязательно учту!
            Алексей
            26 ноября 2015, 10:46
            0
            Еще вопросик…

            Как мне выводимое число сделать с пробелом после 2-х знаков

            к примеру выводится число 51500, а необходимо 51 500
              Алексей
              26 ноября 2015, 11:05
              0
              UPD Решено!
                Купчинский Михаил
                26 ноября 2015, 15:31
                0
                Поделитесь решением)
                  Алексей
                  26 ноября 2015, 15:36
                  +1
                  Вот держите…

                  последнюю строку

                  return $output;


                  заменяем на

                  $myNumber = $output;
                  
                  return number_format( $myNumber, 0, ',', ' ' );
                  это с округлением

                  если нужны числа после запятой то укажите
                  ( $myNumber, 2, ',', ' ' )
                    Купчинский Михаил
                    26 ноября 2015, 15:52
                    0
                    Ок, спасибо! попробую у себя. Мне правда нужно отформатировать число, получаемое из дополнительного поля Minishopa. наверное придется написать сниппет для этого.
              Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
              25