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

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

С нами с 10 февраля 2014; Место в рейтинге пользователей: #151
Константин Ильин
25 мая 2023, 11:16
0
в вашем исходном коде, в название события есть пробел в начале, оно раньше не запускалось.
case ' OnBeforeDocFormSave':
так же строчка $words = $res->getTVValue('words'); может вернуть уже готовый массив и не надо его вытаскивать из json, как я ранее писал надо смотреть что там возвращает. Вот так:
$words = $res->getTVValue('words');
$modx->log(1, print_r($words,1));
Потом смотреть в журнале ошибок модх
Константин Ильин
24 мая 2023, 14:34
+1
Сам код тоже можно улучшить, я так понимаю у вас там одни и те же действия, можно как функцию сделать, а так же switch позволяет вот так:
<?php
switch ($modx->event->name) {
        case 'OnDocPublished':
        case 'OnBeforeDocFormSave':
        case 'OnDocFormSave':
            if ($resource->get('template') == 24 && !$resource->get('content')) $resource->set('published', 0);
            $res = $modx->getObject('modResource', id_ресурса_где_вбиты_слова);
            $words = $res->getTVValue('words'); // тут получить слова, распарсить строку, смотря что там вернет.
            // еще проще в php файл записать эти слова и подключать через include
            
            $content = $resource->get('content');
            $pattern = '/(?:' . join('|', $words) . ')/i';
            $content = preg_replace($pattern, '', $content);
            
            $resource->set('content', $content);
            $resource->save();
        break;
              
}
Константин Ильин
23 мая 2023, 17:05
0
примерно так
{'!mSearchForm' | snippet : [
    ...
    'class'=>'msProduct',
    'element'=>'msProducts',
    'includeThumbs' => 'tiny',
    ...
]}
в чанке
{if $tiny?}
    <img src="{$tiny}" alt="{$pagetitle}" title="{$pagetitle}"/>
{else}
    <img src="{'' | phpthumbon : 'w=40&h=40' }" alt="{$pagetitle}" title="{$pagetitle}"/>
{/if}
Константин Ильин
17 мая 2023, 11:47
0
Баха, подскажи пожалуйста, что-то никак не соображу как подключить свой файловый сниппет, такие вызовы не срабатывают
'snippet' => '@FILE snippets/snippet.php',
/* или */
'snippet' => 'file:snippets/snippet.php',
Причем для Формы файловая «ссылка» срабатывает
'form' => '@FILE chunks/forms/zayavka.form.tpl'
Константин Ильин
08 мая 2023, 18:02
+1
Примерно так
<? 
where => '{"Data.price:>=": 20000 ,"AND:Data.price:<=": 11122990}'
Константин Ильин
28 апреля 2023, 10:00
+1
Если вкратце у меня работает так (Подсмотрено у Артур Шевченко, спасибо ему)
1. тоже генерируется рандомная строка
2. тоже проверяется через contains
3. и полю nobot эта рандомная строка присвоится только(!) при наведении на форму, а у вас как я понял сразу.

У меня полет нормальный
{set $secret = md5(rand(0,999999999))}
{'!AjaxForm' | snippet :[
    ....
    'secret' => $secret ,
    'validate' => 'vscval:contains=^'~$secret~'^'
    ....
]}

//В форме
<input type="hidden" name="vscval" style="display:none" data-vscval="{$_pls['secret']}">

//Js
function watchForms(){
    if(document.querySelector('form')){
        document.querySelectorAll('form').forEach((ff) => {
            ff.addEventListener('mousemove', (e) => {
                if(ff.querySelector('input[name="vscval"]')){
                    let inpSecret = ff.querySelector('input[name="vscval"]'),
                        inpSecretData = inpSecret.getAttribute('data-vscval');
                    if(inpSecret.value == ''){
                        inpSecret.value = inpSecretData;
                    }
                }
            });
        });
    }
}
watchForms()
Константин Ильин
28 апреля 2023, 08:59
0
Оо здравствутйе! Я думал вы пропали совсем и даже сильно не надеялся на ответ)

Тенденция такая сейчас, что все компоненты переходят на чистый js. Меня тоже сподвигло перейти на чистый js, около полугода пишу. В начале было не очень) Ну и помимо тендеции это лишняя подключаемая библиотека, например у меня на сайте нигде нет jQuery и тут его придется подключить.
Версия что сейчас в репозитории меня многим не устраивает и выпилить джеквери и переделать запрос по плиточкам по факту ничего кардинально не изменит.
Расскажите что не так и какие планы в целом?

мне примерно через месяц понадобится msOptionsPrice2, и не хотелось бы попасть в ситуацию когда купил msOptionsPrice2 и на след день вышла msOptionsPrice3.

И в целом для магазина три основных компонента, miniShop2, mSearch2, msOptionsPrice2. Если miniShop2 развивается нет нет, то последние два «отстают», извините меня за душноту опять же оба подключают jQuery.
Константин Ильин
27 апреля 2023, 21:09
0
Приветствую!
хотел бы узнать Володя @Володя больше не занимаетесь развитием/улучшением msOptionsPrice2?
вопросы такие:
— уход от jQuery
— по каждому товару из плитки запрос на сервер, лучше было бы один большой запрос
Константин Ильин
25 апреля 2023, 15:38
0
Подскажите почему такая ссылка срабатывает на главной? т.е. не выдает 404

minishop2.com/index.php/zapchasti
art-sites.ru/index.php/zapchasti

и как это лечить?
Константин Ильин
18 апреля 2023, 11:23
0
1. Да, все по примеру modstore.pro/packages/utilities/recaptchav3
2. contactform — произвольная строка, что хотите, главное что бы отличалось
Константин Ильин
18 апреля 2023, 09:46
0
1. Код формы перенести в чанк
2. rcv3Action прописывается у вызова AjaxForm
[[!AjaxForm?
    ...
    &rcv3Action=`contactform` 
    ...
]]
3. проверить работает ли, можно инспектором кода в браузере(F12 в хроме), выдало ли Вам что-то вызов rcv3_html
Константин Ильин
06 апреля 2023, 16:28
0
Странно, видимо как-то надо еще подключать
// попробовать так вызывать, указать явно PDO::LOG_LEVEL_ERROR
$this->modx->log(xPDO::LOG_LEVEL_ERROR, '1-1');

// тут я пальцем в небо, какие из этих строчек может помогут, но сначала то что выше написал попробуйте
$this->modx->getService('error','error.modError');
$this->modx->setLogLevel(xPDO::LOG_LEVEL_ERROR);

ну как вариант еще в файл сохранять
<?
file_put_contents(MODX_ASSETS_PATH.'log.txt', print_r('1-1',1), FILE_APPEND | LOCK_EX);
Константин Ильин
06 апреля 2023, 05:58
0
Залоггируйте каждый if используя
$this->modx->log(1, print_r('переменная или строка/этап',1))
Чтобы посмотреть куда заходит код и что он получает

//Например этот участок кода

if ($this->config['json_response']) {
    /** Вот мои изменения ниже */
    $success_page = $this->modx->getOption('ms2_order_success_page');
    $this->modx->log(1, print_r($success_page,1))
    if(is_numeric($success_page)) {
        if ($this->modx->getCount('modResource', array('id'=>$success_page,'published' => true,'deleted' => false))) {
            $this->modx->log(1, print_r('1-1',1))
            $url = $this->modx->context->makeUrl($success_page);
            return $this->success('', array('redirect' => $url.'?msorder='.$order->get('id')));
	}
    }
    $this->modx->log(1, print_r('1-2',1))
    return $this->success('', ['msorder' => $msOrder->get('id')]);
}
$this->modx->log(1, print_r('2-1',1))
$redirect = $this->modx->context->makeUrl(
    $this->modx->resource->id,
    ['msorder' => $msOrder->get('id')]
);
$this->modx->log(1, print_r('2-2'.$redirect,1))
$this->modx->sendRedirect($redirect);
А так у меня недавно была проблема с редиректом, но пока отложилась эта проблема, может что-то поменялось в обновлениях нынче раз не у меня одного проблема появилась.
Константин Ильин
04 апреля 2023, 19:08
0
все он ищет нормально, надо просто донастроить(в настройках добавить article:1) и запустить переиндексацию.
Константин Ильин
30 марта 2023, 07:02
+1
Если у вас свежая версия easycomm, то у него есть скрипты не требующие сторонних зависимостей:
Внимание! В версии 1.11.4-pl (15.02.2022) добавлен файл скриптов /assets/components/easycomm/js/web/ec.js, не требующий зависимостей в виде jQuery и jquery.form. Вы можете указать этот файл в настройках компонента.
Смотрите документацию компонента
Константин Ильин
28 марта 2023, 08:35
1
0
Когда то помогло решение через плагин на событие msOnChangeOrderStatus.
вот пример
switch ($modx->event->name) {
    case 'msOnChangeOrderStatus':
    // тут нужно получить ваш плейсхолдер sd.email и присвоить emailManagers , вместо тестовой строки
    $emailManagers= 'test@test.ru,tst@ee.ru';
    
    // тут присваиваем новые емайлы
    $modx->setOption('ms2_email_manager', $emailManagers); 
    
    // так же можно учитывать статусы писать какую то логику если надо
    if ($status != 1) {
        $modx->setOption('ms2_email_manager', $emailManagers); 
    }
    break;
}
Константин Ильин
24 марта 2023, 06:49
0
Дайте пожалуйста наводку. Ситуация такая
— minishop2 4.0.0 (обновлялись с 2.5)
— возможно это критично, /components/minishop2/js/web/default_custom.js и наверняка от 2.5 версии.
— есть кастомная платежка, лежит в папке components/minishop2/custom/payment/rbs.class.php

В ней реализован метод send, в конце такие строчки:
if (!class_exists('msPaymentInterface')) {
    require_once dirname(dirname(dirname(__FILE__))) . '/handlers/mspaymenthandler.class.php'; ///model/minishop2/mspaymenthandler.class.php
}



 public function send(msOrder $order)
    {
......
    $response = curl_exec($curl);
    $response = json_decode($response, true);
    
    curl_close($curl);
    file_put_contents(MODX_ASSETS_PATH.'rbs.txt', '-------', FILE_APPEND);
    
    if ($this->config['logging']) {
        $this->modx->log(modX::LOG_LEVEL_ERROR, '[ms2:rbs] Метод ' . $method . '  gateway request: ' . print_r($data, 1) . ' gateway response:' . print_r($response, 1));
    }
    return $response;
}
При оформления заказа file_put_contents и this->modx->log (при включенном логировании) — не отрабатывают, т.е. данный метод send вообще не запускается.

Так же если сделать alert в callbacks.submit.response.success
disk.yandex.ru/i/as4oZIV5VbkrsQ
Видно, что нет redirect, отсюда и не перенаправляет на платежку.

Если же сделать так:
$o = $modx->getObject('msOrder', 1300);
if ($payment = $modx->getObject('msPayment', array('id' => $o->get('payment'), 'active' => 1))) {
    $response = $payment->send($o);
    if (is_array($response)) {
        $response = json_encode($response, true);
    }
    exit($response);
}
То все отрабатывает и дает ссылку.

Подскажите почему может не запускаться класс оплаты при оформлении с фронта?