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

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

С нами с 10 февраля 2014; Место в рейтинге пользователей: #131
06 июня 2023, 16:06
+4
я уже пару месяцев как занимаюсь кое-каким проектом для сообщества
интриганы))) сколько уже видел подобных комментариев в последнее время) очень интересно)
30 мая 2023, 21:40
+1
На телефоне все норм, сейчас проверил на одном из сайтов форма отправляется. Ну если что можно на событие touchmove повесить
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;
}