Илья Уткин · 12 июля 2016, 10:19 Видео-уроков нет. А что значит «привязать к тв-полям»? ТВ-поля использовать вряд ли получится, но интерфейс можно переделать, отредактировав JS-файлы. Вот пара советов: Связи объектовПривязываем сторонние плагины к полям формыДобавляем загрузку файла Новые дополнения и их версии / [customExtra] Создание кастомных объектов 50 +1 2
Николай Загумённов · 08 июня 2016, 23:50 Спасибо Паше за помощь. Открыл для себя Ext.ComponentMgr.onAvailable. Вот такой плагин получился и не надо создавать никаких comments2.grid.js. <?php switch ($modx->event->name) { case 'OnBeforeManagerPageInit': if ($action['namespace'] == 'tickets' && $action['controller'] == 'index') { $modx->controller->addHtml("<script type='text/javascript'> Ext.ComponentMgr.onAvailable('tickets-home-tabs', function() { // Тут можно переопределять все что угодно }); </script>"); } break; } Пошаговые инструкции / Дополнительные поля профиля юзера (не extended) 138 +2 4
Николай Савин · 10 апреля 2016, 11:10 Я для себя решаю задачу примерно так. 1. Организации — это Пользователи. Для их самостоятельной регистрации и последующей правки карточки организации нужно использовать office. 2. Для хранения информации, стандартных полей таблицы пользователей не хватает обычно, поэтому я расширяю таблицу и добавляю любое нужное мне количество полей вот так 3. Для вывода и каталогизации пользователей-организаций используется pdoUsers 4. Для фильтрации пользователей по различным параметрам проще всего использовать mfilter2. Примерную методику я описывал здесь 5. Также вывод делается с помощью методики 6. Ну а объявления — это конечно tickets. Таким образом можно обойтись без дублирования страниц Вопросы / MODX. Сайт - каталог компаний 8 +3 4
Константин · 04 марта 2016, 15:30 Недавно делал на сайте вот так: Вызов сниппета через AjaxForm [[!AjaxForm? &snippet=`QuickOrder` &form=`order.form` ]] И вот сам сниппет QuickOrder <?php $errors = array(); if ( empty( trim( $_POST['total'] ) ) OR !is_numeric( trim( $_POST['total'] ) ) ) { $errors['total'] = 'Вы не заполнили кол-во человек'; } if ( empty( trim( $_POST['phone'] ) ) ) { $errors['phone'] = 'Вы не заполнили телефон'; } if ( !empty( $errors ) ) { return $AjaxForm->error( 'В форме содержатся ошибки!', $errors ); } else { $miniShop2 = $modx->getService( 'minishop2','miniShop2', MODX_CORE_PATH . 'components/minishop2/model/minishop2/', $scriptProperties ); if ( !( $miniShop2 instanceof miniShop2 ) ) { return $AjaxForm->error( 'Ошибка скрипта!' ); } $miniShop2->initialize($modx->context->key, $scriptProperties); $miniShop2->order->add( 'receiver', trim( $_POST['receiver'] ) ); $miniShop2->order->add( 'email', trim( $_POST['email'] ) ); $miniShop2->order->add( 'delivery', 1 ); // id метода доставки $miniShop2->order->add( 'payment', 1 ); // id метода оплаты $miniShop2->cart->add($_POST['id'], $modx->getOption('count', $_POST, 1), $modx->getOption('options', $_POST, array())); return $AjaxForm->success( 'Форма успешно отправлена. Сейчас вы перейдете на страницу оплаты.' ); } JS Callback для отправки формы: $( document ).on('af_complete', function( event, response ) { if( response.success ) { response.form[0].submit(); } }) Вопросы / Покупка товара в один клик 3 +1 7
Василий Наумкин · 01 марта 2016, 09:46 $modx->log(1, print_r(array_keys($scriptProperties),1)); Вопросы / Объекты в событиях msOn[Before]UpdateOrder 6 +1 3
Алексей Шумаев · 01 марта 2016, 02:03 Итак, временное решение — может кому пригодиться. 1. Запуск (Fenom) {$_modx->runSnippet('mSearchForm', [ 'pageId' => 5, 'element' => 'pdoResources', 'limit' => 15, 'tpl' => 'tpl.mSearch2.ac', 'class' => 'modResource' ])} 2. Результат работы mSearchForm в tpl.mSearch2.ac отдаётся сниппету prepareSearchResult: <?php $out = ''; $tpls = array ( 'msCategory' => 'tpl.mSearch2Category.ac', 'modDocument' => 'tpl.mSearch2Document.ac', 'msProduct' => 'tpl.mSearch2Product.ac' ); if(isset($class_key) && isset($id)) { $pdo = $modx->getService('pdoTools'); $tpl = $tpls[$class_key]; $placeholders['pagetitle'] = $pagetitle; $placeholders['description'] = $description; if($class_key == 'msProduct') { $product = $modx->getObject('msProduct', $id); $placeholders['price'] = $product->get('price'); $thumb = $product->get('thumb'); if(empty($thumb)) { $placeholders['thumb'] = '/assets/templates/img/no-photo.png'; } else { $placeholders['thumb'] = $product->get('thumb'); } } $out = $pdo->getChunk($tpl, $placeholders); } return $out; 3. Пример куска чанка для продукта (с использованием Fenom): <div class="img-wrapp"> <img src="{$thumb}" alt="{$pagetitle}"> </div> <div class="search-body"> <span class="item-name">{$pagetitle}</span> {if $decription?} <span class="item-descript">{$description}</span> {/if} </div> <div class="item-price">{$price}<small> руб.</small></div> Вопросы / Необходима помощь в кастомизации mSearch2 9 +1 2
Максим Кузнецов · 29 февраля 2016, 13:46 Для fenom: {set $canonical_url = $_modx->makeUrl($_modx->resource.id, '', '', 'full')} <link rel="canonical" href="{$canonical_url}" /> <meta property="og:url" content="{$canonical_url}" /> Тегами modx: <link rel="canonical" href="[[~[[*id]]? &scheme=`full`]]" /> <meta property="og:url" content="[[~[[*id]]? &scheme=`full`]]" /> Или, например, вот так (не помню для чего, но как-то возникла проблема с предыдущим вариантом, которая решилась нижеописанным примером): [[++site_url]][[*id:isnot=`[[++site_start]]`:then=`[[~[[*id]]]]`]] Вопросы / Почему 404 страница не всегда выбивает? 12 +2 4
Воеводский Михаил · 21 февраля 2016, 19:27 /* Меняю значение опции на полученное */ $o = $modx->newObject('msProductOption', array( 'product_id' => $r->id, 'key' => 'options_length', 'value' => trim($_POST['options_length']) )); $o->save();Не надо так делать. Достаточно проверить существование опции у товара, а выставлять значение опции самому товару. Как минимум, такой механизм я понял из чтения исходников MS 2.2 (с опциями мне еще не приходилось работать). <?php $optionKey = 'options_length'; $optionKeys = $r->getOptionKeys(); if (!in_array($optionKey, $optionKeys) and $option = $modx->getObject('msOption', array('key' => $optionKey))) { $productOption = $modx->newObject('msProductOption'); $productOption->addOne($option, 'Option'); $productOption->addOne($r, 'Product'); } $r->set($optionKey, trim($_POST[$optionKey])); $r->save(); Вопросы / Проблема с сохранением опций товара 21 +1 1
Евгений Шеронов · 15 февраля 2016, 22:44 Вызов на той странице, где хотите всё это видеть: [[pdoResources? &parents=`0` &where=`{"class_key":"msCategory"}` &tpl=`tpl.category.list` ]] И уже в чанке tpl.category.list: [[msProducts? &parents=`[[+id]]` ]] P.S. Подобное решение точно было здесь Вопросы / Вывод всех категорий магазина с товарами 2 0 2
Василий Наумкин · 15 февраля 2016, 21:57 [[!msProducts? &parents=`0` &innerJoin=`{ "OrderProduct": {"class":"msOrderProduct", "on":"msProduct.id = OrderProduct.product_id"}, "Order": {"class":"msOrder", "on":"Order.id = OrderProduct.order_id"} }` &where=`{ "Order.user_id": [[!+modx.user.id]], "Order.status:>": 1 }` &groupby=`msProduct.id` &showLog=`1` ]]Выводим только те товары, которые были оформлены в заказе текущего юзера и статус у заказа «Оплачен» или выше. Можно еще указывать разные условия в &where. Вопросы / Вопрос по miniShop2+Office 6 +1 2
mxApi — быстрый внешний API для MODX Revolution • зафиксировать публичный контракт EndpointInterface / метаданных по semver, чтобы наш провайдер не ломался на обновлениях;Фактически это уже так, beta стоит просто на всякий случа...
Как я использую mxBoard для работы с ИИ-агентами зачем здесь MODXДа собственно ни зачем. Просто Modx рабоатет на любом шаред-хостинге и для меня это самый знакомый стэк. Я рассматривал вариант взять что-то готовое, но счёл развёр...
YaSmartCaptcha - защитите ваши формы от спама умной капчей от Яндекс Вообще не понял о чем речь) В системной настройке service_js сейчас указана ссылка smartcaptcha.cloud.yandex.ru/captcha.js Я предложил очистить эту настройку, тогда компонент н...
mxBackup — обезличенные копии MODX в пару кликов Ещё нет, я там разом почти полтора десятка пакетов выложил модератор, вероятно, а шоке.
Gallery3x 3.4.0 - вставка галерей прямо из визуального редактора (CKEditor и TinyMCE RTE) Здравствуйте. Есть консольный скрипт Вот почитайте: docs.ivan345.com/books/gallery3x/page/import-ms2galleryphp
[mSync] Новая версия синхронизации с 1С Всем привет. В какой то момент начали сыпаться ошибки: Error 23000 executing statement: INSERT INTO `modx_msync_products` (`product_id`, `uuid_1c`) VALUES ...
Checkbox для модального окна Они не отключены, они платные, чтобы писали только те, кому действительно очень надо. Когда бесплатно люди начинают думать, что я им должен.
Вот такой плагин получился и не надо создавать никаких comments2.grid.js.
1. Организации — это Пользователи. Для их самостоятельной регистрации и последующей правки карточки организации нужно использовать office.
2. Для хранения информации, стандартных полей таблицы пользователей не хватает обычно, поэтому я расширяю таблицу и добавляю любое нужное мне количество полей вот так
3. Для вывода и каталогизации пользователей-организаций используется pdoUsers
4. Для фильтрации пользователей по различным параметрам проще всего использовать mfilter2. Примерную методику я описывал здесь
5. Также вывод делается с помощью методики
6. Ну а объявления — это конечно tickets.
Таким образом можно обойтись без дублирования страниц
Вызов сниппета через AjaxForm
И вот сам сниппет QuickOrder
JS Callback для отправки формы:
1. Запуск (Fenom)
2. Результат работы mSearchForm в tpl.mSearch2.ac отдаётся сниппету prepareSearchResult:
3. Пример куска чанка для продукта (с использованием Fenom):
Тегами modx:
Или, например, вот так (не помню для чего, но как-то возникла проблема с предыдущим вариантом, которая решилась нижеописанным примером):
И уже в чанке tpl.category.list:
P.S. Подобное решение точно было здесь