Константин Ильин

Константин Ильин

С нами с 10 февраля 2014; Место в рейтинге пользователей: #151
Константин Ильин
23 марта 2023, 15:30
+1
буду следить (особенно жду эту фичу с дозагрузкой), понравился компонент, и сам начал пользоваться fetch в скриптах

Js ванилу не так давно начал, поэтому такие огрехи встречаются :)
let a = D.querySelector('.modalTmp form').getAttribute('data-fetchit')
Константин Ильин
23 марта 2023, 08:02
0
Спасибо, «кастомно» получилось

if (FetchIt === undefined){
    D.querySelector('head').append('<script src="/assets/components/fetchit/js/fetchit.js" defer=""></script>');
}
if(!empty(FetchIt)){
    let a = D.querySelector(".modalTmp").querySelector('form').getAttribute('data-fetchit')
    FetchIt.create({
        action: a,
        assetsUrl: "/assets/components/fetchit/",
        actionUrl: "/assets/components/fetchit/action.php",
        inputInvalidClass: "is-invalid",
        customInvalidClass: "",
        clearFieldsOnSuccess: true,
        pageId: hashp,
    });
}
Константин Ильин
22 марта 2023, 12:52
0
Подскажите пожалуйста, если форма подгружается после инициализации FetchIt, например модалку(с вызовом сниппета FetchIt) подгружаю по надобности, как на форму в модалке «инициализировать» FetchIt?
Константин Ильин
19 марта 2023, 15:30
0
Используйте склонения если это проблема
Нужно посмотреть что содержится в $_modx->resource.lang при выборе нескольких языков(массив или строка), оттуда делать подсчет.
— Если массив, то просто {set $countLangs = count($_modx->resource.lang)}
— Если строка, то через explode в массив, а дальше как предыдущем пункте

Когда есть $countLangs пробуем так:
{$countLangs | declension : 'яблоко|яблока|яблок'} // яблок
{$countLangs | declension : 'яблоко|яблока|яблок' : true} // 3 яблока
{$countLangs | decl : 'яблоко,яблока,яблок' : false : ','} // яблоко
Или
{if $countLangs > 1}
{set $l = 'языках'}
{else}
{set $l = 'языке'}
{/if}
статья доступна на {$_modx->resource.lang} {$l}
Константин Ильин
08 марта 2023, 20:16
0
Не за что! В чем была проблема?
Константин Ильин
08 марта 2023, 19:04
0
Тут дальше только выяснять постепенно как я писал вам ранее, выводите в лог или как то логгируйте, что получаете и т.д. сам Пример(!) как у меня работает я дал, ну и в теории повторюсь вы получаете строку с заказом ее надо из json вытащить и получить заказ.

так же в вашем коде два раза вызывается $miniShop2->order->submit()

Так же вы не поменяли $modx на $this->modx
Адаптируйте мой код под ваш самостоятельно
Константин Ильин
08 марта 2023, 18:41
0
у вас видимо какой-то отдельный компонент-класс и как вы его запускаете не совсем понятно, но пользуйтесь тогда для отладки, в разных участках кода
$this->modx->log(1, print_r($result,1));
Смотреть в Журнале ошибок в самом модх.
Начните с самого простого в самом начале функции post()
$this->modx->log(1, print_r('Это я class shopOrder2 запустился',1));
если у вас журнале вообще ничего не выводит и ошибки тоже(и ошибки в серверном логе тоже нет), то скорее всего ваш класс вообще не запускается и с ним не работает modx или вы его вообще не вызываете и т.п.
Константин Ильин
08 марта 2023, 18:11
0
код весь покажите тогда

там еще $pdo->… выше получаю:
$pdo = $modx->getService('pdoTools');
Константин Ильин
08 марта 2023, 16:54
0
не только 'json_response' => 1, а getService тоже смотрите параметры передаю
Константин Ильин
08 марта 2023, 16:44
0
видимо у меня так же, т.е. нужно самостоятельно получить заказ, т.к. далее у меня такой код:

$resp['r'] = $arr = json_decode($miniShop2->order->submit(),1);
if($arr['success'] && $arr["data"]["msorder"] > 0){
    $msOrder = $modx->getObject('msOrder', $arr["data"]["msorder"]);
    $order = $msOrder->toArray();
    $resp['out'] = $pdo->parseChunk('@FILE cart/fastOrderSuccess.tpl',$arr);
}
Константин Ильин
08 марта 2023, 15:55
0
У меня так вызывается
$scriptProperties = [
     'json_response' => 1,
];
/* возможно эта строчка поможет */
$miniShop2 = $modx->getService('minishop2','miniShop2', MODX_CORE_PATH . 'components/minishop2/model/minishop2/', $scriptProperties);

$miniShop2->initialize($modx->context->key, $scriptProperties);
$miniShop2->order->clean();
$miniShop2->cart->clean();
$miniShop2->cart->add($dataForm['id'],($dataForm["count"] ?: 1),$option);
/* ... */
$resp['r'] = json_decode($miniShop2->order->submit(),1);
Константин Ильин
05 марта 2023, 16:55
+1
ну если хотите так же модх, как говорится первая ссылка в гугле
perfkirill.ru/stati/modx/if-else-modx
//Добавить еще условие :or:is=`[]`

[[*gallery-page:is=``:or:is=`[]`:then=`пусто`:else=`есть фотографии`]]
Константин Ильин
05 марта 2023, 10:22
+1
Если Вам, то, что Артур написал сложно, то Вам наверно мимо программирования или читать/учится больше надо.
Ну и на феном переходите, на modx парсере все это еще хуже выглядит с точки зрения программирования.
{set $gallery = $_modx->resource['gallery-page']}
{if $gallery in list ['', '[]'] }
     /* Тут берем галерею из другого ресурса если текущая пустая */
    {set $gallery = 1 | resource: 'gallery-page'}
{/if}

/* доп проверка на пустоту , мало ли на другом ресурсе тоже нет галереи */
{if !($gallery in list ['', '[]'])}
    /* Если не пусто то выводим в цикле */
    {set $gArr = $gallery | fromJSON}
    {foreach $gArr as $item}
        <div>{$item['Ключ в migx']}</div>
    {/foreach}
{/if}
Константин Ильин
14 февраля 2023, 08:31
0
Есть недавно созданный замечательный компонент AjaxFormitLogin
{'!AjaxFormitLogin' | snippet : [
    'form' =>  'updateProfileForm',
    'snippet' => 'FormIt',
    'hooks' => 'AjaxIdentification',
    'method' => 'update',
    'successMessage' => 'Данные сохранены.',
    'clearFieldsOnSuccess' => 0,
    '-spamProtection' => 1
    'validate' => 'email:required:email',
    'validationErrorMessage' => 'Исправьте, пожалуйста, ошибки!',
    'email.vTextRequired' => 'Укажите email.'
]}
Константин Ильин
10 февраля 2023, 09:17
+1
Навскидку так вроде.
Кнопке добавить data-pagetitle
<button  ...  data-pagetitle="{$pagetitle | htmlent}"  ...>
В js
oncLickModal.addEventListener('show.bs.modal', function (e) {
    .....
    // Добавляем эту строку, ставим pagetitle в .modal-title
    oncLickModal.querySelector('.modal-title').innerText =  e.relatedTarget.dataset.pagetitle;

});
Константин Ильин
08 февраля 2023, 12:32
0
Мои извинения.
Как писал Артур выше
Если не заработает оставь параметр tpl пустым — посмотри какие плейсхолдеры доступны
Там поискать ваше поле и какое значение там. Возможно там json или что-то типа того
Константин Ильин
08 февраля 2023, 11:42
0
То что они лежат где-то это одно. Вам же нужно выбрать у каждого ресурса иpображение,
Например открываете ресурс «Лампочки», там вкладка Доп поля и там ваше поле должно отображаться, если вы указали для TV шаблон в котором отображать это поле. В итоге В вашем поле выбираете нужное вам изображение и сохраняете ресурс.
Должно быть заполнено: disk.yandex.ru/i/1E2QED82nhDY8w

Все довольно просто, никаких источников файлов для быстрого старта не надо создавать.

TV
— Ввод Изображение
— Выбрать для какого(их) шаблонов отображать

— Зайти в ресурс(ы) и выбрать/загрузить картинку к нему
Константин Ильин
08 февраля 2023, 11:06
0
Имеется ввиду Вы картинку точно загрузили к ресурсу? Потому что, [[+imagecat]] или [[+tv.imagecat]] должны что-то выдавать, если нет опечаток и изображение загружено.
И у тв лучше сделать так:
Параметр ввода изображение или что-то удобное вам
А параметр вывода вообще не трогать, оставить по умолчанию
Константин Ильин
03 февраля 2023, 14:06
0
а, у вас с другого сайта берется все… понял. Я то полагал, что контекст создан в одной и той же админке и к тому же «сайту» обращаетесь, только домены разные.
Тогда Вам выше подсказали, или гугл. Тут даже дело не в модх.
Константин Ильин
03 февраля 2023, 12:50
0
Может все проще, заменить все вызовы
https://site.ru/assets/fonts/Linearicons-Free.woff2
на
/assets/fonts/Linearicons-Free.woff2
т.е. без явного указания домена и абсолютный путь.