Всего 125 971 комментарий

deleted
11 марта 2022, 10:39
0
Контроллеры, кстати, можно в своей папке размещать. Из документации не совсем очевидно.
В core/config/elements.php прописываем
zoomx()->getLoader()->addPsr4('My\\Controllers\\', MODX_CORE_PATH . 'elements/controllers/');
В routes.php
$router->post('request/{key}', ['\My\Controllers\MyController', 'action']);
В контроллере:
namespace My\Controllers;
use Zoomx\Controllers;
class MyController extends \Zoomx\Controllers\Controller
Prihod
11 марта 2022, 10:37
0
Чанки не обновляются, они один раз создаются если их нет, а дальше ты как обычно с ними работаешь правя если нужно данные в файле из ide или из админки так как они тоже будут сохранены в файл. Единственное что после правки файла из ide нужно чистить кэш сайта или на момент разработки отключить кэширование, поэтому как я уже писал выше в планах все это подружить с gulp и тогда вся работа будет больше автоматизирована
Всеволод
11 марта 2022, 09:22
0
Добрый день!
Подскажите, пожалуйста, есть ли возможность импорта meta-тегов title и description при импорте категорий?
deleted
11 марта 2022, 01:16
0
Насчёт «многие» перегнул, наверное) Вообще из готовых сниппетов использую в основном Formit и pdoTools. Formit не поддерживает (возможно ошибаюсь). Чанки писем в minishop ещё.
Артур Шевченко
11 марта 2022, 00:50
0
Плюс многие сниппеты не работают с файловыми чанками.
А можно подробнее? Какие это многие?
Артур Шевченко
11 марта 2022, 00:43
0
Вот это просто
<input type="number" value="1">
Ну ещё класс надо подключить и экземпляр создать)))
deleted
11 марта 2022, 00:39
0
Ну вот у нас на работе коллеги не пользуются IDE, редактируют код из админки. А так и мне и им удобно будет. Плюс многие сниппеты не работают с файловыми чанками.
Спасибо автору, сам недавно начинал что-то подобное делать, получается доделывать не придётся)
deleted
11 марта 2022, 00:33
+1
По-моему, самое простое решение:
<div x-data="{ qty: 1 }">
    <button @click.prevent="qty--" :disabled="qty < 2">−</button>
    <input type="number" name="count" value="1" x-model="qty" readonly>
    <button @click.prevent="qty++">+</button>
</div>
Используется alpine.js: alpinejs.dev/start-here

В корзине minishop:
<form class="ms2_form" method="post"
    x-data="{ qty: {$item.count} }"
    x-init="$watch('qty', () => { $root.dispatchEvent(new Event('submit', { bubbles: true })) })">
    <input type="hidden" name="key" value="{$item.key}"/>
    <button type="submit" name="ms2_action" value="cart/change" hidden></button>
    <button @click.prevent="qty > 0 && qty--">−</button>
    <input type="number" name="count" value="{$item.count}" x-model="qty" readonly/>
    <button @click.prevent="qty++">+</button>
</form>
Артур Шевченко
11 марта 2022, 00:11
0
Сможете без проблем.
Sergey
10 марта 2022, 17:25
0
Приветствую.
Может уже спрашивали, но спрошу еще раз)
Хочу купить ваше приложение, но у меня сайт пока не тестовом сервере.
Смогу я потом перенести без проблем на боевой и чтобы приложение работало?
Артур Шевченко
10 марта 2022, 14:36
0
А тут самое простое решение, это при навешивании обработчика проверять например css класс af_initialized, а уже после добавить к форме этот класс.
Отличный вариант, жаль сам не додумался. Но надо ли переделывать? Сейчас, как я уже писал, класс работает только с одной формой, потому как я генерирую уникальный селектор.

Это наверное потом, когда вдруг захочешь сделать PR
Я уже скоро захочу, уведомления только прикручу))) Вдруг кому-то ещё надо, чтобы не было jQuery. Или может сделать форк?
Александр Быковский
10 марта 2022, 12:31
0
Спасибо большое!
Есть ли где-нибудь мануал по этим тонкостям?
Баха Волков
10 марта 2022, 12:28
0
Ну вообще запись станет длиннее this.config.someprop против this.someprop, но я доверюсь твоему опыту.
Запись (а точнее доступ к конфигу) станет длиннее, но заметь, с такой записью у тебя как минимум минус несколько строчек в конструкторе, ну и конфиг не будет путаться на первом уровне класса.

Тут отдельная проблема. В конструктор надо передавать уникальный селектор, потому что в противном случае если на странице больше 1 вызова AjaxForm обработчики навешиваются столько раз сколько вызывается сниппет, а это плохо по понятным причинам. И передавать селектор в каждом вызове мне кажется неудобным. Я думаю надо установить селектор по умолчанию и дополнять его меткой времени и тоже самое делать с переданным селектором, чтобы на 100% исключить вероятность дублирования или есть варианты решения получше?
А тут самое простое решение, это при навешивании обработчика проверять например css класс af_initialized, а уже после добавить к форме этот класс.

Это у меня он возвращает true, а если кто-то захочет свою логику, например не отправлять пока не прочитают политику работы с персональными данными?
Теперь понял

Я самоучка, это не оправдание, но что значит пройтись по стандартам не понимаю.
Это наверное потом, когда вдруг захочешь сделать PR
Наумов Алексей
10 марта 2022, 11:57
+1
[[#[[+parent]].alias]]
и
{$_modx->resource.parent | resource : 'alias'}
вызванные «внутри» pdoResources, это разные конструкции.

Первый код — это parent того ресурса, который сейчас обрабатывает pdoResources в цикле.
А во втором коде — это будет всегда parent ТЕКУЩЕГО ресурса, того, который открыт в браузере у пользователя.
Вам нужно сделать так:
{$parent | resource : 'alias'}
Александр Быковский
10 марта 2022, 10:58
0
Я себе уже всю голову сломал с феномом) Вот такой чанк, который обрабатывается pdoResources
<!-- [[#[[+parent]].alias]] -->
<!-- {$_modx->resource.parent | resource : 'alias'}-->

<li data-category="[[#[[+parent]].alias]]">
  <div class="catalog-card">
    {$pagetitle}
  </div>
</li>
Структура такова

В коллекциях лежат ресурсы, мы их выбираем и каждому элементу присваиваем атрибут data-category с алиасом родителя (названием категории)

Вызов pdoResources
{'pdoResources' | snippet: [
    'parents' => $_modx->resource.id,
    'depth' => '3',
    'limit' => '0',
    'tpl'  => '@FILE chunks/painting/catalog_block.tpl',
    'sortby'  =>  'menuindex',
    'sortdir'  =>  'ASC',
    'where' => '{"template":4}'
  ]}
Проблема в том, что вызов
[[#[[+parent]].alias]]
даёт верный результат, а вызов через Fenom выдает алиас страницы, на которой вызывается сниппет: в данном случае catalog

Что я делаю не так?
Спасибо
Miša Bulic
10 марта 2022, 10:05
0
А какая выгода от дополнения по сравнению с обычными файлами pdotools? Есть сравнение? И если я работаю только с IDE? Мне нужно каждый раз админку обновлять, чтобы чанк обновился?
Константин
10 марта 2022, 09:07
0
{($vendor in list [6, 7])? 'Цена по запросу': $price} Работает такая конструкция, со скобками
Константин
10 марта 2022, 09:06
0
Да, спасибо, со скобками заработало!!!
Андрей
10 марта 2022, 02:32
0
Попробуй так:
{($_pls['vendor.name'] in list ['nokia', 'iphone']) ? 'Цена по запросу' : $price}