Игорь Терентьев

Игорь Терентьев

С нами с 29 ноября 2013; Место в рейтинге пользователей: #83
Виктор
Виктор
22 сентября 2016, 22:07
1
+2
Слать уведомления на email? Если да, то можно плагином, на событие ondocformsave

<?php
if ($resource->get('parent') == 300) {
    
$message = $modx->getChunk('mail-tpl');
 
$modx->getService('mail', 'mail.modPHPMailer');
$modx->mail->set(modMail::MAIL_BODY,$message);
$modx->mail->set(modMail::MAIL_FROM,'mail@domen.ru');
$modx->mail->set(modMail::MAIL_FROM_NAME,'От кого');
$modx->mail->set(modMail::MAIL_SUBJECT,'Тема');
$modx->mail->address('to','urmail@domen.ru');
$modx->mail->address('reply-to','urmail@domen.ru');
$modx->mail->setHTML(true);
if (!$modx->mail->send()) {
    $modx->log(modX::LOG_LEVEL_ERROR,'Произошла ошибка при отправке сообщения: '.$modx->mail->mailer->ErrorInfo);
}
$modx->mail->reset();

}
Сергей Шлоков
22 сентября 2016, 19:03
1
0
Во-первый, лучше использовать событие «OnDocFormSave», так как может возникнуть ситуация, когда тикет не сохранится (по ошибке или кто отменит в плагине). А уведомление о тикете отправится в любом случае.
Во-вторых, есть смысл использовать настройки и чанки Tickets.
if ($modx->event->name == 'OnDocFormSave' && $resource->class_key = 'Ticket') {
    $Tickets = $modx->getService('tickets', 'Tickets', $modx->getOption('tickets.core_path', null, $modx->getOption('core_path') . 'components/tickets/') . 'model/tickets/', $scriptProperties);
    $ticket = $resource->toArray();
    $Tickets->sendTicketMails($ticket);
}
П.С. Не тестировал.
Виктор
21 сентября 2016, 23:09
1
0
[[!pdoResources? 
    &class=`msVendor`
.....
]]
<div class="catalog__vendors">
    <a href="[[+name]]">
        <img src="[[phpThumbOn? &input=`[[+logo]]` &options=`w=190&h=90&far=C`]]" class="img-responsive">
           [[+name]]
    </a>
</div>
Роман Садоян
20 сентября 2016, 15:35
1
0
if ($modx->event->name == 'msOnSubmitOrder'){
        if($cart = $order->ms2->cart->status()) {
            if($cart['total_cost'] < 1000) {
                $modx->event->output('Сумма вашего заказа должна превышать 1000 руб!');
            } 
        }
}
Источник
Андрей
15 сентября 2016, 09:59
2
+1
$response = $modx->runProcessor('resource/create', array(
  'class_key' => 'msProduct',
  'pagetitle' => 'Товар',
  'parent' => 55,
  'template' => 11,
  'show_in_tree' => 1,

  //Данные
  'price' => 100,
  'old_price' => 0,
  'favorite' => 0,
  'popular' => 0,

  //стандартные опции товара
  'color' => array('Синий', 'Красный'),
  'size' => array('S', 'M'),
  'tags' => array('Тег1', 'Тег2'),

  //свои опции созданные в настройках
  'options-КЛЮЧ_ОПЦИИ' => array('значение1', 'значение2'),

  //TV - 10 это id TV
  'tv10' => 'Значение'
));
Алексей
12 сентября 2016, 10:50
1
+2
'class' => 'msProduct',
'element' => 'msProducts',
'paginator' => 'pdoPage',
'includeThumbs' => '580x320',

У меня так, работает.
Марат Марабар
19 августа 2016, 13:31
1
+1
miniShop2.plugin.Level = {
	getFields: function(config) {
		return {
			level: {xtype: 'bla-bla-bla', description: '<b>[[+level]]</b><br />'+_('ms2_product_level_help')}
			
		}
	}
};

miniShop2.combo.Level = function (config) {
    config = config || {};
    Ext.applyIf(config, {
        store: new Ext.data.ArrayStore({
            id: 0
            ,fields: ['level','display']
            ,data: [
			['0', '0'], // первое значение пишется в базу, второе выводится на экран
			['1', '1']
		]
        }),
        mode: 'local',
        displayField: 'display',
        valueField: 'level',
	triggerAction: 'all',
        editable: false,
        selectOnFocus: false,
        preventRender: true,
        forceSelection: true,
        enableKeyEvents: true
    });
    miniShop2.combo.Level.superclass.constructor.call(this, config);
};
Ext.extend(miniShop2.combo.Level,MODx.combo.ComboBox);
Ext.reg('bla-bla-bla',miniShop2.combo.Level);
Вместо bla-bla-bla можешь указать свой xtype
Проверяй.
Александр
08 августа 2016, 11:29
1
0
Вижу) спасибо огромное!
Если кому нужно, выкладываю скрипты:

Файл getlist.php
<?php
	if ($_SERVER['HTTP_X_REQUESTED_WITH'] != 'XMLHttpRequest' || empty($_POST['action'])) {
		return;
	}

	define('MODX_API_MODE', true);

	require dirname(dirname(dirname(__FILE__))) . '/index.php';
	
	$modx->getService('error','error.modError');
	$modx->setLogLevel(modX::LOG_LEVEL_ERROR);
	$modx->setLogTarget('FILE');
	
	
	if ($_POST['action'] == "getList" && isset($_POST['parent'])) {
		//Получаем значение для второго селектора
		$snippetParams = array();
		$snippetParams['parents'] = intval($_POST['parent']);
		$snippetParams['tpl'] = 'option.item';
		//Дописать параметры для сниппета получающего результаты по вкусу			

		$snippetResult = $modx->runSnippet('pdoResources', $snippetParams);

		$result = array($snippetResult, 'success');
	}
	else {
		$result = array('Некорректный запрос', 'error');
	}
	
	if (!empty($result)) {
		die(json_encode($result));
	}

javascript:
<script type="text/javascript">
    	$(document).on('change', 'select[name="selector-1"]', function(e) {
    		if ($(this).val() != '') {
        			$.ajax({
        				type: "POST",
        				url: "assets/ajax/getlist.php",
        				data: {
        				    action: 'getList', 
        				    parent: $("select[name='selector-1']").val()
           		         },

        			success: function(response) {
        				var data = eval(response);
        
        				switch (data[1]) {
        					case 'success':
    						//Если все ок - вставляем результат во второй селектор
    						$("select[name='selector-2']").val("").html("<option value='' selected disabled>Выберите значение из списка</option>" + data[0])
    
        						break;
        							
        					case 'error':
    						//Если не ок - выводим ошибку (используется jGrowl)
        						$.jGrowl(data[0], {theme: 'error', position: 'center'});
        							
        						break;
        						
        					}
        				}
        			});
    		}
    	});
    </script>

Ну и html понятно:
<select name="selector-1">
    <option selected disabled>Выберите услугу</option>
    [[!pdoMenu?
    	&level=`1`
    	&parents=`2`
    	&tplOuter=`@INLINE [[+wrapper]]`
    	&tpl=`@INLINE <option value="[[+id]]">[[+menutitle]]</option>`
    ]]
</select>
<select name="selector-2">
    <option value="" selected disabled>Выберите врача</option>
</select>
vmpr_7
07 августа 2016, 13:12
1
+1
На своем проекте я делал так:
&where=`{"active:=":"1","category:find":"New"}`
т.е. у меня есть категория, в которой несколько значений (тоже чекбоксы) и он выбирает только те, которые отмечены «New».
При этом я использовал pdoPage, т.к. нужна была ajax подгрузка элементов из MIGX.
[[!pdoPage?
	&element=`getImageList`
	...
	...
	&where=`{"active:=":"1","category:find":"New"}`
Думаю, Вы и со своей выборкой справитесь.
Володя
05 августа 2016, 22:35
21
+5
можно добавить так
создать плагин на pdoToolsOnFenomInit, в нем добавить модификатор detector
<?php
switch ($modx->event->name) {
    case 'pdoToolsOnFenomInit':
    if (!$fenom = $modx->getOption('fenom', $scriptProperties)) {
        return;
    }
    if (!$MobileDetect = $modx->getService('mobiledetect', 'MobileDetect', MODX_CORE_PATH . 'components/mobiledetect/')) {
	    return;
    }
    
    $key = $MobileDetect->config['force_browser_variable'];
    $device = !empty($_GET) && array_key_exists($key, $_GET)
		? $modx->stripTags($_GET[$key])
		: '';
	if (empty($device)) {
	    $device = $MobileDetect->getSettings();
    }
    if (empty($device)) {
        $detector = $MobileDetect->getDetector();
        $device = ($detector->isMobile() ? ($detector->isTablet() ? 'tablet' : 'mobile') : 'standard');
        $MobileDetect->saveSettings($device);
    }

    $fenom->addModifier("detector", function ($value) use ($device) {
        return $value == $device;
    });

    break;
}

и теперь в любом месте можно делать так
{if 'mobile'|detector}
mobile
{/if}

{if 'tablet'|detector}
tablet
{/if}

{if 'standard'|detector}
standard
{/if}