DocentBF · 16 февраля 2017, 09:51 2 +1 На примере CSV. 1. Создаем кнопку, например, в верхнем баре: getTopBar: function() { return [{ text: '<i class="icon icon-chevron-up"></i> ' + _('modExtra_items_export'), handler: this.exportCSV, // функция-обработчик кнопки scope: this }] 2. Добавляем виджет-окно импорта с выбором файла: modExtra.window.ImportCSV = function(config) { config = config || {}; this.ident = config.ident || 'modextra'+Ext.id(); Ext.applyIf(config,{ title: _('modextra_items_import') ,id: this.ident ,fileUpload: true ,autoHeight: true ,width: 650 ,url: modExtra.config.connector_url ,action: 'mgr/item/import' // процессор загрузки и обработки файла, находится по пути modExtra/processors/mgr/item/import.class.php ,fields: [ { xtype: 'fileuploadfield', fieldLabel: _('modextra_window_import_file'), allowBlank: false } ] ,keys: [ { key: Ext.EventObject.ENTER ,shift: true ,fn: function() {this.submit() } ,scope: this } ] }); modExtra.window.ImportCSV.superclass.constructor.call(this,config); }; Ext.extend(modExtra.window.ImportCSV,MODx.Window); Ext.reg('modextra-window-import-csv',modExtra.window.ImportCSV);3. Создаете handler кнопки, расширяя grid: Ext.extend(modExtra.grid.Items, MODx.grid.Grid, { windows: {}, importCSV: function (btn, e) { if (!this.windows.ImportCSV) { this.windows.ImportCSV = MODx.load({ xtype: 'modextra-window-import-csv' ,listeners: { 'success': {fn:function(){this.refresh();},scope:this} ,'failure': {fn:function(){console.log("error")}} } }); } this.windows.ImportCSV.fp.getForm().reset(); this.windows.ImportCSV.show(e.target); }, ...4. Создаем процессор импорта (/core/components/modextra/processors/mgr/item/import.class.php): <?php /** * Import */ include_once MODX_CORE_PATH . 'model/modx/processors/browser/file/upload.class.php'; class modExtraImportProcessor extends modBrowserFileUploadProcessor { public $objectType = 'modExtraItem'; public $classKey = 'modExtraItem'; public $languageTopics = array('modExtra'); public function initialize() { $this->setDefaultProperties(array( 'source' => 0, 'path' => 'assets/components/modExtra/files/', )); if (!$this->getProperty('path')) return $this->modx->lexicon('file_folder_err_ns'); return true; } /** {inheritDoc} */ public function process(){ if (!$this->getSource()) { return $this->failure($this->modx->lexicon('permission_denied')); } $this->source->setRequestProperties($this->getProperties()); $this->source->initialize(); $this->source->setProperties(array('basePath'=>'')); if (!$this->source->checkPolicy('create')) { return $this->failure($this->modx->lexicon('permission_denied')); } $success = $this->source->uploadObjectsToContainer($this->getProperty('path'),$_FILES); $file_n = current($_FILES); $file = is_array($_FILES) ? $file_n['name'] : false; if (empty($success) || !$file) { $msg = ''; $errors = $this->source->getErrors(); foreach ($errors as $k => $msg) { $this->modx->error->addField($k,$msg); } return $this->failure($msg); } else { $file = $_SERVER['DOCUMENT_ROOT'].'/'.$this->getProperty('path').$file; if(($handle = fopen($file,"r"))) { while(($data = fgetcsv($handle,null,';'))) { /* Далее код разборки CSV и сохранение нового объекта $rec = $modx->newObject(); $rec->set('field', $data[$n]) $rec->save(); */ } @unlink($file); } } return $this->success(); } } return 'modExtraImportProcessor';Код написан на скорую руку, может быть кто-то поправит?) Вопросы / Знатоки ExtJS подскажите, загрузка файла 3
stas · 28 июля 2016, 10:54 3 0 Хотя я придумал, я просто засовываю принудительно сколько мне нужно товаров и если клиент ввел больше вывожу ваше сообщение $cartArray = $cart->get(); // Массив корзины $cartStatus = $cart->status(); // Состояние корзины $totalCount = $cartStatus['total_count']; // Общее количество товаров в корзине foreach ($cartArray as &$cartProduct) { // Обрабатываем все товары корзины if ($product = $modx->getObject('msProduct', $cartProduct['id'])) { // Получаем объект товара по его ID в корзине $quanity = $product->getTVValue('quantity'); $quanity1 = $cartProduct["count"]; if($quanity1 > $quanity){ $cartProduct['count'] = $quanity; $modx->event->output('Вы пытаетесь положитель больше товаров чем есть в наличии'); } } } $cart->set($cartArray); // Запись нового состояния корзиныСпасибо вам огромное!!! Вопросы / Запретить добавление в корзину 7
Максим Кузнецов · 16 октября 2015, 11:29 3 +3 Задача решается путем реализации 2х составляющих: 1. Js (идентификатор и алерт заменить на подходящие себе): $( ".ms2_form input[name='count']" ).change(function() { $.jGrowl("Минимальное количество товаров для заказа - 5 шт", {theme: 'error', position: 'center'}); $(this).val("5"); }); 2. Плагин на события msOnBeforeAddToCart и msOnBeforeChangeInCart <?php if ($modx->event->name = 'msOnBeforeAddToCart' || $modx->event->name = 'msOnBeforeChangeInCart') { $values = & $modx->event->returnedValues; if ($values['count'] < 5) { $values['count'] = 5; } } — как-то так. Вопросы / Минимальное количество товара в miniShop2 4
Alex Zhuravlev · 13 мая 2015, 11:36 1 +1 Поправил название топика ))) дабы не вводить в заблуждение. Готовые решения / Если не получается зайти в backend (manager) 12
Антон Фомичёв · 17 июля 2014, 13:23 1 0 Вижу два варианта. Первый: 1. У каждой из форм есть атрибут id, а так же тэг <input type="hidden" name="formid" value="[[+значение атрибута id]]">2. Сниппет должен вместе с основным ответом возвращать значение $_POST['formid'] виде {«formid»:«значение»}. 3. Тогда обработчик события выглядит следующим образом: $(document).on('af_complete', function(event,res) { var form = $("#"+res.formid); if(!res.success){ form.find('[name="' + res.key + '"]').addClass('error'); } });Второй: 1. Через гитхаб или как-то по-другому предложить Василию изменить часть кода default.js таким образом: $(document).trigger("af_complete", response, form);2. Если коммит будет принят, то тогда твой скрипт будет выглядеть так: $(document).on('af_complete', function(event,res,form) { var $form = $(form); if(!res.success){ $form.find('[name="' + res.key + '"]').addClass('error'); } }); Новые дополнения и их версии / [AjaxForm] Версия 1.0.2-pl 67
Антон Фомичёв · 16 июля 2014, 10:19 1 0 Я бы предложил что-то такое: $(document).on('af_complete', function(event,res) { if(!res.success){ form.find('[name="' + res.key + '"]').addClass('error'); } });При этом, не забудь определить переменную form (она должна содержать объект jQuery). Ну и твой сниппет должен отдавать json с полями success и key по меньшей мере. Новые дополнения и их версии / [AjaxForm] Версия 1.0.2-pl 67
grasp graspoff · 24 марта 2014, 19:56 3 +1 class myDelivery extends msDeliveryHandler { public function getCost(msOrderInterface $order, msDelivery $delivery, $cost=0) { $totalCostDL=0; $products=$this->ms2->cart->get(); foreach($products as $product){ $costDL=$this->getPrDlCost($product); $totalCostDL += $costDL; } $cost += $totalCostDL; return $cost; }Ну и функция с логикой private function getPrDlCost($product) { $PrDlCost=1000000; $pids = $this->modx->getParentIds($product['id'],1); $PrCategory = $pids[0]; $PrCount = $product[count]; switch ($PrCategory) { case '67': if ($PrCount <= 6) $PrDlCost = 1200; if ($PrCount > 6 && $PrCount <= 15) $PrDlCost = 1700; if ($PrCount > 15 && $PrCount < 25) $PrDlCost = 3900; if ($PrCount >= 25) $PrDlCost = 0; break; .... } Вопросы / MiniShop2. Отдельная доставка для каждой категории 11
Peter Zenin · 01 июня 2013, 07:32 1 0 Извиняюсь, я туплю, нашел где их добавлять, производителей. Просто я пытаюсь дополнительное поле сделать с выпадающим списком как vendor Мне надо чтоб искал из поля в таблице msProducts и подставлял, а если поля нет, то текущий оставлял, чтоб можно было сохранить и добавить. Оказывается vendor нее очень удачный пример для копирования, т.к. там автоматом выставляется ноль, если ничего не выбрано… Даже не представляю по какому примеру сделать автозаполняемое поле из уже существующих значений (чтоб подбирал только разные), а если ничего не выбрано то оставлял текущее. Подскажите с чего можно подсмотреть подобный функционал? Заранее благодарю! Вопросы / MS2: Vendor всегда 0, как добавлять Производителя? 11
MiniShop3 1.11.0 при клике на radio идет пересчет итоговой суммы в 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`; — добавлены ...
[msBonus2] 1.3.0 Бонус-коды, уведомления о сгорании и совместимость с msMultiCurre... Да, планируется. Даже чуть больше, чем просто бонусная система)
FileMan - прикрепление файлов к ресурсам для MODX 3 Добрый день! Может что-то с правами доступа к файлам? Посмотрите логи в modx, в php. С ходу сложно ответить, ранее не было таких случаев.
1. Создаем кнопку, например, в верхнем баре:
2. Добавляем виджет-окно импорта с выбором файла:
3. Создаете handler кнопки, расширяя grid:
4. Создаем процессор импорта (/core/components/modextra/processors/mgr/item/import.class.php):
Код написан на скорую руку, может быть кто-то поправит?)
Спасибо вам огромное!!!
1. Js (идентификатор и алерт заменить на подходящие себе):
2. Плагин на события msOnBeforeAddToCart и msOnBeforeChangeInCart
<?php
— как-то так.
Первый:
1. У каждой из форм есть атрибут id, а так же тэг 2. Сниппет должен вместе с основным ответом возвращать значение $_POST['formid'] виде {«formid»:«значение»}.
3. Тогда обработчик события выглядит следующим образом:
Второй:
1. Через гитхаб или как-то по-другому предложить Василию изменить часть кода default.js таким образом:
2. Если коммит будет принят, то тогда твой скрипт будет выглядеть так:
При этом, не забудь определить переменную form (она должна содержать объект jQuery).
Ну и твой сниппет должен отдавать json с полями success и key по меньшей мере.
Просто я пытаюсь дополнительное поле сделать с выпадающим списком как vendor
Мне надо чтоб искал из поля в таблице msProducts и подставлял, а если поля нет, то текущий оставлял, чтоб можно было сохранить и добавить.
Оказывается vendor нее очень удачный пример для копирования, т.к. там автоматом выставляется ноль, если ничего не выбрано…
Даже не представляю по какому примеру сделать автозаполняемое поле из уже существующих значений (чтоб подбирал только разные), а если ничего не выбрано то оставлял текущее.
Подскажите с чего можно подсмотреть подобный функционал?
Заранее благодарю!