TITAN-UZ · 06 ноября 2021, 21:44 Рабочий плагин на TinyMCE 4 LINK TinyMCE 5 LINK Базу можете обновить из GITHUB Вопросы / TinyMce RTE выбор изображений только из галереи ресурса 6 +1 2
Kirill A. Rusanov · 04 августа 2020, 08:50 Цель, я так понимаю, упорядочить цену по возрастанию, при этом товары с нулевой ценой показывать в конце. Запрос должен выглядеть так: SELECT * FROM `modx_ms2_products` ORDER BY FIELD(price, 0), `modx_ms2_products`.`price` ASCВызов msProducts примерно такой: {'!msProducts' | snippet : [ 'sortby' => 'FIELD(Data.price, 0), Data.price', 'sortdir' => 'ACS', 'showLog' => 1, ]} Вопросы / Сортировка по цене, 0 в конце 3 +2 3
Роман Л. · 17 июня 2019, 11:13 Работает, если только в сиппете PdoPage заменить строку 244: $modx->regClientStartupHTMLBlock('<link rel="canonical" href="' . $canurl . '"/>');на $modx->regClientStartupHTMLBlock('<link rel="canonical" href="' . $pdoPage->makePageLink($canurl) . '"/>');но при очередном обновлении это все слетит =( Вопросы / Как изменить rel="canonical" в "Человекопонятной навигации", выполненной по инструкции pdoPage? 21 0 3
vectorserver · 17 мая 2019, 11:41 [[pdoResources? твои параметры &where=`{"tvname:LIKE":"%слово%"}` ]] Вопросы / pdoResources - Как вывести ресурс если массив TV схож с TV массивом? 1 +1 1
Баха Волков · 11 февраля 2019, 16:23 Позвольте переписать ваш чанк ajaxForms: {'!AjaxForm' | snippet : [ 'form' => $form, 'hooks' => $hooks !: 'email,FormItSaveForm', 'emailSubject' => $emailSubject !: 'Тема письма', 'emailTo' => $emailTo !: $_modx->config.callback_email, 'validationErrorMessage' => $validationErrorMessage !: 'В форме содержатся ошибки!', 'successMessage' => $successMessage !: '<div class="name">Спасибо</div><p>Ваше сообщение успешно отправлено</p>', 'vTextMaxLength' => $vTextMaxLength !: '<div>Проверьте правильность заполнения</div>', 'vTextMinLength' => $vTextMinLength !: '<div>Проверьте правильность заполнения</div>', 'vTextRequired' => $vTextRequired !: 'Это поле обязательно для заполнения', 'validate' => $validate !: 'name:required', 'formName' => $formName !: 'Имя формы', 'formFields' => $formFields !: 'name,pageId,pagetitle,email,message,file', ]} Так ведь намного лучше Готовые решения / Хватить это терпеть! Или зачем столько чанков в FormIt!? 21 +5 4
Николай · 11 февраля 2019, 16:04 Выложу свой способ управления множеством форм для сниппета ajaxForm, может пригодится. Создаём чанк ajaxForms: {if !$form} {set $form = ''}{/if} {if !$hooks} {set $hooks = 'email,FormItSaveForm'}{/if} {if !$emailSubject} {set $emailSubject = 'Тема письма'}{/if} {if !$emailTo} {set $emailTo = $_modx->config['callback_email']}{/if} {if !$validationErrorMessage} {set $validationErrorMessage = 'В форме содержатся ошибки!'}{/if} {if !$successMessage} {set $successMessage = '<div class="name">Спасибо</div><p>Ваше сообщение успешно отправлено</p>'}{/if} {if !$vTextMaxLength} {set $vTextMaxLength = '<div>Проверьте правильность заполнения</div>'}{/if} {if !$vTextMinLength} {set $vTextMinLength = '<div>Проверьте правильность заполнения</div>'}{/if} {if !$vTextRequired} {set $vTextRequired = 'Это поле обязательно для заполнения'}{/if} {if !$validate} {set $validate = 'name:required'}{/if} {if !$formFields} {set $formFields = 'name,pageId,pagetitle,email,message,file'}{/if} {if !$formName} {set $formName = 'Имя формы'}{/if} {if !$validationErrorMessage} {set $validationErrorMessage = 'В форме содержатся ошибки!'}{/if} [[!ajaxForm? &form=`{$form}` &hooks=`{$hooks}` &emailSubject=`{$emailSubject}` &emailTo=`{$emailTo}` &validationErrorMessage=`{$validationErrorMessage}` &successMessage=`{$successMessage}` &vTextMaxLength=`{$vTextMaxLength}` &vTextMinLength=`{$vTextMinLength}` &vTextRequired=`{$vTextRequired}` &validate=`{$validate}` &validationErrorMessage=`{$validationErrorMessage}` &formName=`{$formName}` &formFields=`{$formFields}` &fieldNames=`{$fieldNames} ` ]] Это единый чанк, в котором вызывается сниппет ajaxForm с необходимыми параметрами. В моём случае каждая отдельная форма — это отдельный чанк. Если эти чанки мало чем различаются, то можно использовать extends из fenom, переписывая лишь изменяющиеся значения, а остальное не трогать. И далее в шаблоне страницы вызов нужной формы: {include 'ajaxForms' form='callback' emailSubject='Обратный звонок' validate='name:required,phone:required' formFields='name,phone,pagetitle' formName='Обратный звонок' } В нём мы подменили значения, передающиеся в чанк ajaxForm. Пример чанка callback с формой: <div style="display: none;" id="{block 'id'}callback{/block}" class="popup"> <div class="title">{block 'title'}Заказать обратный звонок{/block}</div> <div class="desc">{block 'desc'}Оставьте заявку, и мы свяжемся с вами в самое ближайшее время{/block}</div> <form role="form" method="POST" action="[[~[[*id]]]]" enctype="multipart/form-data"> <input type="hidden" name="pagetitle" value="[[*pagetitle]] ([[*id]])"> <input type="text" name="name" value="[[!+fi.name]]" placeholder="Ваше имя" required="required" /> <span class="error error_name">[[+fi.error.name]]</span> <input type="tel" name="phone" value="[[!+fi.phone]]" placeholder="Ваш телефон" required="required" /> <span class="error error_phone">[[+fi.error.phone]]</span> <div class="privacy">Отправляя заявку, Вы соглашаетесь на обработку персональных данных согласно <a href="{29|url}">Пользовательскому соглашению</a></div> <button class="button-yellow" type="submit" value="{md5(rand())}" name="submit">Отправить</button> </form> </div> Если нужно вызвать похожую форму но с другим заголовком и другими параметрами, то создадим чанк question, который наследует чанк callback: {extends 'callback'} {block 'id'}question{/block} {block 'title'}Задать вопрос{/block} {block 'desc'}Задайте свой вопрос, и мы с вами свяжемся{/block} И вызов этой формы в шаблоне страницы: {include 'ajaxForms' form='question' emailSubject='Задать вопрос' validate='name:required,phone:required' formFields='name,phone,pagetitle' formName='Задать вопрос' } Таким образом, для всех форм мы можем задать единые параметры вызова сниппета ajaxForm, и при необходимости перезаписать их. А также под каждую форму либо создать отдельные чанки, либо унаследовать от одного чанка кучу других с индивидуальными параметрами. Дополнительно я скрываю уведомления jgrowl js-скриптом: $(document).on('af_complete', function(event, response) { if (response.success) { $.fancybox.close(); $.fancybox.open({ src : '#popup-success', type : 'inline', opts : { afterShow : function( instance, current ) { // console.info( 'done!' ); } } }); } else { for (var prop in response.data) {} } response.message=''; }); Все уведомления об ошибках показываются под полями форм, в коде span c классом error. А если форма успешно отправлена, то с помощью скрипта выше мы скрываем popup-форму, если она была открыта, и показываем другое popup-окно: <div style="display: none;" id="popup-success" class="popup"> <div class="title">Данные успешно отправлены</div> <div class="success"> <img src="/assets/img/success.png" alt=""> </div> </div> Оно же всплывает и при отправке обычных не popup-форм. Да, насчёт popup-окон, актуально при использовании flexbox3. Готовые решения / Хватить это терпеть! Или зачем столько чанков в FormIt!? 21 +1 4
vrm13 · 26 января 2019, 14:22 Случайно наткнулся на урок от Василия и вот что получилось: <?php $ids = explode(',', $input); $q = $modx->newQuery('msProductData', array('id:IN' => $ids)); $q->limit(0); $q->prepare(); $q->stmt->execute(); $res = $q->stmt->fetchAll(PDO::FETCH_ASSOC); foreach ($res as $v) { $all = $v['msProductData_price']; $c.= str_replace(".00", ",", "$all"); } $arr = explode(',', $c); for($i=1;$i<sizeof($arr);++$i) { $arr[0] += $arr[$i]; } echo $arr[0];теперь {$allprod | unisum} справляется в 1 запрос. какая-то магия. Я мало что понял, но кажется работает Вопросы / Сумма уникальных товаров, купленных пользователем [решено] 3 0 1
Роман · 17 июля 2018, 09:19 Решили вопрос? <?php if (empty($parent)) {$parent = $modx->resource->id;} $pids = array_merge(array($parent), $modx->getChildIds($parent)); $ids = array(); $q = $modx->newQuery('msProduct'); $q->where(array('class_key' => 'msProduct','parent:IN' => $pids,'published' => 1,'deleted' => 0)); $q->select('`msProduct`.`id`'); if ($q->prepare() && $q->stmt->execute()) { $ids = $q->stmt->fetchAll(PDO::FETCH_COLUMN); } $q = $modx->newQuery('msProduct'); $q->leftJoin('msCategoryMember', 'Member', '`Member`.`product_id` = `msProduct`.`id`'); $q->where(array('class_key' => 'msProduct','Member.category_id:IN' => $pids,'published' => 1,'deleted' => 0)); $q->select('`msProduct`.`id`'); if ($q->prepare() && $q->stmt->execute()) { $ids2 = $q->stmt->fetchAll(PDO::FETCH_COLUMN); if (!empty($ids2)) { $ids = array_unique(array_merge($ids, $ids2)); } } return count($ids); Вопросы / Вывод количества товаров в minishop2 5 0 3
Баха Волков · 15 июля 2018, 09:01 Ссылку получать нужно так: [[~id ресурса]] {id ресурса | url} // Прямое указание id ресурса [[~2]] {2 | url} // Динамичное указание id ресурса [[~[[+id]]]] {$id | url} [[~[[*id]]]] // Вдруг нужна циклическая ссылка :) {$_modx->resource.id | url} // Вдруг нужна циклическая ссылка :) // ну а если ваш плейсхолдер [[!+gl.current.data.resource]] возвращает именно id, то [[~[[!+gl.current.data.resource]]]] {var $myplace = $_modx->getPlaceholder('gl.current.data.resource')} // Вдруг еще понадобится {$myplace | url} // Кстати, для получения полей есть еще FastField [[#id ресурса.поле или даже тв которое нужно вывести]] {id ресурса | resource : 'поле или даже тв которое нужно вывести'} // Пример [[#1.pagetitle]] // Получить pagetitle у ресурса с id = 1 {1 | resource : 'pagetitle'} Как получить родителя по id? [[*parent]] // На странице ресурса {$_modx->resource.parent} [[+parent]] // В чанках вывода {$parent} [[#[[!+gl.current.data.resource]].parent]] // Тот случай когда нужно получить id по плейсхолдеру {$_modx->getPlaceholder('gl.current.data.resource') | resource : 'parent'} [[pdoField? &id=`[[!+gl.current.data.resource]]` &field=`parent`]] // Ну или через pdoField {var $myplace = $_modx->getPlaceholder('gl.current.data.resource')} {$myplace | resource : 'parent'} Для корректности, вашем случае нужно поступить вот так: [[~[[#[[!+gl.current.data.resource]].parent]]]] {$_modx->getPlaceholder('gl.current.data.resource') | resource : 'parent' | url} // или [[~[[pdoField? &id=`[[!+gl.current.data.resource]]` &field=`parent`]]]] {var $myplace = $_modx->getPlaceholder('gl.current.data.resource')} {$myplace | resource : 'parent' | url} UPD Забыл совсем про uri Если, что в поле uri хранится ссылка на страницу, но никак не в alias Вопросы / Как получить родителя по id 6 0 4
Василий Столейков · 13 июля 2018, 18:58 Постобработка результата должна сработать. Пример на Fenom (перед br убери пробел, тут его преобразовывает в перенос строки): {$publishedon|dateago:'{"dateNow":0, "dateFormat":"d F Y, H:i"}'|replace:', ':',< br>'} Вопросы / DateAgo: как перенести часы и минуты создания материала на следующую строку? 5 +1 3
Возможно ли реализовать возможность предоплаты за доставку на сайте? В любом случаем стандартный флоу минишоп2 рассчитан на оплату по ссылке, т.е. чтобы получить информацию об оплате, нужно чтобы заказ существовал. Чтобы сделать иначе, нужно использ...
Редизайн сообщества На больших экранах основной текст статьи я бы сделал 18 px. Да и текст комментариев можно таким сделать. Для меня лично 16 — мелковато на больших экранах (в комментариях вообще 15 ...
MiniShop3 1.11.0 при клике на radio идет пересчет итоговой суммы в orderUI, в зависимости от способов(оплаты доставки) я так поняла. попробуй код запуска события поставить ниже чем orderUI, после
ImageOptimizer - WebP/AVIF и responsive <picture> для MODX 3 Дополнение доступно modstore.pro/packages/photos-and-files/imageoptimizer
Localizator3 для MODX 3: перевод полей и TV без отдельного context на язык, Vue 3 + PrimeV... Добавил localizator3_default_language
msInShopNotify Начиная с версии 3.0.0-beta добавлена поддержка MiniShop3 Минимальные требования: PHP 8.4 MODX 3.2 MiniShop3
MaxNotify Обновление 1.2.0-pl (03.07.2026) — добавлены уведомления о заявках FormIt через hook-сниппет `maxNotifyFormIt`; — добавлены уведомления о заявках SendIt через hook-...
[msBonus2] 1.3.0 Бонус-коды, уведомления о сгорании и совместимость с msMultiCurre... Да, планируется. Даже чуть больше, чем просто бонусная система)
TinyMCE 4 LINK
TinyMCE 5 LINK
Базу можете обновить из GITHUB
Запрос должен выглядеть так:
Вызов msProducts примерно такой:
на
но при очередном обновлении это все слетит =(
Так ведь намного лучше
Создаём чанк ajaxForms:
Это единый чанк, в котором вызывается сниппет ajaxForm с необходимыми параметрами.
В моём случае каждая отдельная форма — это отдельный чанк. Если эти чанки мало чем различаются, то можно использовать extends из fenom, переписывая лишь изменяющиеся значения, а остальное не трогать.
И далее в шаблоне страницы вызов нужной формы:
В нём мы подменили значения, передающиеся в чанк ajaxForm.
Пример чанка callback с формой:
Если нужно вызвать похожую форму но с другим заголовком и другими параметрами, то создадим чанк question, который наследует чанк callback:
И вызов этой формы в шаблоне страницы:
Таким образом, для всех форм мы можем задать единые параметры вызова сниппета ajaxForm, и при необходимости перезаписать их. А также под каждую форму либо создать отдельные чанки, либо унаследовать от одного чанка кучу других с индивидуальными параметрами.
Дополнительно я скрываю уведомления jgrowl js-скриптом:
Все уведомления об ошибках показываются под полями форм, в коде span c классом error. А если форма успешно отправлена, то с помощью скрипта выше мы скрываем popup-форму, если она была открыта, и показываем другое popup-окно:
Оно же всплывает и при отправке обычных не popup-форм. Да, насчёт popup-окон, актуально при использовании flexbox3.
теперь {$allprod | unisum} справляется в 1 запрос. какая-то магия. Я мало что понял, но кажется работает
Как получить родителя по id?
Для корректности, вашем случае нужно поступить вот так:
UPD
Забыл совсем про uri
Если, что в поле uri хранится ссылка на страницу, но никак не в alias
Пример на Fenom (перед br убери пробел, тут его преобразовывает в перенос строки):