Деление tv на tv

Добрый день!

Подскажите новичку как выполнить деление tv на tv и вывести итог на сайте?

Спасибо!
Алексей
07 декабря 2015, 06:24
modx.pro
1 469
0

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

Fi1osof
07 декабря 2015, 10:32
0
Пробуйте примерно так:
print $modx->runSnippet('pdoPage', [
    'debug' => 1,
    "includeTVs"    => 'image,keywords',
    "tvsSelect" => [
        "TVimage.value / TVkeywords.value as tvvalue",
    ]
]);
    Алексей
    07 декабря 2015, 10:48
    0
    Спасибо за ответ, но что-то не работает.

    Создал сниппет cena_rur, туда вставил

    <?php
    print $modx->runSnippet('pdoPage', [
        'debug' => 1,
        "includeTVs"    => 'cena_proekta_doma,cena_rur_auto',
        "tvsSelect" => [
            "TVcena_proekta_doma.value / TVcena_rur_auto.value as tvvalue",
        ]
    ]);
    на странице вывода вставил [[!cena_rur]]
      Fi1osof
      07 декабря 2015, 10:50
      0
      «TVcena_proekta_doma.value / TVcena_rur_auto.value as tvvalue»,
      То есть поле будет tvvalue. переименуйте в свое, если надо.

      на странице вывода вставил [[!cena_rur]]
      Это вызов сниппета cena_rur. Что у вас там в сниппете или вы таким образом пытаетесь вывести поле cena_rur?
        Алексей
        07 декабря 2015, 10:57
        0
        В сниппет cena_rur вставил только Ваш код(больше ничего)

        строку послюднюю изменил на
        TVcena_proekta_doma.value / TVcena_rur_auto.value as cena_rur_total
          Fi1osof
          07 декабря 2015, 11:01
          0
          Так а дальше что по вашему должно произойти? Где что появиться? Посредством чего?
            Алексей
            07 декабря 2015, 11:03
            0
            Что я не так делаю? )
              Fi1osof
              07 декабря 2015, 11:14
              0
              Может все так, но я не понимаю где вы и как хотите вывести это поле. Если вы делаете выборку документов (к примеру, через тот же getPage), то в него надо передавать еще шаблон для вывода, где вы уже прописываете вывод этого значения, к примеру, в плейсхолдер [[+cena_rur_total]].
              А если просто на странице получить значения от твшек текущей страницы, то как минимум два способа есть:
              1. Написать свой сниппет в котором прописать:
              return $modx->resource->getTVValue($tv_id1) / $modx->resource->getTVValue($tv_id2);
              2. Если у вас феном или смарти, то можно прям в шаблоне написать то же самое.
                Алексей
                07 декабря 2015, 11:31
                0
                У меня есть товар.

                У каждого товара есть TV поле cena_proekta_doma.

                TV поле cena_rur_auto присвоено только корневому ресурсу каталога.

                Мне надо вывести у каждого товара итоговую цену TV поле cena_proekta_doma разделить на TV поле cena_rur_auto

                Иными словами мне надо цену в бел.рублях (cena_proekta_doma) разделить на курс рубля (cena_rur_auto) и получить цену в российских рублях для каждого товара

                Надеюсь Вы меня поняли.
                  Fi1osof
                  07 декабря 2015, 11:40
                  0
                  На самом деле имело смысл вынести эту базовую цену в системные настройки, так как судя по всему, это своего рода курс валюты.
                  Но здесь опять-таки, все зависит от ситуации где вы это выводите. Если рассматривать случай с getPage, то так как у вас эта базовая ТВшка не в текущем документе и не в конечных товарах, то вы ее просто так в запросе не получите. Получите ее любым способом и передайте в запрос. Если рассматривать наш пример, то получается так:
                  <?php
                  print $modx->runSnippet('pdoPage', [
                      'debug' => 1,
                      "includeTVs"    => 'cena_proekta_doma,cena_rur_auto',
                      "tvsSelect" => [
                          "TVcena_proekta_doma.value / {$rate} as tvvalue",
                      ]
                  ]);
                  Но это все так, для примера. Учитывая то, что вам не просто надо tv на tv поделить, а сделать мультивалютность в рамках всего магазина (а это не только в одном месте поделить твшки, но и управление заказами, цены в уведомлениях и т.п.), вам надо переписывать топик, включая заголовок. Вам надо было обрисовать свой случай детальней, а заголовок скорее всего подойдет «Автоматический пересчет валют». Должен быть более правильный способ, нежели делить ТВшки. Я не в курсе еще есть ли нормальная мультивалютность в минишопе.
                    Алексей
                    07 декабря 2015, 11:43
                    0
                    У меня не интернет магазин(мини шоп не стоит)

                    У меня просто каталог с отдельными товарами без корзины и прочего
                      Fi1osof
                      07 декабря 2015, 11:44
                      0
                      Интернет-магазин от каталога отличается не сильно — только возможностью добавления товара в корзину и оформлением заказа. Эта разница не существенная. В большинстве случаев самое сложное — это как раз каталог, включая вот такие случаи с пересчетом цен.
                      Fi1osof
                      07 декабря 2015, 11:46
                      0
                      Может имело смысл поставить тот же минишоп, или шопмодикс, не суть.
                      В любом случае, если ничего такого нет, то примеров вам привели массу, должно хватить. И еще раз: лучше вынести курс валюты в системную настройку.
                  Павел Романов
                  07 декабря 2015, 11:40
                  0
                  Сделайте сниппет «getprice»:
                  $resource = $modx->getObject('modResource', ****);
                  $price_r = $resource->getTVValue('cena_rur_auto');
                  return $input / $price_r;

                  Вместо **** в первой строке поставьте ID корневого ресурса каталога, у которого прописан курс и используйте как модификатор.

                  В чанках:
                  [[+tv.cena_proekta_doma:getprice]]
                  В шаблоне:
                  [[*cena_proekta_doma:getprice]]
                    Fi1osof
                    07 декабря 2015, 11:42
                    0
                    И потом прописать этот сниппет по всему магазину, верно? То есть в выводе товаров в каталоге, в выводе на конечной странице товара, в добавлении товара в корзину и т.п., да?
                      Павел Романов
                      07 декабря 2015, 11:51
                      0
                      Если нужен просто вывод пересчитанной цены, почему нет?
                      Это самое простое решение в данном случае и возможно, оно удовлетворит Алексея.
                      Fi1osof
                      07 декабря 2015, 13:42
                      0
                      Не, возражений нету. Просто я думал там магазин с корзиной и точек вхождений много.
                    Алексей
                    07 декабря 2015, 11:57
                    0
                    Спасибо за ответ!

                    Цены вроде выводит, но почему то всегда число 39 508

                    цена в бел 11 700 000 делю к примеру на 270 выводит 39 508

                    Указываю курс к примеру 400, то же число на выходе 39 508

                    Мистика )
                      Максим Кузнецов
                      07 декабря 2015, 11:59
                      0
                      Мистика
                      Может кэш?)
                      Алексей
                      07 декабря 2015, 12:01
                      0
                      Не он )

                      Только что очистил… непомогло )
                      Павел Романов
                      07 декабря 2015, 12:03
                      0
                      А если так?
                      [[!getprice? &input=`[[+tv.cena_proekta_doma]]`]]
                      Алексей
                      07 декабря 2015, 12:06
                      0
                      А так 0 выводит (
                      Алексей
                      07 декабря 2015, 12:17
                      0
                      Спасибо всем… заработало!

                      Вставил в чанк [[*cena_proekta_doma:getprice]].

                      Хотя по идее надо было через плюс вставлять [[+tv.cena_proekta_doma:getprice]]

                      Павел Романов
                      07 декабря 2015, 12:29
                      0
                      Через плюс ставится только в чанке-шаблоне вывода у сниппетов типа getResources и т. д. На самой странице, естественно, через [[*...

                      Можно и встроенными модификаторами, но Вам же нужно получить курс, т. е. значение TV у другого ресурса. Я не знаю установлен у Вас getResourceField или pdoTools, поэтому проще сделать вышеописанный сниппет.
                      А так-то да (если pdoTools стоит и включен новый парсер):
                      [[*cena_proekta_doma:div=`[[#****.cena_rur_auto]]`]]
                      Алексей
                      07 декабря 2015, 13:04
                      0
                      Спасибо ребята!

                      Вариантов более чем… )
                      Максим Кузнецов
                      07 декабря 2015, 12:18
                      0
                      К слову, есть же встроенные модификаторы modx'a для этой задачи:
                      [[+что_делим:div=`[[+на_что_делим:default=`1`]]`]]
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
25