Павел Романов · 03 июля 2023, 10:15 Чтобы убрать атрибуты и заодно удалить слеши у одиночных тегов можно сделать плагин на событие onWebPagePrerender )): <?php if($modx->resource->get('content_type') == 1){ $arr1 = array('type="text/css"', 'type="text/javascript"',' />','/>'); $arr2 = array('','','>','>'); $output = &$modx->resource->_output; $output = str_replace($arr1,$arr2,$output); } Вопросы / Валидность javascript для компонентов MODx 12 +4 2
Сергей · 06 декабря 2022, 15:37 Может кому пригодится. <?php if ($modx->event->name == 'mSyncOnProductOffers') { $remain = json_decode(json_encode($xml->Количество), TRUE); $remain = $remain['0']; $remain_temp = $resource->get('remain'); if ($remain != $remain_temp && $remain_temp != '') { $resource->set('remain', $remain); $resource->save(); } } Вопросы / Плагин на событие mSyncOnProductOffers 1 0 1
Alexey · 09 сентября 2022, 16:09 mSync Не снимает товары с публикации перед выгрузкой. Нужно написать плагин на событие mSyncOnBeforeImport, который это делает. Как-то так: <?php if ($modx->event->name == 'mSyncOnBeforeImport' && $mode == 'catalog') { $query = $modx->newQuery('modResource'); $query->command('update'); $query->where(array('class_key' => 'msProduct', 'published' => 1)); $query->set(array( 'published' => 0 )); $query->prepare(); $query->stmt->execute(); } Вопросы / [mSync / mSklad] Деактивация товаров при выгрузке 5 0 1
Svetlana S · 10 октября 2020, 20:23 Хм, сейчас вспомню) В файле core/components/msync/model/msync/msynccataloghandler.class.php на 1383 строчке добавила в событие mSyncOnPrepareProduct параметр — id товара, его там, вроде, не было: $this->log("Вызвано событие mSyncOnPrepareProduct для товара с uuid={$productData['uuid']}", 1); $response = $this->msync->invokeEvent('mSyncOnPrepareProduct', array( 'data' => $productData, 'parent' => $categoryId, 'properties' => $properties, 'custom_id' => $productId, ));Затем плагин переписала так: $eventName = $modx->event->name; if ($eventName == 'mSyncOnPrepareProduct') { if (!empty($data['images']) && !empty($custom_id)) { $id = (int) $custom_id; $images = $modx->getCollection('msProductFile', ['product_id' => $id]); if (!empty($images)) { foreach($images as $image) { $image->remove(); } } } }Проверяем, есть ли в полученных данных новые картинки у товара, и, если есть хотя бы одна, удаляем старые. Править исходники плохо, но пока получилось только так) Так что при обновлении компонента придется вставлять строчку заново. На сайте с 10 000 товаров все работает. Только, если много товаров, сайт лучше разворачивать на модхосте, с хорошим запасом свободного места) Вопросы / mSync удаление старых картинок товаров 5 0 1
Андрей · 20 июля 2020, 10:12 Была такая же задача, создал в админке новый параметр В параметре указываешь id категории для всех новых товаров. В файле mskladcataloghandler.class.php Для обновления товара и чтобы он остался в категории в которую перенесли Вопросы / Msync и категории 1 0 1
vectorserver · 14 апреля 2020, 19:23 Так проще и быстрее, без обид друг) Код сниппета ParseInsta: <?php //ParseInsta $cacheKey = "insta_".md5($url); $returnCache = $modx->cacheManager->get("$cacheKey"); if(!$returnCache){ $doc = new DOMDocument(); $doc->loadHTMLFile($url); $xpath = new DOMXpath($doc); $sharedData = $xpath->query("//html/body/script[1]")->item(0)->textContent; $str = $sharedData; $modx->cacheManager->set($cacheKey, $str, 7200*60); return $str; } return $returnCache;И далее JSON обрабатываем через JS или конвертуть в массив и использовать в чанках <script> var instaphotos = [[ParseInsta? $url=`https://www.instagram.com/explore/tags/кофесос`]]; //bla bla bla </script> Готовые решения / Вывод фоток с Instagram по тегу или юзеру без токена 8 +11 6
Николай · 17 марта 2020, 12:26 IDx это menuindex. menuindex товару ставится максимальный относительно других товаров этой категории, а не относительно всех товаров. То есть товары из разных категорий могут иметь один и тот же menuindex, а значит сортировка как в админке не получится. Можно или компонентом этим воспользоваться, чтобы расставлять сортировку в категориях индивидуально, либо расставить menuindex товарам глобально, например скриптом: <?php function updateMenuIndex($id) { global $menuindex, $modx; $childsIds = $modx->getChildIds($id,1,array('context' => 'web')); if(!count($childsIds)) return; $q = $modx->newQuery('modResource'); $q->where( ['id:IN' => $childsIds] ); $q->sortby('menuindex', 'ASC'); $result = $modx->getIterator('modResource', $q); foreach($result as $key=>$res) { $menuindex++; $res->set('menuindex', $menuindex); $res->save(); //echo "$menuindex - {$res->pagetitle} ({$res->id})<br>"; updateMenuIndex($res->get('id')); } } updateMenuIndex(0); // id родителя в параметре return "menuindex обновлены у $menuindex ресурсов"; А потом отсортировать товары по menuindex. Вопросы / Как отображать товары в порядке отображения в админке? 6 +1 1
Баха Волков · 06 февраля 2020, 22:07 Не не не, не делайте так, помните или почитайте о DRY. С парсером MODX все понятно, ей сложно помочь, но феном-то полноценный шаблонизатор: {foreach ['receiver', 'phone', 'index', 'region', 'city', 'street', 'building', 'room', 'comment', 'customfield'] as $field} {if $address[$field]?} <tr> <td style="{$style.th};width: 200px; font-weight: 600;">{('ms2_frontend_' ~ $field) | lexicon}: </td> <td style="{$style.th}">{$address[$field]}</td> </tr> {/if} {/foreach} 8 моих строчек против твоих 80-ти Готовые решения / Данные клиента в письме (e-mail). Minishop2. Изменяем чанк tpl.msEmail 9 +12 5
Баха Волков · 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
Сергей · 29 октября 2018, 23:12 Через .htaccess заработало это: RewriteEngine On RewriteRule ^(.*)\/$ $1 [R=301,L] Вопросы / Редирект URL со слэшем в конце на без слэша 7 0 1
Возможно ли реализовать возможность предоплаты за доставку на сайте? Так ради этого мне и нужно это все, чтобы клиент платил сразу при оформлении заказа, чтобы избавить себя от мусорных заявок (когда человек оставляет заявку, а предоплату делать не ...
Редизайн сообщества На больших экранах основной текст статьи я бы сделал 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... Да, планируется. Даже чуть больше, чем просто бонусная система)
В файле core/components/msync/model/msync/msynccataloghandler.class.php на 1383 строчке добавила в событие mSyncOnPrepareProduct параметр — id товара, его там, вроде, не было:
Затем плагин переписала так:
Проверяем, есть ли в полученных данных новые картинки у товара, и, если есть хотя бы одна, удаляем старые. Править исходники плохо, но пока получилось только так) Так что при обновлении компонента придется вставлять строчку заново.
На сайте с 10 000 товаров все работает. Только, если много товаров, сайт лучше разворачивать на модхосте, с хорошим запасом свободного места)
В параметре указываешь id категории для всех новых товаров.
В файле
Для обновления товара и чтобы он остался в категории в которую перенесли
Код сниппета ParseInsta:
И далее JSON обрабатываем через JS или конвертуть в массив и использовать в чанках
А потом отсортировать товары по menuindex.
8 моих строчек против твоих 80-ти
Так ведь намного лучше
RewriteEngine On
RewriteRule ^(.*)\/$ $1 [R=301,L]