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

Роман
09 января 2023, 12:13
0
Я понял, спасибо, тоже как вариант. Если хочешь что-бы были скопированы TV копируй ресурс, да нормально. Но думаю пока как сделать так, при создании страницы будет выпадающий список у MIGx TV, где пользователь выбирает из списка ресурсов из которого скопировать контент этого MIGx TV, выпадающий список как listbox список ресурсов. Просто типа из готовых шаблонов выбираешь нужный, заполненный.
Артур Шевченко
09 января 2023, 12:10
0
Можно ещё так сделать
$title = $resource->get('pagetitle') . '-' . $resource->get('id');
$alias = $resource->cleanAlias($title);
if ($resource->get('alias') != $alias){
// тут остальное
}
Артур Шевченко
09 января 2023, 12:05
+1
Я, наверное, отвечу про мультикатегории раз никто другой не стал. В minishop2 они есть из коробки. Однако вы пытаетесь использовать два подхода разом: либо вы ставите галочки и составляете условие вывода, либо создаёте в каталоге два ресурса типа Категория товаров (Распродажа и Акция) и добавляете в них товары, также проставляя галочки, но не в опциях, а на вкладке Категории у конкретного товара. В этом случае достаточно просто отправлять пользователя, кликнувшего по баннеру, на соответствующую страницу (Распродажа или Акция), где должен быть как минимум вот такой вызов
{'!msProducts' | snippet: ['parents' => $_modx->resource.id]}

Или так
[[!msProducts?parents=`[[*id]]`]]
Артур Шевченко
09 января 2023, 11:54
0
Почистить лог и по очереди открывать страницы сайта, на какой странице появится ошибка там и надо искать где идёт получения url без корректного id.
Артур Шевченко
09 января 2023, 11:50
0
Можно попробовать на событие OnDuplicateResource повесить плагин, который скопирует данные, тогда пользователю нужно будет просто скопировать ресурс, где migx уже заполнен.
Артур Шевченко
09 января 2023, 11:40
0
Дополнительно ничего писать не нужно, всё есть в комплекте. Я проверил на чистом сайте, у меня всё из коробки завелось без проблем. Посмотрите может есть какие-то ошибки? Попробуйте установить версию 1.0.2.(доступна по ссылке в конце поста)
Наумов Алексей
09 января 2023, 10:50
+1
Добрый день!
Механизма хуков нет, есть возможность повесить плагин (в смысле обычный плагин MODX) на различные события (создание сообщения, удаление и т.п.).
Алексей Смирнов
09 января 2023, 08:22
0
Посмотрите параметры msProduct сниппета. Там будет ответ на ваш вопрос.
Владислав
09 января 2023, 02:39
0
А можете подсказать как указать в where не свойство товара, а именно опцию, т.к. такая конструкция: &where=`{«Data.sale»:«1»} конечно же не работает, потому что Data это свойство товара а не опция. Чем заменить Data?
Роман
08 января 2023, 00:30
0
Блиииин :)) точно, pagetitle же еще не обработан transalias ом, понял, попробую strpos
Алексей Смирнов
07 января 2023, 23:17
0
так не проверяется у вас всегда будет не равно…
if ($resource->get('alias') != $resource->get('pagetitle').'-'.$resource->get('id'))
у вас же pagetitle русскими, а алиас английскими?
Как вариант сравнивайте через функцию php strpos
и ищите это '-'.$resource->get('id')
можно еще посмотреть функции php которые в строке ищут. варианты есть.
Роман
07 января 2023, 22:51
0
Это первое что сделал, но это неверный подход, не работает почему-то, я хочу попробовать получить символы в конце строки до дефиса, и их сравнить с id страницы, если есть такое и сравнивается значит id уже висит на конце и ничего не делаем, сейчас все равно добавляет id при каждом нажатии на кнопу сохранить. Получается такая лажа tur-29-29-29

else {
   // existing resource was updated
    if ($resource->get('template') == 2) {
        
        
         if (!empty($resource->get('alias'))) {
             if ($resource->get('alias') != $resource->get('pagetitle').'-'.$resource->get('id')) {
               $resource->set('alias',$resource->get('alias').'-'.$resource->get('id'));
               $resource->save();
             }
        }
    
    
    }
}
Алексей Смирнов
07 января 2023, 22:37
0
наверное, перед генерацией проверять по вхождению — есть или нет уже этот id И если есть, то не генерить.
Алексей Смирнов
07 января 2023, 22:34
+1
в php есть функция microtime ставите в начало фиксируете показания ($asd = mictotime)
И в конце скрипта вычитаете из print $asd — mictorime.
как-то так.
Oleg
07 января 2023, 15:07
0
Всем привет. Как на сниппет ecForm повесить hook? Может сталкивался кто. В AjaxForm такой параметр есть.

'hooks' => 'FormItSaveForm,email,spam, telegramForm',
Константин Ильин
07 января 2023, 14:40
0
Артур подскажи пожалуйста, для этого вызова(из примеров взял) получается надо написать плагин который будет сохранять или хук?
Просто при таком вызове, редактирую fullname сохранить нажал, «Данные сохранены», но они не записались
{'!AjaxFormitLogin' | snippet : [
        'form' =>  'updateProfileForm',
        'snippet' => 'FormIt',
        'hooks' => 'AjaxIdentification',
        'method' => 'update',
        'successMessage' => 'Данные сохранены.',
        'clearFieldsOnSuccess' => 0,

        'validate' => 'email:required:email',
        'validationErrorMessage' => 'Исправьте, пожалуйста, ошибки!',
        'email.vTextRequired' => 'Укажите email.'
        ]}
Роман
07 января 2023, 14:05
0
Через плагин вроде разобрался, но при каждом обновлении добавляет id в конце alias, блин, получается ерунда типа tur-29-29-29 как это пофиксить?

Использую так
<?php
if ($modx->event->name == 'OnDocFormSave') {
    
if ($mode == 'new') {
    // resource created
    if (!empty($resource->get('alias'))) {
            $resource->set('alias',$resource->get('alias').'-'.$resource->get('id'));
            $resource->save();
        }else{
            $resource->set('alias',$resource->get('pagetitle').'-'.$resource->get('id'));
            $resource->save();
        }
}
else {
   // existing resource was updated
    if ($resource->get('template') == 2) {
  
         if (!empty($resource->get('alias'))) {
            $resource->set('alias',$resource->get('alias').'-'.$resource->get('id'));
            $resource->save();
        }else{
            $resource->set('alias',$resource->get('pagetitle').'-'.$resource->get('id'));
            $resource->save();
        }
    
    }
}
}
Роман
07 января 2023, 13:27
0
В общем, сделал так, работает! Пришлось правда сделать сниппет substr что бы обрезать лишний каталог и слеш на конце из строки пути сервера, а так все норм, но заморочено.

{if (file_exists($_modx->runSnippet("substr", ["input" => $_modx->config.assets_path])~$el.id | resource: 'photo')) AND $el.id | resource: 'photo'}
<img src="{$el.id | resource: 'photo' | pthumb : 'w=660&h=412&zc=1&q=90'}" alt="{$el.pagetitle}"/>
{/if}
Alexey
07 января 2023, 12:15
0
docs.modx.pro/komponentyi/pdotools/parser#%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%BD%D1%8B%D0%B5-%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5

Попробуй $.server['DOCUMENT_ROOT']. Я сам ни разу не использовал, но — судя по мануалу — может сработать