Артём

Артём

С нами с 29 октября 2018; Место в рейтинге пользователей: #553

Массив в системной переменной

Добрый день.
Нигде не могу найти информации, можно ли в системных настройках MODX создать параметр, содержащий массив, чтобы этот массив можно было потом получить в сниппете или плагине с помощью $modx->getOption()? И как эта запись должна выглядеть?
Артём
22 ноября 2018, 14:02
modx.pro
432
0

MiniShop2. Вывод во фронтенд цен товаров из корзины без скидки.

Добрый день.
Изучаю написание плагинов на примерах. Поставил себе задачу реализовать простейшую систему скидок от общей суммы заказа. Код плагина такой:
<?php
switch ($modx->event->name) {
    case 'msOnChangeInCart':
    case 'msOnRemoveFromCart':
    case 'msOnAddToCart':
        $discount = 0;
        $status = $cart->status();
        $tmp = $cart->get();
        //Cтавим изначальную цену без скидок
        foreach($tmp as $_key=>$cartItem) {
            if ($product = $modx->getObject('msProduct', $cartItem['id'])) {
                $tmp[$_key]['clear_price'] = $product->get('price');
                $tmp[$_key]['price'] = $product->get('price');
            }
        }
        if($status['total_cost']>=6000) $discount = 5;
        elseif($status['total_cost']>=3000) $discount = 3;
        //Если есть скидка, пересчитываем цены на товары в $tmp
        if($discount>0) {
            foreach ($tmp as $_key=>$cartItem) {
                if ($product = $modx->getObject('msProduct', $cartItem['id'])) {;
                    $tmp[$_key]['price'] = $product->get('price')*((100-$discount)/100);
                }
            }
        }
        //Записываем данные в корзину
        $cart->set($tmp);
        //$modx->log(xPDO::LOG_LEVEL_ERROR, print_r($cart->get(), true));
        break; 
}
В коде к товарам корзины я добавил дополнительное поле clear_price, в котором хранится цена товара без скидок. Как можно вывести его в чанк корзины msCart?

UPD В чанке корзины есть примерно такой код:
{foreach $products as $product}   
    ...{$product.clear_price}...
    ...{$product.price}...
{/foreach}

Я хочу передать в чанк некие данные, расчитанные в плагине. {$product.price} передаёт высчитанную цену как и положено. {$product.clear_price} не отображается. Как мне это сделать?

UPD2 Обнаружился странный глюк(?). Если я использую для передачи цены без скидки поле old_price товара корзины, то в чанке fenom передаёт её корректно в код {$product.old_price}, но… в зависимости от суммы заказа! Т.е. если сумма заказа более определённой цифры, передаётся вычисленная мной цена, если меньше, передаётся значение, которое хранится в поле old_price данного товара в каталоге. Сейчас код плагина у меня такой:
<?php
switch ($modx->event->name) {
    case 'msOnAddToCart':
    case 'msOnChangeInCart':
    case 'msOnRemoveFromCart':
        $discount = 0;
        $status = $cart->status();
        $tmp = $cart->get();
        foreach ($tmp as $_key=>$cartItem) {
            if($product = $modx->getObject('msProduct', $cartItem['id'])) {
                $tmp[$_key]['old_price'] = $product->get('price'); // #3
                if($status['total_cost']>=6000) $discount = 5; // #1
                elseif($status['total_cost']>=3000) $discount = 3;// #2
                $tmp[$_key]['price'] = $product->get('price')*((100-$discount)/100);
            }
        }
        //Записываем данные в корзину
        $cart->set($tmp);
        $modx->log(xPDO::LOG_LEVEL_ERROR, print_r($cart->get(), true));
        break; 
}
Методом тыка пришёл к выводу, что строки #1 и #2 каким-то образом влияют на значение в {$product.old_price} в чанке. Причём проверка через $modx->log(xPDO::LOG_LEVEL_ERROR, print_r($cart->get(), true)); показывает, что значение old_price в строке #3 устанавливается, но почему-то не передаётся в чанк.
Артём
20 ноября 2018, 15:23
modx.pro
644
0

Обязательные для заполнения поля в сниппете msOrder

Добрый день.
Я хочу изменить обязательные для заполнения поля в сниппете msOrder плагина MiniShop2. В частности хочу убрать поле email при оформлении заказа. В настройках этого нигде не нахожу. Это в принципе возможно сделать?
Артём
16 ноября 2018, 12:12
modx.pro
759
+1

Не работает сниппет getComments плагина Tickets

Добрый день.
Столкнулся с проблемой следующего характера, в одном шаблоне вызываются одновременно сниппеты TicketComments и getComments.
Комментарии к статье:
[[!TicketComments?
    &tplCommentAuth=`commentAuth_ticketsTpl`
    &tplCommentGuest=`commentGuest_ticketsTpl`
    &tplCommentForm=`commentForm_ticketsTpl`
    &tplComments=`commentsWrapper_ticketsTpl`        							                        
    &tplLoginToComment=`commentLoginToComment_ticketsTpl`
    &gravatarSize=`70`
]]
А в боковой панели я хочу вывести, к примеру, 10 последних комментариев ко всем статьям:
Артём
11 ноября 2018, 22:40
modx.pro
1
747
0

Невозможно удалить комментарий в Quip

Добрый день.
Столкнулся с проблемой, над которой ломаю голову уже битый час. Есть система комментирования записей в блоге. Всё в принципе работает, кроме возможности удалить зарегистрированному пользователю его же комментарий. Вот сцыль на мою тестовую площадку. Что самое интересное, под регистрационной записью суперадмина я могу удалить любую запись. Под записью простого зарегистрированного пользователя — нет. Т.е. я понимаю, что нужно копать в сторону настройки прав доступа, но видно тямы не хватает, а информации в нете не нашёл. Не знаю, есть смысл приводить код? Ткните носом, пожалуйста.
ПыСы Всё-таки кину код вызова самого Quip'а:
[[!Quip@custom?
 &thread=`thread_[[*id]]`
&replyResourceId=`[[*id]]`
&removeThreshold=`10000`
&allowRemove=`1`
&requireAuth=`1`
&tplComment=`tplComment`
&tplComments=`tplComments`
]]
Артём
05 ноября 2018, 17:07
modx.pro
574
0

Вложенные обратные кавычки в Inline-чанках

Добрый вечер.
Может не совсем внятно озаглавил. Как можно заэкранировать обратные кавычки внутри параметра сниппета? Например, есть код:
[[!getImageList?
       &tvname=`siteNews`
       &tpl=`@CODE: <li>
        	    <p>[[+text]]</p>
        	    <div class="latest-posts-meta-container clearfix">
        		    <div class="pull-right">
        			     [[+date:strtotime:date=`%d.%m.%Y`]]  //Вот тут кавычки нужно как-то заэкранировать
        		    </div>
        	    </div>
                 </li>`
]]
Писать отдельный чанк на пару-тройку строк не хочется. Как ни странно, что-то поисковики ничем не помогли, хотя ситуация мне кажется достаточно распространённой.
Заранее спасибо за идеи.
Артём
31 октября 2018, 21:53
modx.pro
832
0

Получение индекса элемента в массиве результатов сниппета msProducts

Добрый день, уважаемое сообщество.
Влюбился я тут на днях в modx, почти всё получается, но столкнулся с одним затыком.
Есть код:
<ul class="featured-list clearfix">
	[[!msProducts?
		&parent=`[[*id]]`
		&where=`{"Data.favorite":1}`
		&tpl=`featuredProducts_msTpl`
	]]
</ul>
Чанк featuredProducts_msTpl:
<li>
	<div class="featured-product clearfix">
		<figure>
		    {if $image?}
			    <img src="{$image}" alt="{$pagetitle}">
			{else}
			    <img src="{$_modx->config.blank_item_image}">
			{/if}
		</figure>
		<h5><a href="#">{$pagetitle}</a></h5>
		<div class="ratings-container">
			<div class="ratings">
				<div class="ratings-result" data-result="{$itemPopularity}"></div>
			</div>
		</div>
		<div class="featured-price">{$price}</div>
	</div>
</li>
Мне нужно в
<li>...</li>
выводить по 3 товара из всей выборки. Первое, что приходит в голову — получать индекс каждого товара в выборке, проверять на остаток деления на 3 и fenom'ом ставить теги
<li>
и
</li>
Что-то вроде такого:
{if $index%3==0?}
    <li>
{/if}
Так вот, не могу найти в документации, как можно получить индекс выводимого товара из массива всей выборки? Ткните носом, пожалуйста, где копать. Заранее спасибо.
Артём
29 октября 2018, 12:59
modx.pro
715
0