Андрей · 05 января 2019, 16:27 3 0 ох, давно это было… я может что-то еще там менял. вот рабочий итог [[!FormIt? &pdfTpl=`tpl.PDF1` &hooks=`formit2file, SendFilePDF, redirect` &author=`www.ru` &title=`Заявка` &emailTpl=`sentEmailTpl` &validate=`contact_email:required` &store=`1` &redirectTo=`108` ]]formit2file <?php // initialize output; $output = true; $counter = 1; // valid extensions $ext_array = array('jpg', 'png', 'gif', 'JPG', 'zip', 'rar', '7z', 'rar5'); // create unique path for this form submission $uploadpath = 'assets/pdf/'; // get full path to unique folder $target_path = $modx->config['base_path'] . $uploadpath; // get uploaded file names: $submittedfiles = array_keys($_FILES); // loop through files foreach ($submittedfiles as $sf) { // Get Filename and make sure its good. $filename = basename( $_FILES[$sf]['name'] ); // Get file's extension $ext = pathinfo($filename, PATHINFO_EXTENSION); $ext = mb_strtolower($ext); // case insensitive // is the file name empty (no file uploaded) if($filename != '') { // is this the right type of file? if(in_array($ext, $ext_array)) { // clean up file name and make unique $filename = $counter . '.' . $ext; $filename = str_replace(' ', '_', $filename); // spaces to underscores $filename = date("G-i-s_") . $filename; // add date & time // full path to new file $myTarget = $target_path . $filename; // create directory to move file into if it doesn't exist mkdir($target_path, 0755, true); // is the file moved to the proper folder successfully? if(move_uploaded_file($_FILES[$sf]['tmp_name'], $myTarget)) { // set a new placeholder with the new full path (if you need it in subsequent hooks) $myFile = $uploadpath . $filename; $hook->setValue($sf,$myFile); // set the permissions on the file if (!chmod($myTarget, 0644)) { /*some debug function*/ } } else { // File not uploaded $errorMsg = 'There was a problem uploading the file.'; $hook->addError($sf, $errorMsg); $output = false; // generate submission error } } else { // File type not allowed $errorMsg = 'Type of file not allowed.'; $hook->addError($sf, $errorMsg); $output = false; // generate submission error } // if no file, don't error, but return blank } else { $hook->setValue($sf, ''); } $counter = $counter + 1; } return $output;SendFilePDF <?php $fields = $hook->getValues(); //поля из формы $NF = $fields['filesToUpload'];//получаем имя и путь загруженного файла $fields['filesToUpload'] = str_replace('assets/pdf/','',$fields['filesToUpload']); $mail_z = $fields['contact_email']; $message = $modx->getChunk('sentEmailTpl', $fields); //формируем PDF $pdo = $modx->getService('pdoFetch'); $pdfTpl = $modx->getOption('pdfTpl', $formit->config, '', true); $content = $pdo->getChunk($pdfTpl, $fields); $config = array(); $config = array_merge($config, $fields, array( 'content' => $content, 'author' => $author, 'title' => $title, )); // формируем ссылку на PDF $result = $modx->runSnippet('PdfCreate', $config); $modx->getService('mail', 'mail.modPHPMailer'); $modx->mail->set(modMail::MAIL_BODY, $message); $modx->mail->set(modMail::MAIL_FROM, $modx->getOption('emailsender')); $modx->mail->set(modMail::MAIL_FROM_NAME, $modx->getOption('site_name')); $modx->mail->set(modMail::MAIL_SUBJECT, 'Поступила заявка'); $modx->mail->address('to', 'xxx@gmail.com'); $modx->mail->address('to', 'xxx@mail.ru'); $modx->mail->address('to', $mail_z); $modx->mail->address('reply-to', $modx->getOption('emailsender')); $modx->mail->attach($modx->getOption('base_path').'assets/pdf/'.$result.'.pdf'); $modx->mail->attach($modx->getOption('base_path').$NF); $modx->mail->setHTML(true); if (!$modx->mail->send()) { $modx->log(modX::LOG_LEVEL_ERROR,'An error occurred while trying to send the email: '.$modx->mail->mailer->ErrorInfo); } $modx->mail->reset(); return true;PdfCreate <?php $date = date('Y-m-d_H-i-s', time()) . '_' .rand(1, 100); $corePath = $modx->getOption('pdfresource.core_path', null, $modx->getOption('core_path') . 'components/pdfresource/'); $pdfresource = $modx->getService('pdfresource', 'PDFResource', $corePath . 'model/pdfresource/', array( 'core_path' => $corePath )); $content = $modx->getOption('content', $scriptProperties, '', true); $title = $modx->getOption('title', $scriptProperties, '', true); $author = $modx->getOption('author', $scriptProperties, '', true); $aliasPath = MODX_ASSETS_PATH . 'pdf/'; $site_url = $modx->getOption('site_url'); // настройки PDFResource (подробнее почитать здесь: http://jako.github.io/PDFResource/usage/) $pdfresource->initPDF(array( 'mode' => 'utf-8', 'format' => 'A4', 'defaultFontSize' => intval(13), 'defaultFont' => '', 'mgl' => intval(30), // margin left 'mgr' => intval(10), // margin right 'mgt' => intval(30), // margin top 'mgb' => intval(10), // margin bottom 'mgh' => intval(10), // margin header 'mgf' => intval(10), // margin footer 'orientation' => 'P', // ориентация PDF 'customFonts' => '[]', )); $pdfresource->pdf->SetTitle($title); $pdfresource->pdf->SetAuthor($author); $pdfresource->pdf->SetCreator($modx->getOption('site_url')); $pdfresource->pdf->WriteHTML($content, 2); $file_name = $date; $pdfresource->pdf->Output($aliasPath . $file_name . '.pdf', 'F'); return $file_name; Вопросы / Как отправить файл на указанный мейл через formit? 21
Евгений Борисов · 22 октября 2018, 07:01 3 +5 SELECT * FROM modx_site_content ORDER BY IF(pagetitle REGEXP "^[А-Яа-я]", 0, 1), pagetitle Вопросы / Как сделать сортировку вначале кирилицу потом латиницу? 5
Володя · 19 октября 2018, 15:29 1 +1 Добрый день. Предусмотренного варианта нет, можно например использовать уведомления minishop <script> $(document).ready(function () { if (typeof msFavorites != 'undefined' && typeof miniShop2 != 'undefined') { msFavorites.addMethodAction('success', 'name_action', function(){ miniShop2.Message.initialize(); var self = this; if (self.data && self.data.method == 'add') { miniShop2.Message.success('add'); } if (self.data && self.data.method == 'remove') { miniShop2.Message.info('remove'); } }); } }); </script> Новые дополнения и их версии / [msFavorites] - апгрейд компонента. 58
Сергей Шлоков · 17 октября 2018, 19:13 1 +2 Вот так. Вопросы / Как вывести ресурсы порциями по два? 3
Евгений Борисов · 05 сентября 2018, 14:12 3 0 DatabaseCustomURL http://www.rfxn.com/downloads/rfxn.ndb DatabaseCustomURL http://www.rfxn.com/downloads/rfxn.hdb DatabaseCustomURL http://ftp.swin.edu.au/sanesecurity/junk.ndb DatabaseCustomURL http://ftp.swin.edu.au/sanesecurity/phish.ndb DatabaseCustomURL http://ftp.swin.edu.au/sanesecurity/rogue.hdb DatabaseCustomURL http://ftp.swin.edu.au/sanesecurity/foxhole_filename.cdb DatabaseCustomURL http://ftp.swin.edu.au/sanesecurity/foxhole_generic.cdb DatabaseCustomURL http://ftp.swin.edu.au/sanesecurity/foxhole_js.cdb DatabaseCustomURL http://ftp.swin.edu.au/sanesecurity/badmacro.ndb DatabaseCustomURL http://ftp.swin.edu.au/sanesecurity/scam.ndb DatabaseCustomURL http://ftp.swin.edu.au/sanesecurity/sanesecurity.ftm DatabaseCustomURL http://ftp.swin.edu.au/sanesecurity/sigwhitelist.ign2 DatabaseCustomURL http://cdn.malware.expert/malware.expert.ndb DatabaseCustomURL http://cdn.malware.expert/malware.expert.hdb DatabaseCustomURL http://clamav.bofhland.org/bofhland_cracked_URL.ndb DatabaseCustomURL http://clamav.bofhland.org/bofhland_malware_URL.ndb DatabaseCustomURL http://clamav.bofhland.org/bofhland_malware_attach.hdb DatabaseCustomURL http://clamav.bofhland.org/bofhland_phishing_URL.ndbТуда же Вопросы / Заражения продолжаются и после обновления до 2.6.5 10
Володя · 21 августа 2018, 10:19 1 +1 Добрый день. Не думаю что данную задачу нужно решать с помощью данного компонента. Вам стоит на странице товара — линза выводить две формы продукта и кнопку по которой вызывать сабмит у этих форм. В корзине будет то что в итоге пользвоатель выбрал. пример <!-- форма 1 --> <form class="form-horizontal ms2_form col-md-4" method="post" data-group="product"> <input type="hidden" name="id" value="[[*id]]"/> <input type="submit" name="ms2_action" value="cart/add" style="display:none"/> [[msOptions?options=`color,size`]] </form> <!-- форма 2 --> <form class="form-horizontal ms2_form col-md-4" method="post" data-group="product"> <input type="hidden" name="id" value="[[*id]]"/> <input type="submit" name="ms2_action" value="cart/add" style="display:none"/> [[msOptions?options=`color,size`]] </form> <button class="btn btn-default" onclick="product_submit()"> <i class="glyphicon glyphicon-barcode"></i> [[%ms2_frontend_add_to_cart]] </button> <script> function product_submit() { $(miniShop2.form).filter('[data-group="product"]').submit(); }; </script> Новые дополнения и их версии / [msOptionsPrice2] - Модификации продукта. 375
Баха Волков · 26 июля 2018, 22:12 1 +2 Включаете тогда fenom и погнали: {var $resources = $_modx->runSnippet('pdoResources', [ 'parents' => 1, 'includeTVs' => 'image', 'prepareTVs' => 1, 'proccessTVs' => 1, 'tvPrefix' => '', 'return' => 'json' ])} {foreach $resorces | fromJSON as $res} {$res.image | pthumb : 'w=270&h=270&zc=1'} {/foreach} Вопросы / Не работает pthumb в @INLINE 2
Володя · 02 июля 2018, 12:03 2 +4 $c = $modx->newQuery("modUser"); $alias = $modx->getTableName("modUser"); $c->setClassAlias($alias); $c->where(array( "{$alias}.active" => 0, "{$alias}.createdon:<" => strtotime('-365 day') )); $c->query['command']= "DELETE {$alias}"; $c->prepare(); $c->stmt->execute(); Вопросы / Удаление всех неактивных пользователей с одним условием. 3
nuraksha · 29 июня 2018, 14:47 1 0 Спасибо за помощь! Сделал вот так: requirejs(["app", "app/ajaxform"], function () { require(['ajaxform'], function (e) { e.initialize({$_modx->getPlaceholder('AjaxForm.params')}); }); });В ajaxform.js define('ajaxform', ['jquery','jgrowl','jqueryform'], function ($,jGrowl,ajaxSubmit) { .... return AjaxForm; Вопросы / Есть ли пример добавления скриптов AjaxForm в require.js? 7
Михаил · 24 июня 2018, 07:50 1 +2 $resources = $modx->getIterator('modResource', array('parent' => 10938 )); $foreach($resources as $resource){ $pagetitle = str_replace('КОПИЯ ', '', $resource->get('pagetitle')); $resource->set('pagetitle', $pagetitle); $resource->save(); } Вопросы / Найти и заменить 3
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. С ходу сложно ответить, ранее не было таких случаев.
вот рабочий итог
formit2file
SendFilePDF
PdfCreate
Предусмотренного варианта нет, можно например использовать уведомления minishop
Не думаю что данную задачу нужно решать с помощью данного компонента.
Вам стоит на странице товара — линза выводить две формы продукта и кнопку по которой вызывать сабмит у этих форм. В корзине будет то что в итоге пользвоатель выбрал.
пример
Сделал вот так:
В ajaxform.js