Александр Туниеков

Александр Туниеков

Был в сети 8 часов назад
Заказы принимаю
Заработало. Я пытался править modx.class.php из админки. Как подсказал Володя его надо было залить по ftp.
И в плагине правки:
<?php
switch ($modx->event->name) {

	case 'msOnGetProductPrice':
		if ($modx->context->key == 'mgr') {return;}
		// Плагин принимает:
		// $product - объект msProductData
		// $data - массив со свойствами товара, может отсутствовать
		// $price - текущая цена товара

		// Подключаем массив значений по ссылке - так удобнее
		$values = & $modx->Event->returnedValues;
        $values2 = & $modx->event->returnedValues;
...
		
		$price = $price*$course;
		$values['price'] = round($price, 0);
		$values2['price'] = $values['price'];
...
		break;
}
фикс можно вот такой сделать github.com/modxcms/revolution/pull/13116
Не работает
// Подключаем массив значений по ссылке - так удобнее
		$values = $modx->event->returnedValues;

		// Цена может меняться несколькими плагинами сразу, поэтому проверяем:
		if (isset($values['price'])) {
			$price = $values['price'];
		}
		$modx->log(MODX::LOG_LEVEL_ERROR,'Плагин price_currency '.print_r($values,true));
print_r($values,true) все равно пустое :(
Спасибо посмотрю. еще один вопрос можно?
Есть плагин который в корзине меняет цену в зависимости от кол-ва. (блин плагин выше валюту переводит. поторопился когда писал.)
<?php
switch ($modx->event->name) {
	case 'msOnAddToCart': case 'msOnChangeInCart': case 'msOnRemoveFromCart':

		$cartArray = $cart->get();
		$cartStatus = $cart->status();
		$totalCount = $cartStatus['total_count'];
        //получаем курс валюты
....
        		$price = $product->get('price')*$course;
        		$old_price = round($product->get('old_price')*$course, 0);
        		//получаем скидку товара
....
		$cart->set($cartArray);
		break;

}
Как в этой строке
$price = $product->get('price')*$course;
можно получить цену модифицированную msOptionsPrice2?
Помогите плиз. На событие msOnGetProductPrice стоит 2 плагина. Первым отрабатывает плагин msoptionsprice вторым вызывается плагин для изменения цены от кол-ва товаров.
switch ($modx->event->name) {

	case 'msOnGetProductPrice':
		if ($modx->context->key == 'mgr') {return;}
		// Плагин принимает:
		// $product - объект msProductData
		// $data - массив со свойствами товара, может отсутствовать
		// $price - текущая цена товара

		// Подключаем массив значений по ссылке - так удобнее
		$values = &$modx->event->returnedValues;

		// Цена может меняться несколькими плагинами сразу, поэтому проверяем:
		if (isset($values['price'])) {
			$price = $values['price'];
		}
		$modx->log(MODX::LOG_LEVEL_ERROR,'Плагин price_currency '.print_r($values,true));
$values
приходит пустое. То есть изменение цены от первого плагины не приходит.
Почему это происходит и как вылечить?
Написал специально тестовый сниппет и все заработало. Разобрался в чем косяк :). Я в форме вызывал плейсхолдер с модификатором раньше, чем сниппет который выставляет плейсхолдер.
[[$search_form]]
[[!+topic_bar_cat]]
[[!+topic_bar_cat:is=`1`:then=`true`:else=`false`]]
[[!pdoPage?
	&element=`mSearch2`
	&limit=`10`
	&where=`[[!get_search_where?]]`
	&includeTVs=`topic_bar_cat,topic_price,topic_torg,topic_sity`
	&tpl=`My.tpl.mSearch2.row`
]]

<div class="pagination">
	[[!+page.nav]]
</div>
Плейсхолдер выставляет
[[!get_search_where?]]
.

Наверно парсер MODX обрабатывает плейсхолдер с модификатором раньше, чем выставляется сам плейсхолдер.