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
Возможно ли реализовать возможность предоплаты за доставку на сайте? Так ради этого мне и нужно это все, чтобы клиент платил сразу при оформлении заказа, чтобы избавить себя от мусорных заявок (когда человек оставляет заявку, а предоплату делать не ...
Редизайн сообщества На больших экранах основной текст статьи я бы сделал 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 убери пробел, тут его преобразовывает в перенос строки):