Андрей

Андрей

С нами с 09 апреля 2015; Место в рейтинге пользователей: #70
Ryan Murphy
02 мая 2016, 14:06
1
+1
Так как ответа на вопрос не было, я отправлю своё решение, возможно, кому-то понадобится. Работает хорошо. Как и написал Василий, можно просто сделать выборку через class:

<div class="container" id="pdopage">
  <div class="rows">
    {$_modx->runSnippet('!pdoPage',[
      'select' => ['galItem' => '*'] | toJSON,
      'ajaxMode' => 'default',
      'tpl' => 'gallery.row',
      'class' => 'galItem',
      'sortby' => 'id'
    ])}
  </div>
  {$_modx->getPlaceholder('page.nav')}
</div>
Дмитрий Танцирев
08 апреля 2016, 21:56
11
0
Может кому пригодится:

{"field":"published", "caption":"Чекбокс", "inputTVtype":"checkbox", "inputOptionValues":"Да==1"}

{"header": "Чекбокс", "dataIndex":"published", "show_in_grid":1, "renderer":"this.renderCrossTick"}
Константин
04 марта 2016, 15:30
7
+1
Недавно делал на сайте вот так:

Вызов сниппета через AjaxForm
[[!AjaxForm?
	&snippet=`QuickOrder`
	&form=`order.form`
]]

И вот сам сниппет QuickOrder
<?php
$errors = array();

if ( empty( trim( $_POST['total'] ) ) OR !is_numeric( trim( $_POST['total'] ) ) ) {
    $errors['total'] = 'Вы не заполнили кол-во человек';
}

if ( empty( trim( $_POST['phone'] ) ) ) {
    $errors['phone'] = 'Вы не заполнили телефон';
}

if ( !empty( $errors ) ) {
    return $AjaxForm->error( 'В форме содержатся ошибки!', $errors );
} else {
    $miniShop2 = $modx->getService( 'minishop2','miniShop2', MODX_CORE_PATH . 'components/minishop2/model/minishop2/', $scriptProperties );

    if ( !( $miniShop2 instanceof miniShop2 ) ) {
        return $AjaxForm->error( 'Ошибка скрипта!' );
    }
    
    $miniShop2->initialize($modx->context->key, $scriptProperties);
    
    $miniShop2->order->add( 'receiver', trim( $_POST['receiver'] )  );
    $miniShop2->order->add( 'email', trim( $_POST['email'] ) );
    $miniShop2->order->add( 'delivery', 1 ); // id метода доставки
    $miniShop2->order->add( 'payment', 1 ); // id метода оплаты
    
    $miniShop2->cart->add($_POST['id'], $modx->getOption('count', $_POST, 1), $modx->getOption('options', $_POST, array()));
    
    return $AjaxForm->success( 'Форма успешно отправлена. Сейчас вы перейдете на страницу оплаты.' );
}

JS Callback для отправки формы:
$( document ).on('af_complete', function( event, response ) {
    if( response.success ) {
        response.form[0].submit();
    }
})
Евгений Шеронов
17 февраля 2016, 19:02
2
+3
Всё есть в документации к AjaxForm:
Немножко подправив, можно сделать что-угодно.
$(document).on('af_complete', function(event, response) {
	if (response.success) {
    		var form = response.form;
   		if (form.attr('id') == 'callback') {yaCounter25745255.reachGoal('callback');}
		if (form.attr('id') == 'buy') {yaCounter25745255.reachGoal('buy');}
		if (form.attr('id') == 'commerce') {yaCounter25745255.reachGoal('commerce');}
        }
});

Не проверял, но должно работать)
Павел Романов
10 февраля 2016, 15:34
1
0
Плагин по-любому нужен, иначе как Вы сообщите MODX из какого контекста выдавать сайт?
Хотя бы такой (вешается на событие OnHandleRequest):

<?php
if ($modx->context->get('key') == 'mgr') {
return;
}

switch ($modx->getOption('http_host'))
{
case 'домен1.ru':
$modx->switchContext('ключ_контекста_1');
break;
case 'домен2.ru':
$modx->switchContext('ключ_контекста_2');
break;
}
Павел Гвоздь
27 января 2016, 10:30
5
0
1) Создаёшь файл core/components/minishop2/custom/order/myorderhandler.class.php с содержимым:
<?php
class myOrderHandler extends msOrderHandler
{
	public function submit($data = array())
	{
		$min_price_order = $this->modx->getOption('ms2_minimum_price_order');
		$cart_status = $this->ms2->cart->status();
		$currency = $this->modx->lexicon('ms2_frontend_currency');
		if( $cart_status['total_cost'] < $min_price_order )
		{
			return $this->error( 'ms2_order_err_total_price', array(), array('price'=>$min_price_order, 'currency'=>$currency) );
		}
		return parent::submit($data);
	}
}

2) Создаёшь настройку (желательно в namespace «minishop2») ms2_minimum_price_order со значением суммы заказа, например: 50000.

3) В настройке ms2_order_handler_class указываешь только что созданный класс обработчик, вот так: myOrderHandler.

Вроде всё…
Василий Наумкин
21 января 2016, 09:09
3
0
На старой версии у меня работает, а в новой, похоже, что-то поменялось. Бронебойный вариант:
$("#cleanmincart").click(function(){
	$.post(document.location, {ms2_action: 'cart/clean'});
});
Наумов Алексей
12 января 2016, 16:03
2
+3
Ну… пишем плагин на OnDocFormSave.

В нем мы делаем проверку на:
1. Что мы сохраняем новый документ
if ($mode == 'new') {
  ...
}
2. Что наш документ — это Дом, например по шаблону проверяем
if($resource->get('template') == XXX)
И создаем дочерние ресурсы, используя $resource->get('id') (да-да, id нового документа у нас уже есть) в качестве parent.
$data = array(
   'parent' => $resource->get('id'),
   'published' => 1,
   'pagetitle' => 'Название',
    'content' => 'Текст страницы'
);
$modx->runProcessor('resource/create', $data);
Борис И
03 января 2016, 18:16
2
+1
Пример вывода ссылки на странице
[[!+modx.user.id:memberof=`Administrator`:then=`<a href="/dobavit-tickets.html?tid=[[*id]]">Ред-с-фронта</a>`]]
1. проверяем что мы админ
2. если админ, вывести ссылку на /dobavit-tickets.html?tid=[[*id]], это страница добавления тикета с фронта сайта, [[*id]] — соответственно того тикета который хотим редактировать.
Чанк для редактирования tpl.Tickets.form.update
Как-то так, если нигде не ошибся.