but1head

but1head

Был в сети 04 ноября 2021, 20:02
Заказы принимаю
PG
PG
Владимир
Владимир
Иван, подскажи пожалуйста, а вот этот сборщик пакетов MODX «A yeoman generator for MODX Revolution packages» не приходилось использовать?
После установки (npm install -g yo generator-modx-package) запускается yo modx-package из любой папки. Под windows 8.1 без проблем в т.ч.
Алексей Шумаев
Алексей Шумаев
Добавлю изображение, наглядно поясняющее, как можно было бы использовать наличие возможности сортировки по типу ресурса или, что ещё лучше — разбитие выдачи поиска по типу ресурса/шаблону/...:


Аналогично для полного поиска.
Василий Наумкин
Василий Наумкин
Прикольно, именно так уже какое-то время и фильтруются новости на главной modx.pro. Там есть 2 ТВ параметра: выводить на главной, или скрывать на главной.

При работе с ТВ запрос с фильтрацией по этим 2м ТВ выходил под 0.5 сек, сейчас — 0.06 сек. Мой плагин выглядит вот так:
<?php
switch ($modx->event->name) {
	
	case 'OnMODXInit':
		$modx->loadClass('modResource');
		$modx->map['modResource']['fields']['show_on_start'] =
		$modx->map['modResource']['fields']['hide_on_start'] = 
		$modx->map['modResource']['fields']['ticket_rating'] = 0;
		$modx->map['modResource']['fieldMeta']['show_on_start'] =
		$modx->map['modResource']['fieldMeta']['hide_on_start'] = array(
			'dbtype' => 'tinyint',
			'precision' => 1,
			'attributes' => 'unsigned',
			'phptype' => 'boolean',
			'null' => true,
			'default' => 0,
		);
		$modx->map['modResource']['fieldMeta']['ticket_rating'] = array(
			'dbtype' => 'int',
			'precision' => 10,
			'attributes' => '',
			'phptype' => 'int',
			'null' => true,
			'default' => 0,
		);
		break;
		
		case 'OnBeforeDocFormSave':
			$resource->set('show_on_start', !empty($resource->get('tv7')));
			$resource->set('hide_on_start', !empty($resource->get('tv8')));
			break;
		
		case 'OnTicketVote':
			if ($object->class == 'Ticket') {
				if ($ticket = $modx->getObject('Ticket', $object->id)) {
					$properties = $ticket->getProperties('tickets');
					$rating = !empty($properties['rating'])
						? $properties['rating']
						: 0;
					$ticket->set('ticket_rating', $rating + $object->value);
					$ticket->save();
				}
			}
			break;
}
Ка видите, там еще и сортировка по рейтингу тикетов есть — дарю! OnTicketVote был добавлен в последней версии Tickets.
Максим
Максим
Может быть кому-то пригодится простенький сниппет для вызова mFilter2, который дописывает в параметр filters имена назначенных для категории опций — эти опции выводятся в фильтре чекбоксами:
<?php
$catid = $modx->resource->id;
$q = $modx->newQuery('msCategoryOption');
$q->select(array(
    'msCategoryOption.category_id',
    'msCategoryOption.option_id',
    'mso.key'
    ));
$q->where(array(
    'msCategoryOption.category_id' => $catid
    )
    );
$q->leftJoin('msOption','mso','msCategoryOption.option_id = mso.id');
$q->prepare();
$q->stmt->execute();
$options = $q->stmt->fetchAll(PDO::FETCH_ASSOC);
$_options = array();
foreach ($options as $option) {
    $_options[] = 'msoption|'.$option['key'];
}
$_options = implode(',',$_options);
$scriptProperties['filters'] = implode(',',array($scriptProperties['filters'],$_options));
return $modx->runSnippet('mFilter2',$scriptProperties);
Stan Ezersky
Stan Ezersky
Студийные цены по провинциям:

Лендинг — от 24 тыс. руб. до 150 тыс. руб.
Сайт-корпоративный — от 36 тыс.у руб. до 350 тыс. руб.
Электронный магазин (ИМ) — от 60 тыс. руб. до 1 млн. руб.

Вы всё ещё не видите профита?
Володя
Володя
сделай так
<?php
switch ($modx->event->name) {

	case 'OnDocFormPrerender':

        if ($mode !== 'upd' || empty($id)) {return '';}
        if (!$modx->getObject('msProduct', $id) && !$modx->getObject('msCategory', $id)) {return '';}

        $modx->controller->addHtml('
		<script type="text/javascript">
			Ext.onReady(function() {
				var buttons = Ext.getCmp("modx-action-buttons");
				if (!buttons) {return;}
                    		for (i in buttons.items.items) {
                        		var button = buttons.items.items[i];
                        		if ("button" !== button.xtype) {continue;}
                        		if ("update" == button.process || "resource/update" == button.process) {
                            			button.enable();
                        		}
                    		}
			});
		</script>');

	break;

}