Олег Захаров

Олег Захаров

С нами с 14 октября 2017; Место в рейтинге пользователей: #64
Юрий Фомин
27 января 2017, 18:56
3
+2
Таки дописал велосипед про автоматизацию создания/удаления и редактирования ресурсов в контекстах-дублях.

<?php
if ($modx->event->name == 'OnDocFormSave') {
    // собираем дублированные контексты (web - оригинальный контекст)
	$contexts = $modx->getCollection('modContext', array('key:NOT IN' => ['mgr','web']));
	
	// получаем родителя создаваемого ресурса
	$parent = $resource->get('parent');
	if ($parent != '0') {
        $parentId = $modx->getObject('modResource', $parent);
        $parentAlias = $parentId->get('alias');
	}
    $alias = $resource->get('alias');
    $id = $resource->get('id');
    // проходимся по контекстам
	foreach ($contexts as $context) {
	    
	    $response = $modx->getObject('modResource', array('context_key'=>$context->key, 'alias' => $alias));
	    // если ресурс уже существует то тогда просто обновляем поля (кроме контента)
	    if ($response) {
    	    $response->set('pagetitle', $resource->get('pagetitle'));
    	    $response->set('longtitle', $resource->get('longtitle'));
    	    $response->set('description', $resource->get('description'));
    	    $response->set('content', '[[!OriginalFields?&id=`'.$id.'`&field=`content`]]');
            // ... много остальных полей
    	    $response->set('deleted', $resource->get('deleted'));
    	    $response->save();
	    } else {
	        // создание нового ресурса
    	    $newResource = $modx->newObject('modDocument');
    	    // заполняем поля ресурса
    	    $newResource->set('context_key', $context->key);
    	    $newResource->set('pagetitle', $resource->get('pagetitle'));
    	    $newResource->set('longtitle', $resource->get('longtitle'));
    	    $newResource->set('description', $resource->get('description'));
    	    $newResource->set('content', '[[!OriginalFields?&id=`'.$id.'`&field=`content`]]');
            // ... много остальных полей
    	    $newResource->set('deleted', $resource->get('deleted'));
    	    
    	    // поле родителя для создания дубля в нем а не в корне
    	    if ($parent != '0') {
    	        $res = $modx->getObject('modResource', array('context_key'=>$context->key, 'alias'=>$parentAlias));
    	        $parntId = $res->get('id');
    	    } else {
    	        $parntId = $parent;
    	    }
    	    $newResource->set('parent', $parntId);
            // сохраняем свежеиспеченый ресурс
    		$newResource->save();
	    }
	}
	// очищаем кеш
	$modx->cacheManager->clearCache();
}

// удаление ресурсов в дублирующих контекстах
if ($modx->event->name == 'OnDocFormDelete') {
    // собираем дублированные контексты (web - оригинальный контекст)
    $contexts = $modx->getCollection('modContext', array('key:NOT IN' => ['mgr','web']));
    
    // проходимся по контекстам
    foreach ($contexts as $context) {
        
        // получаем нужные (верней не нужные поэтому и удаляемые) нам ресурсы
        $response = $modx->getObject('modResource', array('context_key'=>$context->key, 'alias' => $resource->get('alias')));
        
        // помечаем как удаленные
        $response->set('deleted', $resource->get('deleted'));
        $response->save();
        
        // удаляет полностью
        // $response->get('id');
        // $response->remove();
    }
	$modx->cacheManager->clearCache();
}
Владимир
21 января 2017, 19:22
1
0
$_modx->getPlaceholder('+EUR')
— в комменте выше есть ответ на ваш вопрос
Володя
12 января 2017, 14:05
1
+1
{'!CRcalc'|snippet:[
    'input' => $_modx->getPlaceholder('+EUR'),
    'divider' => 'USD',
]}
Konstantin
10 сентября 2016, 19:31
1
0
Вот кстати ответ на вопрос — как вывести картинку из ms2Gallery используя pdoTools -> pdoResources

[[!pdoResources?
                        	&class=`msProductFile`
                        	&tpl=`@INLINE [[+rank]] - [[+url]]`
                        	&where=`{"product_id":"[[+id]]", "path:LIKE":"%/120x90/","rank":1}`
                        	&limit=`1`
                        	&sortby=``
                        	&sortdir=``
                        	&showLog=`0`
                        ]]
«rank»:1 — это указываем вторую картинку в товаре, если нужна первая то указываем «rank»:0
Сергей
23 мая 2016, 17:32
1
0
Вообщем подвожу итог.
Самый простой и удобный способ сделать цель на успешную отправку формы, это добавить
&successMessage=`Сообщение успешно отправлено
     <script>yaCounterXXXXXXX.reachGoal('myModalbuy_lid', goalParams, goalCallback);</script>`
Так-же попробовал добавить параметры цены цели
<script type="text/javascript">
        var goalParams1 = {order_price: 999, currency: "RUB"};
        function goalCallback1 () {
            console.log('запрос в Метрику успешно отправлен');
        }
</script>
Всем спасибо за помощь.
Василий Наумкин
21 января 2016, 09:09
3
0
На старой версии у меня работает, а в новой, похоже, что-то поменялось. Бронебойный вариант:
$("#cleanmincart").click(function(){
	$.post(document.location, {ms2_action: 'cart/clean'});
});
Пётр Молчанов
25 декабря 2015, 18:58
1
0
на событие OnUserRegister пиши что-то типа такого:
if ($modx->event->name === 'OnUserSave' && $mode === 'new') {
    // генерим пароль
    $pass = $modx->user->generatePassword();
    $user->set('password',$pass);
    $user->set('active','1');
    $user->save();

    $profile = $user->getOne('Profile');
    $email = $profile->get('email');
                $message = $modx->getChunk('название чанка с шаблоном письма', массив данных);
                $modx->getService('mail', 'mail.modPHPMailer');
                $modx->mail->set(modMail::MAIL_BODY,$message);
                $modx->mail->set(modMail::MAIL_FROM,$modx->getOption('emailsender'));
                $modx->mail->set(modMail::MAIL_FROM_NAME,$modx->getOption('site_name'));
                $modx->mail->set(modMail::MAIL_SENDER,$modx->getOption('site_name'));
                $modx->mail->set(modMail::MAIL_SUBJECT,'тема письма');
                $modx->mail->address('to',$email);
                $modx->mail->address('reply-to',$modx->getOption('emailsender'));
                $modx->mail->setHTML(true);
                
                if (!$modx->mail->send()) {
                  $modx->log(modX::LOG_LEVEL_ERROR,'An error occurred while trying to send the email: '.$modx->mail->mailer->ErrorInfo);
                  return false;
                }
                $modx->mail->reset();
}
ck
ck
02 октября 2015, 02:49
1
0
Для пересчёта цены в зависимости от выбранной валюты автор добавил в сборку плагин crMSprice. К сожалению по-умолчанию на него не навешено вообще никакого события.
Подскажите, как заставить его пересчитывать цену при выборе валюты из списка, выводимого сниппетом CRlist?
Василий Наумкин
31 августа 2015, 05:54
4
0
Условия в виде массива в msProducts не принимаются, потому что он ожидает их всегда в виде JSON. Придётся так и указывать:
{$_modx->runSnippet('!msProducts', [
    'parents' => 3,
    'sortby' => '{
        "Data.new": "desc",
        "msProduct.editedon": "desc"
    }',
    'includeThumbs' => '150x150',
    'where' => '{
	"Data.price:>=": 0
    
    }',
    'limit' => 4,
    'showLog' => true,
    'tpl' => '@INLINE
		bla-bla-bla
	'
])}
У pdoResources такой проблемы нет.

Кстати, если очень хочется использовать именно массивы — то можно воспользоваться тем, что json_encode в Fenom является разрешённой PHP функцией:
{$_modx->runSnippet('!msProducts', [
    'parents' => 3,
    'sortby' => json_encode([
        "Data.new" => "desc",
        "msProduct.editedon" => "desc"
    ]),
    'includeThumbs' => '150x150',
    'where' => json_encode([
	    "Data.price:>=" => 0
    ]),
    'limit' => 4,
    'showLog' => true,
    'tpl' => '@INLINE
		bla-bla-bla
	'
])}
Dmitry Rodionov
13 августа 2015, 00:12
1
+2
Перевод действительно убогий, лучше переписать своими словами все и будет куда как понятнее, чем пытаться сохранить стиль предложений.

Кстати, по поводу самой статьи, сравнение с WP интересно, но WP бесплатен, у нас же в России присутствует другой опыт, многим навязывают платный битрикс или юми, которые стоят в некоторых редакциях дороже чем весь сайт на бесплатном движке. При этом пользователи привыкли платить деньги и не понимают как может быть качественный продукт бесплатным, а еще и легким.
Например интернет магазин на 20к товаров на MODX будет спокойно работать на хостинге за 150р в месяц и кушать 1,5-2гига места. При этом такой же магазин на битриксе без суровых оптимизаций (мало кто нынче заботится о них) будет кушать уже под 10 гигов и висеть на хостинге за 3к в месяц.
Некомпетенция пользователей и не желание их терять навязывая свой движок, идут друг за другом и проталкивают платные продукты и тормозя развитие бесплатных, в какой-то мере.
Ну и конечно как правильно было замечено в статье, удобство использования WP простыми людьми ничего не понимающими в html, но при этом занимающимися «разработкой сайтов» вытекает в большую популярность по сравнению с MODX.