Всего 123 803 комментария

Антон
25 ноября 2023, 14:01
0
Делаю также мультизагрузку через MIGX и ImagePlus. Одиночная загрузка работает, вопросов нет. В мультизагрузке не отображаются превью изображений в админке. Конфигурация MIGX выглядит таким образом:
{
  "formtabs":[
    {
      "MIGX_id":3,
      "caption":"bscarousel",
      "print_before_tabs":"0",
      "fields":[
        {
          "MIGX_id":6,
          "field":"slide",
          "caption":"\u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435",
          "description":"",
          "description_is_code":"0",
          "inputTV":"",
          "inputTVtype":"imageplus",
          "validation":"",
          "configs":"",
          "restrictive_condition":"",
          "display":"",
          "sourceFrom":"migx",
          "sources":[
            {
              "MIGX_id":2,
              "context":"web",
              "sourceid":4
            }
          ],
          "inputOptionValues":"",
          "default":"",
          "useDefaultIfEmpty":"0",
          "pos":1
        }
      ],
      "pos":1
    }
  ],
  "contextmenus":"",
  "actionbuttons":"uploadfiles",
  "columnbuttons":"",
  "filters":"",
  "extended":{
    "migx_add":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0444\u043e\u0442\u043e \u043c\u043e\u0434\u0435\u043b\u0438",
    "disable_add_item":"",
    "add_items_directly":"",
    "formcaption":"",
    "update_win_title":"",
    "win_id":"",
    "maxRecords":"",
    "addNewItemAt":"bottom",
    "media_source_id":"",
    "multiple_formtabs":"",
    "multiple_formtabs_label":"",
    "multiple_formtabs_field":"",
    "multiple_formtabs_optionstext":"",
    "multiple_formtabs_optionsvalue":"",
    "actionbuttonsperrow":4,
    "winbuttonslist":"",
    "extrahandlers":"",
    "filtersperrow":4,
    "packageName":"",
    "classname":"",
    "task":"",
    "getlistsort":"",
    "getlistsortdir":"",
    "sortconfig":"",
    "gridpagesize":"",
    "use_custom_prefix":"0",
    "prefix":"",
    "grid":"",
    "gridload_mode":1,
    "check_resid":1,
    "check_resid_TV":"",
    "join_alias":"",
    "has_jointable":"yes",
    "getlistwhere":"",
    "joins":"",
    "hooksnippets":"",
    "cmpmaincaption":"",
    "cmptabcaption":"",
    "cmptabdescription":"",
    "cmptabcontroller":"",
    "winbuttons":"",
    "onsubmitsuccess":"",
    "submitparams":""
  },
  "permissions":{
    "apiaccess":"",
    "view":"",
    "list":"",
    "save":"",
    "create":"",
    "remove":"",
    "delete":"",
    "publish":"",
    "unpublish":"",
    "viewdeleted":"",
    "viewunpublished":""
  },
  "fieldpermissions":"",
  "columns":[
    {
      "MIGX_id":1,
      "header":"\u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435",
      "dataIndex":"slide",
      "width":50,
      "sortable":true,
      "show_in_grid":1,
      "customrenderer":"",
      "renderer":"ImagePlus.MIGX_Renderer",
      "clickaction":"",
      "selectorconfig":"",
      "renderchunktpl":"",
      "renderoptions":"",
      "editor":""
    }
  ],
  "category":""
}
Что блин не так? Почему превью не видны? Да и ощущение, что файлы не добавились в таблицу в документе
Кровельный
24 ноября 2023, 15:57
0
Удалить изображения в базе
$q = $modx->newQuery('msProduct');
$q->innerJoin('msProductData', 'Data', 'msProduct.id = Data.id');
$q->where(array(
    'msProduct.parent:IN' => [30396,30397,30398], 
    'msProduct.published' => 1, 
    'msProduct.deleted' => 0)
);
$q->sortby('msProduct.id','ASC');
$products = $modx->getIterator('msProduct', $q);
foreach ($products as $product) {
    if ($images = $modx->getCollection('msProductFile', array('product_id' => $product->id, 'parent' => 0))) {
        $ids = array();
        foreach ($images as $im) {
            $ids[] = $im->get('id');
        }
        $response = $modx->runProcessor('gallery/multiple',
        	array('method' => 'remove', 'ids' => json_encode($ids)),
        	array('processors_path' => MODX_CORE_PATH.'components/minishop2/processors/mgr/')
        );
        // remove files on dir
        $remove_files = glob(MODX_BASE_PATH.'assets/images/products/'. $id.'/*');
        foreach ($remove_files as $remove_file) {
            if (is_file($remove_file)) {
                unlink($remove_file); // delete file
            }
        }
    }
}
Перегенерировать превью товара при загрузке после импорта
$q = $modx->newQuery('msProduct');
$q->innerJoin('msProductData', 'Data', 'msProduct.id = Data.id');
$q->where(array('msProduct.parent:IN' => [30396,30397,30398], 
    'msProduct.published' => 1, 'msProduct.deleted' => 0));
$q->sortby('msProduct.id','ASC');
$products = $modx->getIterator('msProduct', $q);
$i = 0;
foreach ($products as $product) {
    $i++;
    
    if ($images = $modx->getCollection('msProductFile', array('product_id' => $product->id, 'parent' => 0, 'rank' => 0))) {
        $ids = array();
        foreach ($images as $im) {
            $ids[] = $im->get('id');
            $image = $im->get('url');
        }
        $response = $modx->runProcessor('gallery/multiple',
        	array('method' => 'generate', 'ids' => json_encode($ids)),
        	array('processors_path' => MODX_CORE_PATH.'components/minishop2/processors/mgr/')
        );
        $product = $modx->getObject('msProduct', $product->id);
        $product->set('image', $image);
        $product->save();
    }
}
Номера родительских категорий следует сменить, смотрите внимательно. На всякий случай сделайте бэкап.
Pandemic
24 ноября 2023, 11:59
0
А продолжение будет? интересная затейка
steve.kon
24 ноября 2023, 11:58
0
Ну принцип-то должен работать, вроде. Я его везде на 2.8 использую, всё в порядке, но тут вот решил сделать правильно (пустой вывод убрать).
Пробую так (может видно будет в чем ошибка):
[!+ss_meta.keywords? toPlaceholder=`keywords`]]
    [[+keywords:ne=``:then=`<meta name="[[+name]]" content="[[+value:escape]]" />`]]    //такой вариант не работает
    [[+keywords:ne=``:then=`[[!+ss_meta.keywords]]`]]    // и такой тоже
Miša Bulic
24 ноября 2023, 11:47
0
Seo Suite давно не поддерживается для 2.8, они на 3-ку перешли. А по делу проверь нет ли у тебя там пробела в поле keywords.
tararaxnes
23 ноября 2023, 14:53
+1
Хорошо, я попробую, спасибо, что уделили время
Володя
23 ноября 2023, 14:51
0
да, так уже понятней.
для такого варианта не получится использовать msOptionsPrice.modification. Нужно писать свой сниппет для выборки. Или как то использовать pdoResourses
tararaxnes
23 ноября 2023, 14:35
0
Наверное я не так ясно выразился (мой русский не на высоком уровне).
Например, у меня есть следующие 3 продукта(3 разных продукта одной категории (а не 3 модификации одного продукта)):
ТоварА(ID:1)------>(с 3 модификациями)
1. модификация1: цвет1, размер, коллекцияА
2. модификация2: цвет2, размер, коллекцияА
3. модификация3: цвет3, размер, коллекцияB

ТоварB(ID:2)------>(с 2 модификациями)
1. модификация1: цвет3, размер, коллекцияА
2. модификация2: цвет1, размер, коллекцияB

ProductC(ID:3)------>(с 2 модификациями)
1. модификация1: цвет3, размер, коллекцияА
2. модификация2: цвет1, размер, коллекцияА

Поэтому мне нужно использовать snippet
[[!msOptionsPrice.modification?
&where=`[ "Option.key = 'collection' AND Option.value = 'коллекциюА'" ]`
]]
например, в строке меню:
чтобы получить все товары, входящие в коллекциюА.

он должен вернуть следующий список:
ТоварA, цвет1, размер, коллекцияA
ТоварA, цвет2, размер, коллекцияA
ТоварB, цвет3, размер, коллекцияA
ТоварC, цвет3, размер, коллекцияA
ТоварC, цвет1, размер, коллекцияA
Володя
23 ноября 2023, 14:15
0
не поможет, оно возвращает то же предупреждение:"[msOptionPrice] The resource with id= is not instance of msProducts." и я думаю, что это нормально,
либо у вас неверно указан параметр product, либо в плейсхолдере [[+id]] не идентификатор продукта. ЧУдес не бывает.
tararaxnes
23 ноября 2023, 14:05
0
Моя проблема:
1. я не хочу запустить этот snippet со страницы продукта
2. когда я запускаю этот snippet, мне нужно получать результаты всех модификаций продукта с одним и тем же ключом Option.key.

и
&product=`[[+id]]`
не поможет, оно возвращает то же предупреждение:"[msOptionPrice] The resource with id= is not instance of msProducts." и я думаю, что это нормально,
у меня такое впечатление, что snippet msOptionsPrice.modification возвращает данные только для конкретного продукта, но мне нужно что-то вроде, например:
[[pdoResourses? &parents=`47` &where=`{'class_key' : 'msCategory'}'
Это вернет информацию обо всем, что находится под родительским номером 47.
Володя
23 ноября 2023, 13:43
0
если вы вызываете сниппет не на странице товара обязательно нужно указать идентификатор
&product=`[[+id]]`
tararaxnes
23 ноября 2023, 13:04
0
Я уже пробовал это, но он возвращает: [msOptionPrice] The resource with id= is not instance of msProducts.
Если я добавлю &product = product_id оно работает.
Но мне нужно получить список всех продуктов(из модификаций), принадлежащих определенной коллекции.
Константин Ильин
23 ноября 2023, 10:54
+2
После загрузки модального окна делаю так:
let a = document.querySelector(".modalTmp form").getAttribute('data-fetchit')
        FetchIt.create({
            action: a,
            assetsUrl: "/assets/components/fetchit/",
            actionUrl: "/assets/components/fetchit/action.php",
            inputInvalidClass: "is-invalid",
            customInvalidClass: "",
            clearFieldsOnSuccess: false,
            pageId: 1,
        });
пока такой костыль, но работает

а, еще чтобы FetchIt был подключен всегда и объявлена переменная FetchIt до запуска вышенаписанного кода, в футере например вызываю пустой FetchIt
{'!FetchIt' | snippet : ['form' => '@INLINE <div class="modalTmp"></div>']}
Володя
23 ноября 2023, 09:41
0
Вот так должно сработать
[[!msOptionsPrice.modification?
&where=`[ "Option.key = 'collection' AND Option.value = 'Летняя коллекция'" ]`
]]
Володя
23 ноября 2023, 09:28
0
Доброе утро. Можно использовать параметр byOptions
{'!msOptionsPrice.modification'|snippet: [
'byOptions' => [
    'collection' => 'Летняя коллекция'
]
]}
ps. пардон. все модификации это не даст, а только первую подходящую.
tararaxnes
23 ноября 2023, 08:50
0
да, вы правы насчет коллекции, но в текущей структуре с использованием модификаций другого пути нет. В коллекции может быть продукт всех цветов, но также может быть продукт определенного цвета. Я не вижу другого пути.
Артур Шевченко
23 ноября 2023, 00:39
0
Я бы на вашем месте хорошо подумал, а точно ли коллекция это свойство товара, которое должно быть в модификации. А в текущей раскладке скорее всего только свой сниппет писать, который сделает нужную выборку из БД.
Артур Шевченко
22 ноября 2023, 21:48
0
Я бы попробовал SendIt. Подход к реализации там нетипичный, но при наличии необходимых атрибутов форма отработает как надо хоть прямо на странице, хоть в модальном окне.