msOptionsPrice2 Вывод остатков на страницу товара.

Здравствуйте! Сломал уже голову… Помогите вывести на страницу остатки товара из модификации msOptionsPrice2 или при остатке товара = 0 — скрыть кнопку «В корзину». Заранее благодарю Вас!
Николай Мирошниченко
30 марта 2023, 20:53
modx.pro
3
481
0

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

Артур Шевченко
31 марта 2023, 10:29
0
Если вы выводите список модификаций на страницу, то можно попробовать использовать плейсхолдер count.
    Николай Мирошниченко
    01 апреля 2023, 11:41
    0
    К сожалению не вывожу списком. Работают как опции товара. Скрыть кнопку «купить» если кол-во = 0… подскажите это, в целом, возможно? Возможно был опыт?
Николай Мирошниченко
01 апреля 2023, 12:34
0
Делаю вот так:
Вызываю так на странице товара

[[!msOptionsPrice.modification?
&tpl=`count_tpl`
&where=`{"count" > 0}`
&toPlaceholder=`mycounts`
]]
Чанк count_tpl
[[+count]] шт
Затем пытаюсь вывести на странице так
<span class="msoptionsprice-count msoptionsprice-[[*id]]">[[+mycounts]]</span>
Я понимаю что ошибка но не могу понять как это решить. На примере есть вывод кол-ва товара вот тут, но как его вывести… не пойму
    Николай Мирошниченко
    01 апреля 2023, 21:47
    0
    Кому интересно, то вот так реализовал. Костыли, но работают…
    На странице товара вывожу остаток модификации товара

    <p class="msoptionsprice-count msoptionsprice-[[*id]] numeric-value" id="ajax-container">[[+count]]</p>
    в footer добавил js с таким содержимым

    document.addEventListener("DOMContentLoaded", function() {
      function handleAjax() {
        const numericElements = document.querySelectorAll(".numeric-value");
        for (let i = 0; i < numericElements.length; i++) {
          const value = parseFloat(numericElements[i].textContent);
          if (value === 0) {
            numericElements[i].textContent = "Нет в наличии";
          } else if (value > 0) {
            numericElements[i].textContent = "Есть в наличии";
          }
        }
      }
      document.addEventListener("ajaxLoad", handleAjax);
      setTimeout(function() {
        const newNumericValue = document.createElement("span");
        newNumericValue.textContent = "0";
        newNumericValue.classList.add("numeric-value");
        document.body.appendChild(newNumericValue);
        const newNumericValue2 = document.createElement("span");
        newNumericValue2.textContent = "10";
        newNumericValue2.classList.add("numeric-value");
        document.body.appendChild(newNumericValue2);
        const ajaxLoadEvent = new Event("ajaxLoad");
        document.dispatchEvent(ajaxLoadEvent);
      }, 3000);
      const observer = new MutationObserver(function(mutationsList) {
        for (const mutation of mutationsList) {
          if (mutation.type === "childList") {
            const ajaxLoadEvent = new Event("ajaxLoad");
            document.dispatchEvent(ajaxLoadEvent);
          }
        }
      });
      const ajaxContainer = document.querySelector("#ajax-container");
      if (ajaxContainer) {
        observer.observe(ajaxContainer, { childList: true });
      }
    });
      Артур Шевченко
      01 апреля 2023, 22:07
      +1
      В вёрстке добавляем блок
      <div id="remain">0</div>
      В ФАЙЛ со скриптами (потому что нужно блюсти чистоту кода) добавляем код:
      $(document).on('msoptionsprice_product_action', function (e, action, form, response) {
             $('#remain').innerText = response.modification.count;   
      });
      Всё.
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      7