Захарий

Захарий

С нами с 02 февраля 2015; Место в рейтинге пользователей: #326
Василий Наумкин
07 ноября 2016, 09:27
2
+1
$modx->event->returnedValues
и будет пустым, пока туда кто-то что-то не запишет.

Держи рабочий пример из платного msDiscount
case 'msOnGetProductPrice':
		if ($modx->context->key == 'mgr') {return;}
		/**
		 * Counts discount of current product for current user, based on rules in msDiscount component
		 * New price must be set in $modx->event->returnedValues['price']
		 *
		 * @var msProductData $product Object with product properties
		 * @var array $data Array with product properties. Can be empty!
		 * @var float $price Current price of product
		 */
		if (!isset($modx->event->returnedValues['price'])) {
			$modx->event->returnedValues['price'] = $price;
		}
		// Get link to product price
		$price = & $modx->event->returnedValues['price'];
		$new_price = $msDiscount->getNewPrice($product->id, $price);
		if ($new_price !== false) {
			$price = $new_price;
		}
		break;
Обрати внимание, что в событии доступны 3 параметра: $product, $data и собственно $price
Василий Наумкин
14 сентября 2016, 08:24
2
+2
При обычном вызове в where передаётся массив, закодированный в JSON. При вызове через Fenom кодировать его нет нужды:
{$_modx->runSnippet('!pdoResources', [
    'parents' => 0,
    'includeTVs' => 'test',
    'where' => ["1 = 1 AND FIND_IN_SET("~$_modx->resource.id~", replace(test, '||', ','))"],
    'showLog' => 1
])}
Сергей Шлоков
03 сентября 2016, 10:44
1
0
Смотрите, Сергей, если задача — разрешить добавлять комментарий 1 раз в n дней, то решается она несколькими строчками.
Вариант 1. Через сниппет как у вас.
$sql = "SELECT 1 FROM modx_ec_messages C LEFT JOIN modx_ec_threads D ON C.thread=D.id
WHERE D.resource = {$modx->resource->id} AND C.date>DATE_SUB(NOW(),INTERVAL {$day} DAY) AND ip = ?" ;
$stmt = $modx->prepare($sql);
$stmt ->execute($_SERVER['REMOTE_ADDR']);
if ($stmt->rowCount() ) {
	// Запрещено
	return '';
}
// Выполняем указанные сниппет
return $modx->runSnippet($snippet, $scriptProperties);
Ну и вызывать так
// Вместо unlock указываем snippet и любые другие параметры указанного сниппета
[[!voting_ban? &snippet=`ecForm` &day=`7`]]
Вариант 2. Через плагин.
Если у этого компонента есть событие добавления комментария по аналогии с Tickets, то форма показывается, но при добавлении комментария плагин проверяет возможность добавления.

Вот как минимум 2 варианта.
П.С. Ещё было бы логично проверять почту. У пользователя ip может быть динамическим. А лучше разрешать оставлять отзыв только авторизованным пользователям. Тогда ещё проще.
mngatoff
15 августа 2016, 11:49
2
0
потому что Вы УЖЕ внутри синтаксиса fenom.
таким образом:
'@INLINE <a href="{$link}?vendor={$value}">{$title} <sup>{$num}</sup></a>'
здесь будет распарсен чанк с подстановкой плейсхолдеров этого чанка. А в нем этого самого link не предполагается.
('@INLINE <a href="'~ $link ~'">bla-bla</a>')
а здесь мы заранее формируем строку из внешней переменной и передаем ее в чанк уже готовую.
Сергей Шлоков
13 августа 2016, 21:54
1
+1
$modx->event->output("Сообщение об ошибке");
Fi1osof
07 января 2016, 11:57
20
+12
Если ключ не хотите светить, то однозначно запрос надо слать с вашего сервера на донора. В MODX есть готовый CURL-клиент. Вот код для примера:
$client = $modx->getService('rest.modRestCurlClient');
$result = $client->request('https://ya.ru', '/', 'POST', $params = array('foo'  => 'foo'));
print $result;
Можете с этим кодом к консоли поиграться.
Максим Кузнецов
30 июня 2015, 14:19
2
+1
Да, конечно:
&leftJoin=`{
		"Image": {
			"class": "msResourceFile",
			"on": "modResource.id = Image.resource_id AND Image.parent = 0"
		},
		"Thumb": {
			"class": "msResourceFile",
			"on": "Image.id = Thumb.parent AND Thumb.path LIKE '%120x90%'"
		}
	}`

Вот тут более подробная информация и заодно ответ на ваш первый вопрос.
Peter Zenin
03 декабря 2013, 20:37
1
0
Вот как я сделал (у меня 1700 бесплатная):

/core/components/minishop2/custom/delivery/msdeliveryhandlerpetja.class.php:
<?php
/**
 * User: Petja
 * Date: 02.11.13
 * Time: 3:53
 */

class msDeliveryHandlerPetja extends msDeliveryHandler{

    public function getCost(msOrderInterface $order, msDelivery $delivery, $cost = 0) {

        $add_price = 0;

        if($cost < 1700){
            $add_price = $delivery->get('price');
        }

        return $cost + $add_price;

    }

}
А в настройках магазина: варианты доставки, редактировать доставку, Класс-обработчик: msDeliveryHandlerPetja

И все вроде.