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

Баха Волков
09 марта 2022, 10:04
+3
{if $_pls['vendor.name'] in list ['nokia', 'iphone']}
    Цена по запросу
{else}
    {$price}
{/if}

{$_pls['vendor.name'] in list ['nokia', 'iphone'] ? 'Цена по запросу' : $price}
Баха Волков
09 марта 2022, 09:57
0
Ну и можно по стандартам пройтись :|
Баха Волков
09 марта 2022, 09:53
+3
Опа, а это уже лучше. Пара советов, если позволишь:

1. Можно учитывать, что конфиг может по какой-то причине не будет доступен или он придёт неполным

constructor (config) {
    this.defaults = {
        someProp: true,
        anotherProp: 'long string',
    }

    this.config = Object.assign({}, this.defaults, config);
}

и далее в коде методов ты не будешь париться и обращаться к конфигу так:

this.config.someProp

2. Обычно принято в мире js передавать селектор первым аргументом, а вторым конфиг плагина, это намного удобнее, и я понимаю, что AjaxForm в оригинале такой и ты просто перевел код, но тут заодно можно и это исправить:

class AjaxForm {
    constructor (selector, config) {
        if (!selector) {
            console.error('Нет селектора');
        }
        
        this.defaults = {
            someProp: true,
            anotherProp: 'long string',
        }
    
        this.config = Object.assign({}, this.defaults, config);

        this.forms = document.querySelectorAll(selector);
    }
}

// И теперь можно вызывать и с конфигом и без
new AjaxForm(selector, config);
new AjaxForm(selector);

3. У тебя на 20-ой строке есть странность if (this.beforeSubmit(e.target)) { и судя по коду твой метод beforeSubmit всегда возвращает true, тогда я понятия не имею зачем тут проверка.
Алексей Смирнов
09 марта 2022, 09:49
+1
Проверил fenom, к сожалению есть проблема в передачи параметров к феному.
Поэтому вариант с ним не сработает. (это учту в следующих выпусках).
А пока можно на MODX синтаксисе все сделать.
Для этого нужно в передающем параметре imgs Проверить наличие запятой.
Т.е. если есть ЗПТ, то это более 1й фото, если ЗПТ нет, то одно фото:
[[+imgs:contains=`,`:then=`ЗПТ`:else=`ТЧК`]]
Проверять естественно в чанке и там дописать разные выводы в самих условиях или используя разные чанки, например в чанке главном (по умолчанию это imgsPasteMigxGallery, но вы создайте свой, чтобы при обновлении не затерся поумолчанию) можно написать следующее:
[[$imgsSuperCunks[[+imgs:contains=`,`:then=``:else=`.one`]]]]
Таким образом у вас будет 1 чанк imgsSuperCunks — для более 1 фото.
imgsSuperCunks.one — для одной фотки.
Артур Шевченко
08 марта 2022, 23:02
+3
Вот мой код к которому обращается cron
<?php
$snippet = $argv[1] ?: $_GET['snippet'];
$allowSnippets = array('modstoreParser', 'updatePrice', 'bussinessCenterParser'); // массив разрешённых сниппетов, нужно потому что скрипт доступен с фронта и принимает get-параметры.
if(in_array($snippet, $allowSnippets)){
    require_once 'document/root/path/public_html/config.core.php'; // заменить на свой путь до корня сайта
    require_once MODX_CORE_PATH.'model/modx/modx.class.php';
    $modx = new modX();
    $modx->initialize('web');
    $modx->getService('error','error.modError', '', '');
    echo $modx->runSnippet($snippet);
}
Как создавать задачи для cron можно загуглить поискать в Яндексе.
А как должен выглядеть сниппет, я могу только предполагать. Учитывая, что есть «текстовые цены», наверное нужно будет использовать регулярные выражения. Если в самом простом варианте, без регулярок и модификаций, только основная цена товара, то примерно так
<?php
$coefficient = $modx->getOption('coefficient'); // получаем системную настройку, которую предварительно создали
if($coefficient){
    $products = $modx->getIterator('msProductData'); // получаем все товары  
    foreach($products as $product){
        $oldPrice =  $product->get('price');
        $product->set('price', $price*$coefficient);
        $product->save();
    }
}
Артур Шевченко
08 марта 2022, 21:29
+1
Самый простой способ, наверно, где-то в админке сделать коэффициент и чтобы все существующие цены на него умножались.
Да. И добавь к этому задание в планировщике и сниппет который будет цены менять.
Николай Савин
08 марта 2022, 18:36
0
За заполнение тех или иных таблиц отвечают резолверы. Пишите новый резолвер. Добавлять его никуда не нужно. Они запускаются все подряд при сканировании каталога. Внутри резолвера пишите такой же код заполнения данными, как вы бы писали в админке MODX в консоли.
Для примера таких резолверов можете посмотреть исходный код популярных компонентов.
Stepan
08 марта 2022, 16:00
0
А как заполнить таблицу сразу во время установки дополнения?
Prihod
08 марта 2022, 15:53
0
Кнопку для сканирования в новую версию добавлю. Сейчас из консоли modx можно просто выполнить код

$staticelementslive = $modx->getService('staticelementslive', 'StaticElementsLive');
$staticelementslive->runProcessor('web/element/scan');
А вообще изначально задумка все это дело подружить с gulp в реальном времени создавать и перемещать элементы
Stepan
08 марта 2022, 15:32
0
Народ а как заполнить создаваемую страницу?
так называемый постинстал
Алексей Смирнов
08 марта 2022, 14:53
0
В тини редакторе есть возможность выбирать и чанк для вставки. В CKEditor с этим пока проблемно.
Алексей Смирнов
08 марта 2022, 14:29
0
Вы можете логику для одной фотки реализовать в этом же чанке. Особенно просто это сделать, если включен режим с феном на страницах. С феном это сделать проще всего.
Артур Шевченко
08 марта 2022, 13:01
0
Тогда как альтернативу могу предложить написать плагин на это событие и в нём обрабатывать тэги.
Валерий
08 марта 2022, 12:37
0
Это понятно, но у меня задача сделать так, чтобы ссылка, отображаемая в браузере была вида:
<a href="[[~145]][[+alias]]">[[+tag]]</a>
Но, при этом, компонент корректно обрабатывал вывод тега.
Делал на этом примере itchief.ru/modx/tagger#comment-1361
Артур Шевченко
08 марта 2022, 12:13
0
Я в написании правил для.htaccess не очень силён, но чтобы получить url вида vyvod-tegov/?tag=$1 редирект писать необязательно, можно сразу написать
<a href="[[~145]]?tag=[[+alias]]">[[+tag]]</a>
Николай Савин
08 марта 2022, 09:42
+2
Это уже сделано.
Илья Уткин
08 марта 2022, 05:10
+1
  • mscarthandler.class.php
  • msdeliveryhandler.class.php

  • msorderhandler.class.php
  • mspaymenthandler.class.php
В новой версии для таких файлов создан отдельный каталог.
В качестве идеи, как упростить обновление существующих магазинов. Где-то я такое видел, мне кажется логичным:

Можно добавить в новую версию файлы по старым путям, но в коде файлов делать просто include правильных файлов. И в комментариях пометить эти файлы как deprecated. А потом, в версии 3.1 или 3.2 убалить эти файлы. В итоге если человек обновлялся с версии 2.х до 3.0, у него файлы будут существовать и ничего не сломается, а на новых установках, начиная с 3.1 файлов deprecated не будет.