Денис Усачев

Денис Усачев

С нами с 26 июля 2016; Место в рейтинге пользователей: #823
Илья Уткин
06 декабря 2022, 14:58
1
0
Вот пример того, как можно кешировать — ilyaut.ru/cheats/caching-mfilter
Илья Александрович
26 ноября 2022, 00:03
1
+1
вот решение:
{'!mFilter2' | snippet : [
                            'class' => 'msProduct',
                            'element' => 'msProducts',
                            'loadModels' => 'msTopProducts',
                            'parents' => $_modx->resource.id,
                            'showHidden' => '0',
                            'showUnpublished' => '0',
                            'hideContainers' => '0',
                            'showLog' => '0',
                            'suggestions' => '1',
                            'ajaxMode' => 'default',
                            
                            'includeThumbs' => 'medium,480x576',
                            'tpls'  => 'tpl.product.block,tpl.product.row',
                            
                            'tplOuter' => 'tpl.mFilter2.outer',
                            'tplFilter.outer.default' => 'tpl.mFilter2.filter.outer',
                            'tplFilter.row.default' => 'tpl.mFilter2.filter.checkbox',
                            
                            'filters' => '
                                resource|parent:parents,
                            ',
    
                            'leftJoin'=>'{
                                "P1": {
                                    "class": "msProductOption",
                                    "on": "P1.key = \'p1\' and P1.product_id = msProduct.id"
                                },
                                "P2": {
                                    "class": "msProductOption",
                                    "on": "P2.key = \'p2\' and P2.product_id = msProduct.id"
                                },
                            	"msTopProduct" : {
                            		"class" : "msTopProduct",
                            		"alias" : "msTopProduct",
                            		"on" : ["msTopProduct.product_id = msProduct.id", "msTopProduct.category_id = ' ~ $_modx->resource.id ~ ' "]
                            	}
                            }',   
                        
                            'sortAliases' => '{"p1":"P1","p2":"P2"}',
                            'aliases' => 'p1|value==p1,p2|value==p2',
                            
                            'sortby' => '{"msTopProduct.rank":"DESC", "msProduct.menuindex":"ASC"}',
                            
                            'limit' => '9',
                            'pageLimit' => '7',
                            
                            'tplPage' => '@INLINE <li class="page-item control"><a class="page-link" href="[[+href]]">[[+pageNo]]</a></li>',
                            'tplPageWrapper' => '@INLINE <div class="col-12 pagination justify-content-center"><ul class="pagination">[[+first]][[+prev]][[+pages]][[+next]][[+last]]</ul></div>',
                            'tplPageActive' => '@INLINE <li class="page-item active"><span class="page-link">[[+pageNo]]</span></li>',
                            'tplPageFirst' => '@INLINE <li class="page-item control"><a class="page-link" href="[[+href]]"><i class="fas fa-angle-double-left"></i></a></li>',
                            'tplPageLast' => '@INLINE <li class="page-item control"><a class="page-link" href="[[+href]]"><i class="fas fa-angle-double-right"></i></a></li>',
                            'tplPagePrev' => '@INLINE <li class="page-item control"><a class="page-link" href="[[+href]]"><i class="fas fa-angle-left"></i></a></li>',
                            'tplPageNext' => '@INLINE <li class="page-item control"><a class="page-link" href="[[+href]]"><i class="fas fa-angle-right"></i></a></li>',
                            'tplPageSkip' => '@INLINE <li class="page-item disabled"><span>...</span></li>',
                            'tplPageFirstEmpty' => '@INLINE ',
                            'tplPageLastEmpty' => '@INLINE ',
                            'tplPagePrevEmpty' => '@INLINE ',
                            'tplPageNextEmpty' => '@INLINE ',
                            'ajaxTplMore' => '@INLINE <button class="btn btn-outline-danger rounded-0 my-3 btn-more">Загрузить ещё</button>',
                        ]}
Тодор
29 ноября 2021, 15:38
1
0
foreach($data as $item){
    /*
    $item = array(
        [name] => Название поризводителя
        [resource] => 
        [country] => 
        [logo] => images/logo.png
        [address] => 
        [phone] => 
        [fax] => 
        [email] => 
        [description] => 
    )
    */
    $vendor = $modx->newObject('msVendor', $item);
    $vendor->save();
}
Илья Александрович
04 марта 2021, 23:41
1
0
Вот рабочий вариант, только как сразу все категории перезаписать не получилось сделать, нужно менять parent
<?php
$products = $modx->getIterator('msProduct', array('parent' => 125));
foreach($products as $product){
    $options = $product->getMany('Options');
    $options = array(
    	'quantity' => array('99999'),
    );
    $product->set('options', $options);
    $product->save();
};
Артур Шевченко
28 января 2021, 16:11
1
0
Думаю стоить дополнить этот пост раз он есть в поиске. Во-первых на мой взгляд решение не самое лучшее, но достаточно простое, поэтому я его немного переделал для компактности
ПЛАГИН
<?php
switch ($modx->event->name) {
    case 'OnDocFormSave':
        $sql = 'SELECT article FROM modx_msop_modifications WHERE rid= ?';
        $statement = $modx->prepare($sql);
        if ( $statement->execute(array($id)) ) {
            $result = $statement->fetchAll(PDO::FETCH_COLUMN);
        }
        $resource->set('introtext', implode(',',$result));
        $resource->save();
    break;
}
КОД ДЛЯ КОСОЛИ, чтобы обновить товары
<?php
$resources = $modx->getIterator('msProduct');

foreach ($resources as $resource) {
    $id = $resource->get('id');
    $sql = 'SELECT article FROM modx_msop_modifications WHERE rid= ?';
    $statement = $modx->prepare($sql);
    if ( $statement->execute(array($id)) ) {
        $result = $statement->fetchAll(PDO::FETCH_COLUMN);
    }
    $resource->set('introtext', implode(',',$result));
    $resource->save();
}
Константин Ильин
19 января 2021, 12:21
1
+2
Недавно делал для товаров Минишопа.
$gallery = array(
    'id' => $id,
    'file' => $URL_FULL // https://site.ru/img/123.jpg
);
$upload = $modx->runProcessor('gallery/upload', $gallery, array(
    'processors_path' => MODX_CORE_PATH.'components/minishop2/processors/mgr/'
));

if ($upload->isError()) {
    //print_r($upload->getResponse());
}
$modx->error->reset();

для ms2gallery
// Почему то источник у меня слетал, так что этот код возможно не нужен.
if ($resource = $modx->getObject('modResource', $id)) {
    $properties = $resource->getProperties('ms2gallery');
    $properties['media_source'] = 3;
    $resource->setProperties($properties, 'ms2gallery');
    $resource->save();
}

$gallery = array(
    'id' => $id,
    'file' => $URL_FULL // https://site.ru/img/123.jpg
);

$upload = $modx->runProcessor('gallery/upload', $gallery, array(
    'processors_path' => MODX_CORE_PATH.'components/ms2gallery/processors/mgr/'
));
Руслан
16 января 2021, 19:13
1
+1
Еще удобнее использовать для таких целей switch:
{switch $_modx->resource.parent}
{case 15}
    ...
{case 16,17, 18}
    ...
{case 19}
    ...
{case default, 20}
    ...
{/switch}

из той же документации на гитхабе
Артур Шевченко
29 ноября 2020, 19:03
2
0
$(document).on('msoptionsprice_product_action', function (e, action, form, response) {
    var mid = $('input[name="curmid"]').val();
    //console.log(response);   
       if(response.data.modification.count == 0){
            $('.modprice-' + response.data.modification.rid).each(function(){$(this).css('display', 'none')}); //показываем НЕТ В НАЛИЧИИ
            $('.modpricenone-' + response.data.modification.rid).each(function(){$(this).css('display', 'inline')}); //показываем В НАЛИЧИИ
            $('.jsAddToCart').prop('disabled', true);
        }else{
            //тут наоборот
            $('.modprice-' + response.data.modification.rid).each(function(){$(this).css('display', 'inline')});
            $('.modpricenone-' + response.data.modification.rid).each(function(){$(this).css('display', 'none')});
            $('.jsAddToCart').prop('disabled', false);
        }  
});
Писать тут assets/components/msoptionsprice/js/web/default.js но лучше сделать копию, поменять путь в настройках, и в копии писать.
Володя
21 апреля 2019, 08:48
1
+1
{set $modification = '!msOptionsPrice.modification'|snippet:[
    'includeThumbs' => 'small',
    'return' => 'data'
]}

{if $modification && count($modification) > 1} 
    {$modification|print}
{/if}
iWatchYouFromAfar
18 января 2019, 19:28
1
+1
Есть такой вариант:

1. В чанке где выводим комментарии делаем примерно так:
<a href="users/{$username}">
    <span style="color: {$_modx->runSnippet('@FILE snippets/checkUserGroup.php', ['userid' => $createdby])};">{$fullname}</span>
</a>
2. Делаем сниппет с названием checkUserGroup.

$user = $modx->getObject('modUser', array('active' => true, 'id' => $userid));

// Если пользователь не найден, ну мало ли?
if ($user == null)
    return 'inherit';

// Если пользователь Админ, делаем ник красным.
if ($user->isMember('Administrator')) {
    return 'red';

} // Или если пользователь член группы Users, наследуем обычный цвет.
elseif ($user->isMember('Users')) {
    return 'inherit';
}

return ($result);
3. Результат примерно такой



Т.е. в сниппете проверяем группу и на её основании подставляем нужный цвет. Дальше развивайте идею и стилизуйте то что вам необходимо.