Всего 123 809 комментариев

Сергей Карпович
03 февраля 2023, 17:47
0
если использую просто room:required — то все равно ошибка в консоли вылетает, как только валидатор по этому полю убираю — форма работатет
Сергей Карпович
03 февраля 2023, 17:34
0
Подскажите как правильно прописать проверку заполненности множественного поля checkbox?
Вот мое поле из формы:
<div class="pole pole-checkbox">
            <div class="pole-label">Тип помещения <span class="error_floor">[[+fi.error.room]]</span></div>
            <input type="hidden" name="room[]" value="" data-afl-required="room"/>
            <div class="pole-checkbox-item">
                <input id="room_1" type="radio" name="room[]" value="Квартира" [[!+fi.room:FormItIsChecked=`Квартира`]] >
                <label for="room_1">Квартира</label>
            </div>
            <div class="pole-checkbox-item">
                <input id="room_2" type="radio" name="room[]" value="Частный дом" [[!+fi.room:FormItIsChecked=`Частный дом`]]>
                <label for="room_2">Частный дом</label>
            </div>
            <div class="pole-checkbox-item">
                <input id="room_3" type="radio" name="room[]" value="Гостиница" [[!+fi.room:FormItIsChecked=`Гостиница`]]>
                <label for="room_3">Гостиница</label>
            </div>
            <div class="pole-checkbox-item">
                <input id="room_4" type="radio" name="room[]" value="Коммерческое помещение" [[!+fi.room:FormItIsChecked=`Коммерческое помещение`]]>
                <label for="room_4">Коммерческое помещение</label>
            </div>
        </div>
в стиппете указываю валидатор:
'validate' => 'room:minValue=^1^',
'room.vTextMinValue' => 'Выберите значение.'
На выходе валидация не работает, при отправке формы ошибки в консоли
Alexey
03 февраля 2023, 17:20
0
Привет!

Я не разбирался в сессиях компонента, если честно. Но у mSync есть событие mSyncAfterImport, по которому принимается массив выгруженных товаров: новых и обновленных. На мой взгляд, проще написать плагин на это событие, в котором будут прилетать выгруженные товары. И потом их сравнить с существующими на сайте.

Вот пример плагина, который публикует товары, которые были в выгрузке (перед импортом весь каталог снимается с публикации, но это в другом плагине):

if ($modx->event->name == 'mSyncAfterImport') {
    $good_ids = $importResources['product']['updated'];
    $good_ids = array_unique(array_merge($good_ids, $importResources['product']['created']));
    $query = $modx->newQuery('modResource');
    $query->command('update');
    $query->where(array('class_key' => 'msProduct', 'published' => 0, 'id:IN' => $good_ids));
    $query->set(array(
        'published' => 1
    ));
    $query->prepare();
    $query->stmt->execute(); 
    $modx->cacheManager->refresh();
}

Чутка доработать его и всё норм будет)
Артур Шевченко
03 февраля 2023, 16:30
0
Да, там ещё кое-что надо изменить. После
$.post(config['connectorUrl'], params, function (response) {
вставить
if(response.page != response.pages){
            $(config['more']).find('button').attr('disabled', false);
        }else{
            $(config['more']).find('button').attr('disabled', true);
        }
И закомментировать или удалить
if (config['mode'] == 'button') {
                    if (response['pages'] == response['page']) {
                        $(config['more']).hide();
                    }
                    else {
                        $(config['more']).show();
                    }
                }
kudesia
03 февраля 2023, 15:40
0
и вот

joxi.ru/1A5qe74uwwPg9A

из поля не убрались лишние

preg_replace("/[^0-9\/+]/"
или
preg_replace("/[^0-9+]/"

может надо?
Константин Ильин
03 февраля 2023, 14:06
0
а, у вас с другого сайта берется все… понял. Я то полагал, что контекст создан в одной и той же админке и к тому же «сайту» обращаетесь, только домены разные.
Тогда Вам выше подсказали, или гугл. Тут даже дело не в модх.
Алексей
03 февраля 2023, 13:44
0
Добавил в вызов 'frontend_js'=>'[[+assetsUrl]]js/pdopage.js', все заработало. Единственное если кнопкой подгружаешь до последней страницы, то кнопка пропадает, а при возврате при помощи пагинации не появляется.
vit
vit
03 февраля 2023, 13:18
0
Так лежат то они в site.ru/assets/….
Если я с сайта 1.site.ru обращусь к шрифту он его вообще не найдет(
alex87.ru
03 февраля 2023, 13:16
0
И сейчас работает, только конкретно в ресурсе выводится не через +, а через *: [[*createdby:userinfo=`fullname`]]
Алексей
03 февраля 2023, 12:53
0
<div id="pdopage" class="items-product">
								<div class="row rows row-flex">
									{'!pdoPage' | snippet : [
										'element'=>'msProducts',
										'parents'=>$modx->resource->id,
										'depth'=>10,
										'tpl' =>'product.tpl',
										'limit' =>4,
										'maxLimit'=>200,
										'pageLimit'=>10,
										'ajax'=>1,
										'ajaxHistory'=>1,
										'ajaxMode'=>'button',
										'tplPage' =>'@INLINE <a href="{$href}" class="but">{$pageNo}</a>',
										'tplPageActive'=>'@INLINE <a href="{$href}" class="but active">{$pageNo}</a>',
										'tplPageWrapper'=>'@INLINE <div class="pagination">{$pages}</div>',
										'tplPagePrev' =>'@INLINE <li class="control"><a href="{$href}"><</a></li>',
										'tplPageNext'=>'@INLINE <li class="control"><a href="{$href}">></a></li>',
										'tplPageSkip'=>'@INLINE <span>...</span',
										'tplPagePrevEmpty'=>'@INLINE <li class="disabled"><span><<</span></li>',
										'tplPageNextEmpty'=>'@INLINE <li class="disabled"><span>>></span></li>',
										'sortby'=>'{"menuindex":"DESC"}',
										'where'=>'{"template":"6"}'
									]}
								</div>
								<div class="pages">
									[[!+page.nav]]
								</div>
							</div>
Алексей
03 февраля 2023, 12:52
0
Выставил параметр ajaxHistory=1, сейчас пагинации не присваивается класс display: none, то есть отображается и кнопка и постраничная разбивка, но попрежнему работает не корректно
Константин Ильин
03 февраля 2023, 12:50
0
Может все проще, заменить все вызовы
https://site.ru/assets/fonts/Linearicons-Free.woff2
на
/assets/fonts/Linearicons-Free.woff2
т.е. без явного указания домена и абсолютный путь.
Алексей
03 февраля 2023, 12:17
0
Я правильно понял, что надо поменять этот код в файле assets/components/pdotools/js/pdopage.js? Поменял, но ничего не произошло, пагинации присваивается класс display:none; не могу понять где. Но даже если присвоить через css display: block !important; то работает не корректно, если пользуешься кнопкой, а потом пагинацией, то перебрасывает по такой ссылке site.ru/?page=1&pageId=17&hash=caba36b7635ec52390b81ac85612a759468b600c на несуществующую страницу.
vit
vit
03 февраля 2023, 11:28
0
Если вы об этом
<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
</IfModule>
То это не помогло и в ядре пробывал его вписать и в корне
Николай Савин
03 февраля 2023, 11:28
0
Добавляете в PHP код, к которому обращаетесь специальные заголовки через headers.
По идее вот такая запись разрешает доступ из другого домена
Access-Control-Allow-Origin: https://domain.xyz
В некоторых случаях нужно еще добавить правило в конфиг сервера.
Артур Шевченко
03 февраля 2023, 11:12
0
Этого я не знаю, но знают Яндекс и Гугл, спросите там.
Артур Шевченко
03 февраля 2023, 11:04
3
+3
Прям из коробки нельзя, надо немного поправить JS. Вот это
if (config.history) {
                if (typeof(jQuery().sticky) == 'undefined') {
                    $.getScript(config['assetsUrl'] + 'js/lib/jquery.sticky.min.js', function () {
                        pdoPage.initialize(config);
                    });
                    return;
                }
                pdoPage.stickyPagination(config);
            }
            else {
                $(config.pagination).hide();
            }
Заменить на это
$(document).on('click', config['link'], function (e) {
                e.preventDefault();
                var href = $(this).prop('href');
                var key = config['pageVarKey'];
                var match = href.match(new RegExp(key + '=(\\d+)'));
                var page = !match ? 1 : match[1];

                if (pdoPage.keys[key] != page) {
                    $(config['more']).find('button').attr('disabled', false);
                    if (config.history) {
                        if (page == 1) {
                            pdoPage.Hash.remove(key);
                        } else {
                            pdoPage.Hash.add(key, page);
                        }
                    }
                    $this.loadPage(href, config);
                }
            });

            if (config.history) {
                if (typeof(jQuery().sticky) == 'undefined') {
                    $.getScript(config['assetsUrl'] + 'js/lib/jquery.sticky.min.js', function () {
                        pdoPage.initialize(config);
                    });
                    return;
                }
                pdoPage.stickyPagination(config);

                $(window).on('popstate', function (e) {
                    if (e.originalEvent.state && e.originalEvent.state['pdoPage']) {
                        $this.loadPage(e.originalEvent.state['pdoPage'], config);
                    }
                });

                history.replaceState({pdoPage: window.location.href}, '');
            }
И в pdoPage параметру ajaxMode установить значение button.
Павел Романов
03 февраля 2023, 10:13
1
0
Так только цифры останутся:
foreach ($modx->getIterator('modUser') as $user) {
    $profile = $user->getOne('Profile');
    $phone = preg_replace("/[^,.0-9]/", '', $profile->get('phone'));
    $user->set('username', $phone);
    $user->save();
}