Дмитрий Кондаков

Дмитрий Кондаков

С нами с 28 февраля 2013; Место в рейтинге пользователей: #234
Дмитрий
07 мая 2016, 14:42
1
+1
Как оказалось, еще проще:
<?php
if ($modx->event->name == 'OnDocFormSave' && $mode == modSystemEvent::MODE_NEW) {
    if ($resource->get('template') == 3) {
        $resource->set('source', 4);
    }
}
Vbif
27 апреля 2016, 21:22
2
0
В итоге решилось так. Плагин с кодом:
<?php
if ($modx->event->name = 'msOnBeforeAddToCart' || $modx->event->name = 'msOnBeforeChangeInCart') {
	$values = & $modx->event->returnedValues;
	if ($values['count'] < 1) {
		$values['count'] = 1;
	}
}
и события msOnBeforeAddToCart и msOnBeforeChangeInCart.
Максим Кузнецов
17 марта 2016, 12:45
2
0
[[!pdoResources? 
	&parents=`...`
	...
	&leftJoin=`{
		"Parent":{
			"class": "modResource",
			"alias": "Parent",
			"on":"Parent.id = modResource.parent"
		}
	}`
	&sortby=`{"Parent.menuindex":"desc", "menuindex":"desc"}`
]]
Володя
29 февраля 2016, 09:15
1
0
Ну если вы используете сниппет, то плагин тут и не отработает.
Скорее всего у вас обработчик на событие OnPageNotFound и в нем же вы посылаете снова на sendErrorPage.
Смените событие на OnHandleRequest и думаю все будет ок.
Максим Кузнецов
27 февраля 2016, 00:18
2
+2
— Заходите в phpmyadmin.
— Выбираете таблицу modx_site_content
— Переходите в закладку «структура»
— Внизу открывшегося окна нажимаете ОК (Добавить 1 поле в конец таблицы)
Имя: ticket_rating
Тип: int
Длина/значение: 10
По умолчанию: Как определено (0)
Null: галочка
(сохраняем)

Таким способом мы расширили дефолтную таблицу MODX'a со списком ресурсов. Далее:
— Создаем плагин (допустим, customTicketRating) со следующим содержанием:
<?php
    switch ($modx->event->name) {
    	
    	case 'OnMODXInit':
    		$modx->loadClass('modResource');
    		$modx->map['modResource']['fields']['ticket_rating'] = 0;
    		$modx->map['modResource']['fieldMeta']['ticket_rating'] = array(
    			'dbtype' => 'int',
    			'precision' => 10,
    			'attributes' => '',
    			'phptype' => 'int',
    			'null' => true,
    			'default' => 0,
    		);
    		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 и OnMODXInit. Теперь наше новое поле воспринимается модксом и изменяется после каждого голосования за любой ресурс.

Теперь осталось только вызвать сниппет с нужным условием:
[[!pdoPage?
	&element=`getTickets`
	&where=`{"ticket_rating:>": 1}`
]]

Важно: рейтинг начнет вычисляться только с последующих голосований за тикеты.
Василий Наумкин
24 февраля 2016, 22:05
2
+3
Прикольно!

Ну и выкидывай нафиг этот default:
<img src="{$_pls['270x235'] ?: '/assets/components/minishop2/img/web/ms2_small.jpg'}"
	alt="{$pagetitle | Jevix}" />
Jevix нужно будет указать как модификатор Fenom.
Павел Гвоздь
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.

Вроде всё…
Сергей Шлоков
12 января 2016, 18:35
2
+1
Думаю, так должно работать
// Процессор очистки корзины
$response = $modx->runProcessor('resource/emptyrecyclebin');
if ($response->isError()) $response->getMessage();
Выполнять в специальном сниппете или Console.
Ну а лучше конечно разобраться с ошибкой очистки через корзину.
Василий Столейков
12 января 2016, 12:24
1
0
Тоже волновал подобный вопрос, но немного другого характера. Нужно удалять удалённые ресурсы вместе со всеми связями (тв-шками) не из админки.
Это возможно как-то сделать?
Или прийдётся удалять с двух таблиц?
Примерно так в цикле помеченных на удаление:
DELETE FROM modx_site_tmplvar_contentvalues WHERE contentid = $id
DELETE FROM modx_site_content WHERE deleted = 1
Василий Наумкин
12 января 2016, 10:32
1
+1
DELETE FROM modx_site_content WHERE deleted = 1