Сегодня наконец решила начать наполнять магазин (на нем валялось тестовых 5 товаров) и та-та, внутри дочернего элемента (нового товара) валюты родителей перестали отображаться. В старых карточках товара проблем не было.
Плюнула. Снесла к чертям всю сложность migxовых валют. Оставила 2 поля числовых — родителю curs-valut (категории товаров), в который писать курс и товару price (в которое писать цену).
Набросала сниппеточку
$thisprice = $input;
$parent = $modx->resource->get('parent');
$valuta = $modx->resource->getTVValue('curs-valut');
return $valuta;
Вызываю ее [[*price:mysnippet]]
И о чудо… Ничего не происходит. Начинаю копаться и замечаю, что $valuta отдает пустое значение, хоть оно и заполнено у родителя. При этом, если в настройках тв задать хоть какое значение по умолчанию — оно нормально «съедается» и умножает на прописанное в TV дефолтное значение, а не на прописанное в поле у ресурса-категории.
Ребята, ну почему у меня столько чудес в MODX? Кто знает, что я снова делаю не так???
Вараника 25.11.2015 17:39 #
1. Можно ли в быстрое создание/редактирование ресурса внедрить свою TV?
2. Где в полях migx ставится галочка, чтобы редактировать (добавлять) и в модальном окне, и напрямую править в ресурсе значение?
Павел Романов 25.11.2015 17:58 #
2. В MIGX ставится, когда настраиваете колонки. Там есть выбор редактора.
Вараника 25.11.2015 19:05 #
Павел Романов 25.11.2015 19:15 #
Вараника 25.11.2015 20:27 #
Вот на эту строчку ругается $resource = $modx->getObject('modResource', $parent);
Вараника 25.11.2015 19:10 #
Вот так в итоге :)
Вараника 26.11.2015 08:57 #
Так без ошибок и считает…
Вараника 26.11.2015 09:16 #
test.mirdverei.by/dveri-shponirovannye/vitebsk-drevprom/serija-b.html и http://test.mirdverei.by/katalog/dveri-shponirovannye/vitebsk-drevprom/serija-b/kopiya-model-b2.html — внутренняя страница, где местами считает, местами нет.
Предполагаю, что вызываю значение родителя не поля, а документа… Но как вызвать именно родителя от поля?
Павел Романов 26.11.2015 11:11 #
Возвращает ID родителя текущего ресурса. То есть главной страницы или категории. Естественно, ошибка.
Передавайте родителя параметром:
Ну и вызывайте:
Павел Романов 26.11.2015 12:24 #
Поменял Вам сниппет:
Переписал в чанках recomendor2 и tpl.mSearch2.row2 выводы цены.
Дальше уж сами ))
Вараника 26.11.2015 13:19 #
Вараника 26.11.2015 16:49 #
Павел Романов 26.11.2015 19:15 #
Вараника 26.11.2015 21:07 #
Вараника 28.11.2015 09:20 #
Пока не выходит :)
Павел Романов 28.11.2015 10:42 #
Но с таким подходом у Вас ерунда получится.
Допустим, в поле price-v-valute у товара стоит «10», а курс «100».
При открытии редактора товара, скрипт возьмет 10, умножит его на 100 и выведет в поле «1000». Вы сохраняете товар, все ок.
Но когда Вы в следующий раз откроете редактор товара, то скрипт возьмет уже «1000», поскольку оно же теперь прописано в price-v-valute и снова умножит на 100. Теперь в поле будет уже 100 000 и так далее.
Вараника 28.11.2015 11:19 #
Павел Романов 28.11.2015 13:50 #
В общем, делаете TV prise-rub. Просто текст, безо всяких EVAL и значений по умолчанию.
Делаете плагин типа:
Вешаете его на событие OnDocFormRender.
Теперь при открытии редактора в поле prise-rub должна появляться цена по курсу. Ну а ее уже используйте при фильтрации.
Вараника 28.11.2015 18:46 #
Вараника 28.11.2015 18:57 #
Fatal error: Call to a member function get() on a non-object in /home/mirdvere/test.mirdverei.by/core/cache/includes/elements/modplugin/28.include.cache.php on line 3
походу не кушает часть с $parent = $modx->resource->get('parent');
Не первый раз замечаю в этом месте ошибки за последние дни))
Павел Романов 28.11.2015 22:54 #
У родителя:
У товара:
Но вообще-то непонятно, зачем курс указывать у родителя.
Он же одинаков? Не проще ли его вывести где-нибудь один раз?
И еще. Вам же для того, чтобы обновить цены придется каждый товар открывать. Может, вместо плагина сниппет сделать и по Cron запускать?
Вараника 28.11.2015 23:55 #
А Cron — это куда выше моего сознания))) Я уже вконец вся запуталась))) мне нужно иметь возможность обращаться к списку редактируемых курсов и у каждого товара их выбирать. Я решила, что проще присвоить их категории, так как в ней обычно 1 поставщик… уф… Крыша едет, да еще переодически что-то ломается и глючит((( я невезучий программист))) Я Вам скину доступ к старому сайту, если хотите глянуть на список валют, а когда там обновляются цены, то к ним говорится и курс, мы его выбираем…
Вараника 28.11.2015 23:59 #
Павел Романов 29.11.2015 00:18 #
Просто делаете сниппет типа такого (набросал по быстрому, не тестил, но идея понятна)):
Устанавливаете CronManager и настраиваете на запуск этого сниппета раз в сутки, или как там часто курсы меняются.
Вараника 29.11.2015 00:20 #
Павел Романов 29.11.2015 01:18 #
Только бэкап сначала сделайте ))
Вараника 29.11.2015 10:05 #
Дополнила Ваш плагин проверкой
$price_rub = $price_val * $curs;
if ($price_rub == $price_val) {$res->setTVValue('price-rub', $price_val);}
else {$res->setTVValue('price-rub', $price_rub);}
Теперь не страшно случайно переоткрыть файл))))
Была мысль сделать отдельный файл с курсами и запускать плагин по событию только этого документа, но тоже самое будет. Блин, вот все было круто, если бы msearch кушал цену в валюте, умножая ее на лету :)
Вараника 28.11.2015 21:05 #
i056.radikal.ru/1511/8b/f11b5edc4dc2.jpg
Павел Романов 28.11.2015 23:00 #
Из кеша вообще вся страница генерится за 0,3 сек:
Вараника 28.11.2015 23:57 #
Вараника 29.11.2015 10:57 #
Пока спасаюсь копированием, но оно тоже не цепляет цвета родительской категории… так же не пойдет дело :(
Вараника 28.11.2015 11:38 #
а так:
Само собой не работает, но суть)))
Вараника 28.11.2015 09:22 #
Хотя у меня и так сайт не шустро работает, поставила debug.