Всего 125 351 комментарий

Артур Шевченко
19 мая 2022, 23:07
0
Попробуй так
{set $sort = json_decode(1 | resource : 'field-sort', true)}
{if $sort}
{foreach $sort as $item}
{set $tpl = '@FILE chunks/'~$item.section~'.tpl'}
{$_modx->getChunk($tpl)}
{/foreach}
{/if}
R2m0x94 (Vasily)
19 мая 2022, 18:29
0
Да, вроде log_level стояло значение 3 (INFO), исправил на 1 (ERROR) и всё прошло. Так как INFO это просто оповещение информации о том, что кэш-файл был удалён с сервера.
Артур Шевченко
19 мая 2022, 17:58
+1
Вот msProducts, но те же параметры подходят и для pdoPage. Я про leftJoin если что.
{set $product_sb_category = ('!msProducts' | snippet : [
                                    'parents' => 13,
                                    'resources' => $_modx->resource.id,
                                    'loadModels' => 'linkproducts',
                                    'class' => 'msProduct',
                                    'leftJoin' => [
                                        'Category' => [
                                            'class' => 'lpLink',
                                            'on' => 'msProduct.id = Category.product_id',
                                        ],
                                    ],
                                    'select' => [
                                        'msProduct' => '*',
                                        'Category' => 'Category.block_id, Category.product_id',
                                    ],
                                    'tvPrefix' => '',
                                    'limit' => 0,
                                    'tpl' => '@INLINE {$block_id}',
                                ])}
alex
19 мая 2022, 17:14
0
Да, забыл написать. pdoPage
ewal
19 мая 2022, 16:17
0
Удалось решить эту проблему??????? Такая же байда.
Артур Шевченко
19 мая 2022, 16:03
0
pdoResources может быть? Или xpdo? Что ты имеешь в виду?
alex
19 мая 2022, 15:58
0
Да, то, что нужно, еще бы умудриться на pdoTools переписать запрос )
Артур Шевченко
19 мая 2022, 15:52
0
Понятно. Я что-то такое делал. Собственно проблема в том, что из плагина достаточно проблематично (читай невозможно) вернуть дополнительные данные на фронт, т.е. тебе нужно пересчитывать корзину на ронте отдельно. И я бы воздержался от изменения исходников, а использовал бы возможность добавить свой колбэк.
Артур Шевченко
19 мая 2022, 15:07
0
Понятно. Можно проще. Не писать свой сниппет для отправки ajax а использовать AjaxForm где в параметре snippet передать имя своего сниппета, а в параметре, например, method передать название сниппета из компонента Login. Таким образом сохраняется функционал обоих компонентов и свой js можно не писать. Но я по-прежнему не уверен, что использовать runSnippet оптимальное решение.
Дмитрий
19 мая 2022, 15:05
0
спасибо за комментарий
1) я так и сделал, копирнул default1.js, прописал к нему путь в ms2_frontend_js
подправил, но цена меняется только у одного товара, у которого изменяю количество
2)плагин не подойдет, т к оптовая цена там зависит от количества, а мне нужно от общей сумы
Артур Шевченко
19 мая 2022, 14:58
0
Это прекрасно, а выводить их как? Прикручивать плагин или писать свой вариант для показа уведомлений?
vectorserver
19 мая 2022, 14:48
0
Допилил редирект если он нужен:
Параметры:
  • &id: Уникальный ID, если есть конфликты форм
  • &snippet:Login,ForgotPassword,UpdateProfile,Register
  • &redirect:[[~1]]
  • &chunkForm: имя чанка или html код (Для ForgotPassword,UpdateProfile,Register не используются в параметрах tpl, для этого сделан параметр)

//Login
[[!AjaxLogin_vectorserver? &snippet=`Login`]]

//ForgotPassword
[[!AjaxLogin_vectorserver? 
&snippet=`ForgotPassword` 
&id=`q`
&redirect=`[[~1]]`
]]


<h2>UpdateProfile</h2>
[[!AjaxLogin_vectorserver?
    &snippet=`UpdateProfile` 
    &useExtended=`0`
    &chunkForm=`[[$UProfile]]`
]]
Код сниппета:
<?php
/* @global $modx*/
/** @var TYPE_NAME $scriptproperties */
/** @var TYPE_NAME $snippet */

/** @var TYPE_NAME $id */
$chunkForm = $chunkForm??'';
//Уникальный ID
$id = $id??$modx->resource->id;
$uniqid = "form_".md5($snippet.$id);

//Если нужен редирект 
$redirect = $redirect??false;

//JS TMP
$js = "<script>
    let $uniqid = document.getElementById('{$uniqid}').getElementsByTagName('form')[0];
    
    if($uniqid){
        $uniqid.addEventListener('submit', (e) => {
            
            let redirectTo = '{$redirect}';
        
            fetch($uniqid.action, {
               method: 'POST',
               body: new FormData($uniqid)
            }).then(function (response) {
                // The API call was successful!
                return response.text();
            }).then(function (data) {
                // This is the HTML from our response
                var parser = new DOMParser();
                var doc = parser.parseFromString(data, \"text/html\");
                $uniqid.innerHTML = doc.getElementById('{$uniqid}').innerHTML;
                if(redirectTo){
                    window.location = '{$redirect}';
                }
            }).catch(function (err) {
                // There was an error
                console.warn('Something went wrong.', err);
            });
        
         // on form submission, prevent default
        e.preventDefault();
      });
    }
  
</script>";

$runSnippet = "<div id='{$uniqid}' class='AjaxLogin_vectorserver'>{$modx->runSnippet($snippet)}{$chunkForm}</div>\n{$js}";
return $runSnippet;
Артур Шевченко
19 мая 2022, 14:42
0
Понимаю что надо править default.js
Нет, надо сделать копию и поменять системную настройку, но это если ты выбираешь сложный путь. Я бы выбрал этот компонент и не парился.
Артур Шевченко
19 мая 2022, 14:38
0
Посмотри эти примеры должно помочь.
Артур Шевченко
19 мая 2022, 14:09
0
Твой пример очень похож на вот этот, с той разницей, что пример по ссылке гораздо легче понять.
Николай Савин
19 мая 2022, 14:05
0
Ну тогда уж приводите пример в чистом JS, тем более раз вы показываете в контексте «Как делать правильно»