Сергей

Сергей

Был в сети 30 декабря 2021, 13:23
Заказы не принимаю
if ($modx->event->name == 'OnBeforeDocFormSave') {
    $pagetitle = $resource->get('pagetitle');
    $q = array('pagetitle' => $pagetitle);
    if($id) {
    $q['id:!='] = $id;
    }
    $second = $modx->getObject('modResource', $q);
    
    if($second) {
        $modx->event->output("Товар с таким названием уже есть, задайте другое!");
    }
}
Но как я понимаю ресурс все равно создается ведь его видно в админке, как сделать чтобы $resource->save() не выполнялось если ресурс с таким pagetitle уже существует? Нашел «You may also pass a message to the $modx->event->output() function and this will be displayed to the user in a modal pop-up window. If you pass a value here, the page will not be saved!» Ткните плиз, что я упускаю.
Это понятно спасибо, но у меня ресурс сделан как «Категория товаров» и там в настройках нет такого параметра, у ресурсов которые созданы как документ есть. Также есть и другие ресурсы которые созданы как «Категория товаров» и там нет такой проблемы. Возможно (точно) что-то упускаю.
Спасибо за ответ, про этот параметр я знал, у меня есть фильтр такого вида:
[[!mFilter2?
        &limit=`9`
        &parents=`[[*id]]`
        &class=`msProduct`
        &element=`msProducts`
        &tpl=`product_list_discount`
        &includeThumbs=`300x300`
        &tplCondition=`old_price`
        &tplOperator=`empty`
        &conditionalTpls=`["product_list"]`
        &filters=`
            ms|price:number
            ,msoption|flowers:default
            ,msoption|whom:default
            ,msoption|events:default
            ,msoption|colors:default
        `
        &toPlaceholders=`my.`
        &sortby=`price`
        &sortdir=`ASC`
        &ajaxMode=`button`
        &tplFilter.outer.ms|price=`tpl.mFilter2.filter.slider`
        &tplFilter.row.ms|price=`tpl.mFilter2.filter.number`
        
        &tplFilter.outer.msoption|colors=`tpl.mFilter2.filter.outer`
        &tplFilter.row.msoption|colors=`tpl.mFilter2.filter.checkbox-color`
    ]]
Если добавить параметр
&where=`{"Data.price:>=":2000}`
то будет выводиться товар где у нас цена > 2000, что мне не подходит, (точнее подходит), но мне нужно чтобы этот параметр для сортировки отрабатывал по клику по ссылке. Как реализовано здесь
<div class="sort" id="mse2_sort">
    <span class="sort__text">Показать сначала</span>
    <a href="/"  data-sort="ms|old_price:desc" data-dir="" class="sort__link active"><span class="link-span">Со скидкой</span></a>
    <a href="/"  data-sort="ms|price:asc" data-dir="" class="sort__link"><span class="link-span">Дешевые</span></a>
    <a href="/"  data-sort="ms|price:desc" data-dir="" class="sort__link"><span class="link-span">Дорогие</span></a>
    <a href="/"  data-sort="resource|publishedon:desc" data-dir="" class="sort__link"><span class="link-span">Новинки</span></a>
</div>
Я так понимаю исходя из документации к компоненту нужно что-то такого вида:
[[!mFilter2?
    &parents=`0`
    &element=`msProducts`
    &leftJoin=`{
        "Test1": {
            "class": "msProductOption",
            "on": "Test1.key = 'test1' and Test1.product_id = msProduct.id"
        }
    }`
    &sortAliases=`{"test1":"Test1"}`
    &aliases=`test1|value==test1`
    &sort=`test1:desc`
]]
Присоединяем опцию test1, добавляем для этой таблицы псевдоним и сортируем по значению присоединённой опции.Ссылка для сортировки в чанке tpl.mFilter2.outer в данном случае должна быть примерно такой:
<a href="#" class="sort [[+mse2_sort:is=``:then=`active`]]"
    data-sort="test1" 
    data-dir="[[+mse2_sort:is=``:then=`desc`]]" 
    data-default="desc">Test1 <span></span></a>
Но что-то я пока не пойму как это применить…
Здравствуйте, подскажите пожалуйста как можно реализовать такую возможность, чтобы цена при модификации у определенных товаров прибавлялась один раз независимо от количества этого товара. Я так понимаю копаться надо в msoptionsprice.class.php и реализовать некий массив
$cat = array();
$in_cat = false;

$parents = $modx->getParentIds($id);
foreach($parents as $row) {
    if(in_array($row, $cat)) {
        $in_cat = true;
        break;
    }
}

if(!$in_cat)
    return;
после чего будем смотреть родителей и если есть совпадение будет отрабатывать модификация цены, которая не зависимо от количества данного товара сработает один раз и далее будет суммироваться цена без модификации (родная для одного товара). Извиняюсь если написал не очень, но смысл вроде передал.
Здравствуйте! Используя данное дополнение на цветочном сайте столкнулся со следующей проблемой. Создал необходимые модификации, а точнее размер и упаковка
[[!msOptions? &tpl=`tpl.bouquet-size`&options=`bouquet-size`]]
,
[[!msOptions? &tpl=`tpl.product-option`&options=`package`]]
и
[[!msOptions? &tpl=`tpl.product-option` &options=`kraft`]]
. Все работает великолепно но загвоздка, в том, что когда выбираем штучный товар скажем «Роза .....» и упаковку для неё, то price меняется с учетом модификации ( и это правильно) но если нам нужна не одна, а скажем пять «Роза .....» то при изменении count, цена за каждый товар будет прибавляться с учетом модификации. Следовательно вопрос такой, как сделать чтобы цена с модификацией (упаковка), прибавлялась только один раз к данному товару (count = 1), а если этого товара нам нужно больше одного (count > 1), то цена добавляется без учета цены за эту модификацию(упаковка)? Подскажите пожалуйста решение или место где копать.