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

Александр Мельник
20 мая 2022, 10:56
0
Я хочу создать простой отчет с фильтром в менеджере
Что это значит? Вы хотите внутри человека менеджера запихнуть фильтр и бумажный отчет? Это жестоко.
Но если без иронии, то тоже не понятно. Что в вашем понимании «отчет». Отчет чего или кого. Причем тут фильтр?

А ответ Артура следует понимать так — создать что либо в админ панели довольно сложно, вам нужно как минимум хорошо знать сам modx и фреймворк extjs который отвечает за отрисовку интерфейса. Поэтому гораздо проще создать в админке просто ресурс, но снять галочку — опубликован. Внутри этого ресурса, вставляйте какие угодно самописные (или нет) сниппеты, которые создадут нужную вам логику. Такую страницу можно открыть по урлу как любую другую, но изза того, что она неопубликована, видите ее только вы, предварительно авторизовавшись в админке.
Pakos Fakos
20 мая 2022, 09:50
0
что вы имеете в виду под: «я бы сделал отдельный ресурс»? не могли бы вы быть более конкретным с простым примером или ссылкой?
Спасибо
SYAN
20 мая 2022, 01:16
0
решено
запуск сниппета в head
<?php
$getid = $_GET['id'];
if ($getid != '' && is_numeric($getid)) { 
    $url=$modx->makeUrl($modx->getOption('id', $scriptProperties, $modx->resource->get('id')));
    header('HTTP/1.1 301 Moved Permanently');
    header('Location: '.$url.'');
    echo '<meta http-equiv="refresh" content="0;URL='.$url.'"/>'; }
Артур Шевченко
19 мая 2022, 23:44
+1
Ты конечно извини, но что толку от простоты твоей, если она не работает?))) Определи путь в отдельной переменной и уже её вставь в include и всё сработает.
Роман
19 мая 2022, 23:34
0
а так не проще? {$_modx->getChunk('@FILE chunks/'~$item.section~'.tpl')}

Мне кажется ваш вариант будет дольше грузиться

{set $tpl = '@FILE chunks/'~$item.section~'.tpl'}
{$_modx->getChunk($tpl)}

я хочу так в foreach вставить {include 'file:chunks/'~$item.section~'.tpl'} но не работает :(
Артур Шевченко
19 мая 2022, 23:26
0
Про дополнения не знаю. Migxdb можешь попробовать. Но я бы сделал отдельный ресурс доступный только админу с фронта.
Артур Шевченко
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;