Всего 125 953 комментария

Константин
12 августа 2022, 09:31
0
Именно от опции vendor задача отказаться. Еду опцию использовать не под статус производителя (оригинал/неоригинал), а под реального производителя бренд Bosch, Samsung и проч.
Дмитрий
11 августа 2022, 22:37
0
Добрый вечер, а ваши названия в опциях товара точно соответствуют названиям из объекта?
К примеру в объекте "KIA«заглавными, а в свойстве товара случаем не „Kia“?
maxgmm
11 августа 2022, 21:56
0
Сделал такое решение

Вставил в шаблон
[[!ideas?
&tpl=`tpl.ideas.tpl`
&user_id=`[[!+modx.user.id]]`
 ]]
Изменил снипет
<?php
/** @var modX $modx */
/** @var array $scriptProperties */
/** @var ideas $ideas */
$ideas = $modx->getService('ideas', 'ideas', MODX_CORE_PATH . 'components/ideas/model/', $scriptProperties);
if (!$ideas) {
    $modx->log(modX::LOG_LEVEL_ERROR, '[ideas] Could not load ideas class!');
    return '';
}

$allow_jquery_modal = $modx->getOption('ideas_allow_jquery_modal', null, true);
if($allow_jquery_modal){
    $modx->regClientCSS(MODX_ASSETS_URL . 'components/ideas/css/jquery.modal.min.css');
    $modx->regClientScript(MODX_ASSETS_URL. 'components/ideas/js/jquery.modal.min.js');

    $modx->regClientCSS(MODX_ASSETS_URL . 'components/ideas/lib/iziToast.css');
    $modx->regClientScript(MODX_ASSETS_URL. 'components/ideas/lib/iziToast.min.js');

}

$js_frontend = $modx->getOption('ideas_frontend_js', null, MODX_ASSETS_URL.'components/ideas/js/default.js');
if(!empty($js_frontend)){
    $modx->regClientScript($js_frontend);
}


$css_frontend = $modx->getOption('ideas_frontend_css', null, MODX_ASSETS_URL.'components/ideas/css/default.css');
if(!empty($css_frontend)){
    $modx->regClientCSS($css_frontend);
}

$limit = $modx->getOption('limit', $scriptProperties, 20);
$sortby = $modx->getOption('sortby', $scriptProperties, 'createdon');
$sortdir = $modx->getOption('sortdir', $scriptProperties, 'asc');
$tpl = $modx->getOption('tpl', $scriptProperties, 'tpl.ideas.tpl');
$resource = $modx->getOption('resource_id', $scriptProperties, false);
$user = $modx->getOption('user_id', $scriptProperties, false);
 

$pdoFetch = $modx->getService('pdoFetch');
$pdo = $modx->getService('pdoTools');

$types = $pdoFetch->getCollection(
    'ideasType',
    array('active' => 1),
    array(
        'sortby' => 'rank',
        'sortdir' => 'asc',
    )
);



if(count($types) > 0){
    foreach($types as $key => $type){
        $postFilter = array();
        $postFilter['active'] = 1;
        $postFilter['type'] = $type['id'];
        if($resource){
            $postFilter['resource_id'] = $resource;
        }
       
         if($user){
            $postFilter['user_id'] = $user;
        }
        
       
        
        if($type['only_context'] == 1){
            $postFilter['context_key'] = $modx->resource->get('context_key');
        }
        

        $types[$key]['posts'] = $pdoFetch->getCollection(
            'ideasPost',
            $postFilter, //where array
            array(
                'sortby' => $sortby,
                'sortdir' => $sortdir,
                'leftJoin' => array(
                    'Status' => array(
                        'class' => 'ideasStatus',
                        'on' => 'ideasPost.status = Status.id'
                    ),
                    'Type' => array(
                        'class' => 'ideasType',
                        
                        'on' => 'ideasPost.type = Type.id'
                    ),
                ),
                'select' => array(
                    'ideasPost' => '*',
                    'Status' => 'Status.name as status_name',
                    'Type' => 'Type.name as type_name, Type.id as type_id'
                ),

                'limit' => $limit
            )
        );



    }


    return $pdo->getChunk($tpl, array('data' => $types));
}else{
    $modx->log(modX::LOG_LEVEL_ERROR, '[ideas] type not found');
}
Александр Туниеков
11 августа 2022, 21:40
0
А как там вконтакте уведомления? я там обычно с почты захожу.
maxgmm
11 августа 2022, 21:02
0
В операционке это круто, я имею введу на сайте типа как вконтакте
maxgmm
11 августа 2022, 19:33
0
Нужен фильтр с условием что будет показываться только автору и администраторам
Николай Савин
11 августа 2022, 17:42
0
Использовать в шаблоне проверку на авторизованного пользователя. Вот примерно в таком формате

{if $_modx-.hasSessionContext('web')}
Тут вызов скрытой для анонимов информации
{/if}
maxgmm
11 августа 2022, 17:26
0
Подскажите как сделать чтобы идеи показывались только пользователю и админам?
Александр Туниеков
11 августа 2022, 17:09
0
В операционке? Это надо в гугл ключ брать и писать отправку уведомлений через гугл. Пока не до этого.
maxgmm
11 августа 2022, 17:02
0
А есть возможность реализовать всплывающие уведомления о сообщениях?
Артур Шевченко
11 августа 2022, 16:22
0
Аналогично этому плейсхолдеру
{$_pls['vendor.logo']}
Или проблема в том, чтобы получить значение опции Статус производителя? Если да, то для этого есть msProductOptions
Константин
11 августа 2022, 15:58
0
На моем сайте установлен slick slider, я просто перед закрывающим тегом body вызываю 2 раза так:

/* Несколько slick слайдеров на одной странице */
$('.led-grid').each(function(){
    /* Основной слайдер */
    $(this).find('.slider-for').slick({
      slidesToShow: 1,
    slidesToScroll: 1,
    arrows: false,
    fade: true,
      autoplay: true,
      autoplaySpeed: 8000,
      asNavFor: $(this).find('.slider-nav'),
      dots: false
    });

    /* Связанный слайдер */
    $(this).find('.slider-nav').slick({
     slidesToShow: 3,
    slidesToScroll: 1,
      asNavFor: $(this).find('.slider-for'),
       dots: false,
    centerMode: true,
    focusOnSelect: true,
    arrows : false
    });
  });
</script>
  
<script>
  /* Несколько slick слайдеров на одной странице совместно с фильтрами и пагинацией*/
$(document).on('mse2_load', function(e, data) {
  $('.led-grid').each(function(){
    /* Основной слайдер */
    $(this).find('.slider-for').slick({
      slidesToShow: 1,
    slidesToScroll: 1,
    arrows: false,
    fade: true,
      autoplay: true,
      autoplaySpeed: 8000,
      asNavFor: $(this).find('.slider-nav'),
      dots: false
    });

    /* Связанный слайдер */
    $(this).find('.slider-nav').slick({
     slidesToShow: 3,
    slidesToScroll: 1,
      asNavFor: $(this).find('.slider-for'),
       dots: false,
    centerMode: true,
    focusOnSelect: true,
    arrows : false
    });
  });
});
</script>
Michael
11 августа 2022, 14:35
0
Здравствуйте, нет. Самостоятельно попробовал все способы какие считал максимально подходящими, не заработало. Никто так и не показал наглядного примера как это сделать. Если решите, буду благодарен за подсказку.
Александр Туниеков
11 августа 2022, 14:28
+1
Чтобы сразу был открыт чат с каким-то определенным юзаром надо добавить в ссылку GET-параметр user_id. урл_страницы_мессенджера?user_id=20
Чтобы убрать поиск юзера, чатов и список чатов, надо скопировать чанк tpl.RealMessenger.outer закомментировать в нем панель ctrl-panel. Например my.b4.tpl.RealMessenger.outer
<div id="realmessenger" data-hash="{$hash}">
    <div class="row">
        {*<div class="ctrl-panel">
            {$search_contact}
            {$search_chat}
            {$chats}
        </div>*}
        <div class="mess-panel">
            {$messages}
            {$form}

        </div>
    </div>
</div>
Иназначить этот чанк сниппету:
{'!RealMessenger' | snippet :[
    'OuterTpl'=>'my.b4.tpl.RealMessenger.outer',
]}
Константин
11 августа 2022, 08:47
0
Спасибо!!! Разобрался) Но почему-то стали дублироваться в фильтре марки и модели: disk.yandex.ru/i/W-3JcFircMkXsg

Вывожу так же, только объект другой:
<script>
var carsModelsObject = {
    "KIA": {
        "Rio 3 QBR (11-17)": [],
        "Rio 4 FB (2017- )": [],
        "Soul 3 SK3 (2019- )": [],
        "Creta 1 GSR (2016-21)":[]
    },

    "Hyundai": {
        "Solaris 1 RBR (10-17)": [],
        "Solaris 2 HCR (2017- )": []
    }
}
</script>
<script>
      window.onload = function() {
        var carSel = document.getElementById("msoption|marka_0"); // мои названия опций
        var modelSel = document.getElementById("msoption|model_0"); // мои названия опций
    
        for (var x in carsModelsObject) {
            carSel.options[carSel.options.length] = new Option(x, x);
        }
        carSel.onchange = function() {
    
            modelSel.length = 1;
          //display correct values
          for (var y in carsModelsObject[this.value]) {
            modelSel.options[modelSel.options.length] = new Option(y, y);
          }
        }
      }
    </script>
И сам фильтр не работает, так как залетает в строку параметром опция marka как бы дублем:

Корректная строка:
https://rioek.ru/zapchasti/?marka=KIA&model=Soul%203%20SK3%20(2019-%20)
Строка с дублем марки:
https://rioek.ru/zapchasti/?marka=KIA&model=KIA%20Soul%203%20SK3%20(2019-%20)
Константин
11 августа 2022, 07:54
0
Дак это понятно, так у меня к примеру наличие выводится:
{if $available==1?}
	<div class="stock"><span></span> <span class="status-stock">В наличии</span></div>
{/if}
{if $available==2?}
	<div class="stock"><span></span> <span class="status-stock">Нет в наличии</span></div>
{/if}
{if $available==3?}
	<div class="stock"><span></span> <span class="status-stock">Под заказ</span></div>
{/if}
{if $available==4?}
	<div class="stock"><span></span> <span class="status-stock">Ожидается (в дороге)</span></div>
{/if}
Вопрос в другом. Как выводить 2 в 1 или даже 3 в 1, как на примере опции производитель. Ведь у этой опции есть еще поля, такие как наименование, логотип, страна производителя и проч.
Это можно сделать через MIGX, но использовать TV нет желания, по этому и вопрос, как это сделать средствами minishop2 м возможно ли?
Артур Шевченко
10 августа 2022, 23:06
0
А Вы пробовали прикладывать ум не к гаданию, а к документации?