Сохранить
Сохраняем
  • Asderkdw

    Да, на форуме проскальзывала подсказка про использование param_edit_table, но у меня не хватило мозгов быстро этот вариант решить. Благодарю за подробную подсказку с примером. Очень интересно.

    написал в Недокументированные решения отдельных задач Читать далее
  • Asderkdw

    Установлена Демо-сборка автора - MODx 2.5.5 + Shopkeeper 3.2.6. Проведено обновление MODx до версии 2.7.1.

    Мультивалютность - пересчета цены param_edit.

    Задача: Реализовать визуализацию пересчета цены дополнительных параметров, выводимых через tv с типом ввода param_edit, по курсу в текущую валюту сайта (выбранную пользователем).

    Проблема состоит в том, что из коробки нет пересчета цен доп. параметров с ценой, и они всегда выводятся в той валюте, в которой заданы в карточке товара. Хотя при добавлении товара в корзину пересчет по валютам производится корректно:
    0_1555053969076_2.jpg
    На странице товара получаем:
    0_1555053992578_1.jpg

    На сегодняшний день этот момент автором не решен, очень надеюсь, что хотя разработка Shopkeeper 3 остановлена, но все же Андрей в будущем выпустит еще для нас обновление Shopkeeper-а 3.хх, и тогда этот момент будет учтен.

    По докам вывод производится так:

    <div class="product-price">
    	Цена: <span class="shk-price">[[!*price:shk_curr_rate:num_format]]</span>
    	[[!+shk_currency]]
    </div>
    
    <div class="padding-lr-30">
    	<h5>Дополнительные услуги</h5>
    	[[*params:replace=`[[+id]]==[[*id]]`]]
    </div>
    

    Т.е. доп. параметры выводятся с помощью модификатора replace, преобразованием данных из tv params. В итоге в html-коде на странице товара получаем набор чекбоксов:

    <div class="padding-lr-30">
      <h5>Дополнительные услуги</h5>
      <div><input class="shk_param" type="checkbox" name="params__15__0" value="0__500" id="params150" onclick="SHK.additOpt(this)" /> <label for="params150">Установка ПО</label></div>
      <div><input class="shk_param" type="checkbox" name="params__15__1" value="1__1000" id="params151" onclick="SHK.additOpt(this)" /> <label for="params151">Гарантия +1 год</label></div>
    </div>
    

    Соответственно цены доп. параметров выводятся в value="0__500" и value="1__1000", и по клику по чекбоксу запускается обработчик onclick="SHK.additOpt(this)", который находится в файле /assets/components/shopkeeper3/web/js/shopkeeper.js.

    *(Внимательно смотреть что подключается в чанке head. В моем случае этот чанк подгружается из файла assets/template/head_dev.html).

    Я решил этот момент следующим образом:

    В оригинальном файле shopkeeper.js в стр. 771 обработчик произвел подсчет суммы цен выбранных доп. параметров и поместил ее в переменную additPriceSum.
    стр. 771. additPriceSum = this.round(additPriceSum,2);
    и далее в стр. 772 формируется тег <sup> … </sup>, в который и выводится суммарная цена выбранных доп. параметров.
    Значит, достаточно знать курс текущей валюты по отношению к базовой и пересчитать эту переменную, умножив на текущий курс. Но где взять текущий курс?

    Вариантов решения несколько, например, использовать сниппет shkOptions, как рекомендовал Андрей кому-то, в одной из тем.:

    [[!shkOptions?
    &get=`currency_rate`
    &post_name=`currency_rate`
    &toPlaceholders=`1`
    &pl_prefix=`shkopt_`
    &tpl=`shkOptionsTpl`
    ]]
     [[!+shkopt_currency_rate]]
    

    Пример чанка (tpl) shkOptionsTpl:

    <p>id=[[+id]], value=[[+value]], label=[[+label]]</p>
    

    И дальше что-то с этим делать я не стал разбираться (глубоко нырять нужно).

    Кстати, нигде в доках не написано про параметр &get=**currency_rate**, с названием поля в таблице БД - currency_rate. Есть упоминания об этом и показаны примеры для Доставки и Оплаты. А вот за именем currency_rate пришлось лезть в БД и там его искать (А может я доки курил уже накуренный 🙂 ).

    Но я пошел другим путем. Хотя мне очень не хотелось править оригинальный файл, но все же решил, что для моей задачи такое решение приемлемо, а обновление SHK 3 не предвидеться в обозримом будущем.

    Итак, Создаю сниппет, например myCarentKurs, в котором высчитываю курс текущей валюты по отношению к базовой, и помещаю его в невидимый блок с **" :

    <?php
    $kurs=$tv_price_curr_rate/$tv_price ;
    echo '<div id="curent_kurs" style="display:none;">'.$kurs.'</div>';
    

    И в любом месте в шаблон карточки товара вставляю его вызов:

    [[!myCarentKurs? &tv_price=`[[!*price]]` &tv_price_curr_rate=`[[!*price:shk_curr_rate]]`]]
    

    В вызове сниппета использую модификатор shk_curr_rate, который корректно пересчитает базовую цену по курсу заданному в настройках Shopkeeper-a (Приложения – Управление заказами - Настройки). Соответственно прописываю выводимому блоку свойство style="display:none;", посетителю не нужно видеть этот блок.
    И теперь в js нужно отловить значение курса в этом блоке, ловлю id со значением curent_kurs.
    Для этого оригинальную строку 772:

    $( '.shk-price:first', parent ).after('<sup id="add_'+productId+'" class="price-add">' + ( additPriceSum > 0 ? '+' : '' ) + additPriceSum + '</sup>');
    

    Заменяю на следующий код:

    /*мои дополнения 1*/
    // Ловлю тег с id="curent_kurs", сформированный сниппетом myCarentKurs. Пример: <div id="curent_kurs" style="display:none;">27,5</div> 
    var curent_kurs = document.getElementById('curent_kurs').textContent; //Получаю значение тега - 27,5
    curent_kurs = curent_kurs.replace(/,/, '.'); //Заменяю запятую на точку, чтобы использовать значение как число
    var additPriceSum_curr_rate = Math.round(additPriceSum * curent_kurs); //Пересчитываю по курсу и округляю до ближайшего целого без копеек. 
    $( '.shk-price:first', parent ).after('<sup id="add_'+productId+'" class="price-add">' + ( additPriceSum_curr_rate > 0 ? '+' : '' ) + additPriceSum_curr_rate + '</sup>');
    /*end мои дополнения 1*/
    

    Внимание! Значение цен в tv-параметре params, должно быть цифрой, т.е. копейки, если они есть, должны быть указаны через точку! 50,25 – не правильно, нужно 50.25

    P.S. Для себя я сделал округление цен доп. параметров до целых, т.е. без копеек.

    С удовольствием почитаю ваши комментарии, а может быть, кроме критики, увидим и реальные предложения или даже улучшения. Они очень нужны, т.к. Андрей вряд ли вернется к этой теме.

    написал в Недокументированные решения отдельных задач Читать далее
  • Asderkdw

    Участник @Andchir написал в Shopkeeper 3.2.6:

    Ага, много вас таких было. Почему-то ни одному человеку из числа воспользовавшихся предложением
    http://forum.modx-shopkeeper.ru/topic/15/рекомендации-по-оформлению-темы-с-вопросом/2

    Уважаемый, Андрей, я появляюсь тут у вас очень редко и даже не видел этой темы. Это очень хорошее начинание с вашей стороны и цена нормальная, особенно если кто-то делает сайты на заказ. Можно сказать это Скорая помощь 🙂 для тяжело больных. (Ссылку сохранил).
    Вы уж простите меня пожалуйста. Вы все правильно написали, а у меня был плохой день, бури магнитные, вот и ляпнул с дуру.
    Если и бывают баги, то я понимаю, что это нормальное явление. Начинаю разбираться и в 95% случаях нахожу освою ошибку или жду следующую версию с пофиксенными ошибками. А читая ваш код всегда прихожу к восхищению. Спасибо!

    написал в Новости Читать далее
  • Asderkdw

    Участник @pooding написал в Shopkeeper 3.2.6rc1:

    @slaad в районе 15 проектов...в WEB-разработке не более полутора лет

    Ну а я с шопкипером упражняюсь (время от времени) еще с EVO... "много багов утекло" с тех пор. Андрей (автор) конечно по мере сил их фиксит и создает новые версии адаптированные под новые версии modx-са, за что ему всеобщая благодарность и уважуха, но как уже устал от того, что с выходом новой версии обязательно приходится поплясать. Да ладно, просто вчера были бури магнитные 🙂
    Огромноваем Вам спасибо Андрей, за ваш талант программера и за то, что не бросаете нас!

    написал в Новости Читать далее
  • Asderkdw

    Причину глюка обновления корзины аякс-ом после редактирования кол-ва товаров так и не нашел в своей сборке. Зная, что в тесте работало нормально плюс Ваши замечания, собрал все по новой (причем делаю все точно так же, ну почти так же) - теперь работает нормально, ну покрайней мере на том же рубеже. Тестирую дальше.

    написал в Новости Читать далее
  • Asderkdw

    @pooding Друзья, не ругайтесь сильно плз. Ну написал с горяча, рад бы удалить, да нельзя. Сам уже вижу, что я где-то портаки напорол. На тестовой сборке все работает, а начал чистовую установку делать и вылез баг со скриптом обновления данных в корзине. Сейчас пляшу с бубном ищу конфликт. И пока не могу понять где, найду сообщу. И вы как программеры должны знать правило, которому учат еще на первом курсе вузов - В любой самой отлаженной программе есть хотя бы одна ошибка. Нашел, исправил, и знай - есть еще хотя бы одна ошибка!
    А минишопом я никогда не пользовался и желания нет. Мне не нравится его идеология.

    написал в Новости Читать далее
  • Asderkdw

    @anton83 Та он такой же глючный, как и все предыдущие версии. Решена проблема с param_edit - это хорошо. Но теперь глючит корзина.
    Я не видел еще ни одной версии шопкипера, которая работала бы нормально, всегда с бубном приходится плясать и выуживать тараканов.
    Если вам param_edit не важен, то юзайте версию 3.2.5

    написал в Новости Читать далее
  • Asderkdw

    Установка shk 2-3-5rc1 не дала ни каких результатов.

    написал в MODX - Вопросы и обсуждения Читать далее
  • Asderkdw

    Фильтр фильтрует по условию "И", хотелось бы иметь в настройках переключатель фильтрации на условие "ИЛИ".
    Поясню.
    По условию "И":
    Есть 3 производителя.
    Выбор первого - выводятся товары первого производителя.
    Выбор второго - выводятся товары первого и второго и т.д.

    Хочется "ИЛИ":
    Выбор первого - выводятся товары первого производителя.
    Выбор второго - выводятся товары только второго производителя. "Галка" с первого снимается автоматом и обновляются сопутствующие данные других параметров (кол-во, убираются не доступные параметры и т.п. все как принято в фильтрах ).
    Это аналог radio.

    Скажете не актуально? Да я в половине случаев от заказчиков получаю желание работы фильтра по ИЛИ. В свое время именно из-за этого и отказался от использования TagManager и написал свой фильтр. Кривоватый и тяжелый для сервера, но переубидить 3-х заказчиков не удалось.
    Может чего-то не понимаю в работе TagManager, простите.

    написал в Пожелания и предложения Читать далее
  • Asderkdw

    @Andchir, Благодарю. Я тоже интуитивно подумал об этом, завтра поэксперементирую и обязательно отпишусь. Но если вы специально не решали эту задачу в версии 3.2.5rc1, то проблемма вряд ли рассосется сама по себе.
    Андрей, не сочтите за труд, пожалуйста напомните... Год или два назад я читал, вроде на старом форуме или ..., не помню где, вы там указывали путь в папке manager, где прописывается или дописывается этот ваш класс, и даже, если не путаю, давали по этому поводу разъяснения и рекомендации.
    Ваш класс, обеспечивающий работу param-edit был очень удобен, я его использовал во многих задачах, и SHK ставил даже туда, где не было магазина, только ради самого этого класса.
    Плз. направьте по нужному адресу. Не уверен, что разберусь, но решить вопрос очень хочется.
    Я понимаю, что у вас полно работы и вам вероятно совсем не до этого param-edit.
    Если это принципиально (обратить на этот момент ваше пристальное внимание), то я готов профинансировать именно этот вопрос, не знаю сколько это может стоить, но надеюсь смогу потянуть.
    Спасибо.

    написал в MODX - Вопросы и обсуждения Читать далее