23 марта 2020, 14:39 Кому стало полезно))): донатики Сюда нажал. На яндекс перекинуло. Со своей сборкой почти все победил. Как собрать разобрался, пакеты добавил, добавил сразу настройку поставщика модсторе, ошибки пролечил. И тут оказалось что все шаблоны и чанки на php написаны :-(. А на это привыкать не надо. В pdoTools поддержку $modx и php я вырубил. Придется чанки и шаблоны с другого проекта брать или самому переписывать ;-(. Новые дополнения и их версии / siteDev - установка компонента 28 0
23 марта 2020, 00:41 Задонатил чуток :-). Но как собрать свою сборку на базе твоей не слишком понятно :-(. Сижу разбираюсь :-). Новые дополнения и их версии / siteDev - установка компонента 28 0
21 марта 2020, 14:58 {'!TicketLatest' | snippet : [ 'checkPermissions'=>'list', ]} Тест лишнее. Не работает. Наверно основной класс запроса не Ticket, поэтому не срабатыват. Извиняюсь, лезть в код не стал и точно сказать не могу. Только проверил. Пошаговые инструкции / Ограничиваем доступ в pdoMenu и Tickets через группы ресурсов 6 0
21 марта 2020, 05:33 Блин фиг пойми как заметку переписывать :-(. Сразу логические связки теряются :-). Ладно, надеюсь, комментарии читать будут. Пошаговые инструкции / Ограничиваем доступ в pdoMenu и Tickets через группы ресурсов 6 0
21 марта 2020, 05:29 Мда… Как то не подумал что list прокатит. Думал надо заводить какие-то отдельные права :-(. Вообщем не сообразил. Для getTickets тоже прокатило. А с TicketLatest уже не срабатывает. Пошаговые инструкции / Ограничиваем доступ в pdoMenu и Tickets через группы ресурсов 6 0
20 марта 2020, 06:33 Я в старом modExtra делал. Там в build.config.php ресолверы подключаются $BUILD_RESOLVERS = array( 'tables', 'chunks', 'default_fields', //'setup', //'office', );Главное после tables его включить. В tables сами таблицы создаются. В новом modExtra build.php // Add resolvers into vehicle $resolvers = scandir($this->config['resolvers']); foreach ($resolvers as $resolver) { if (in_array($resolver[0], ['_', '.'])) { continue; } if ($vehicle->resolve('php', ['source' => $this->config['resolvers'] . $resolver])) { $this->modx->log(modX::LOG_LEVEL_INFO, 'Added resolver ' . preg_replace('#\.php$#', '', $resolver)); } }Ресолверы сами подключаются из папки. Наверно их стоит переименовать 1tables.php и т.д. Может сработает. Проверять надо. А вы как данные в базу подключаете? Или еще не подключаете? Вопросы / Импорт дефольтных данных в базу данных modExtra 3 0
19 марта 2020, 13:52 Я тупо в ресолвере через newObject добавляю. Если есть лучше вариант, то будет интересно узнать. resolve.default_fields.php /** @var xPDOTransport $transport */ /** @var array $options */ /** @var modX $modx */ if ($transport->xpdo) { $modx =& $transport->xpdo; /** @var array $options */ switch ($options[xPDOTransport::PACKAGE_ACTION]) { case xPDOTransport::ACTION_INSTALL: $fields = [ [ 'name'=>'res_id', 'label'=>'Мероприятие', 'dbtype'=>'int', 'precision'=>10, 'phptype'=>'integer', 'xtype'=>'tevent-univers-combo', 'sort'=>1, 'validate'=>'required', 'select_query'=> '{ "parents":"0", "template":"1" }', 'filter'=>true, 'active'=>true, ], ///еще поля ]; foreach($fields as $field){ if(!$in_field = $modx->getObject('tEventField',['name'=>$field['name']])){ if($in_field = $modx->newObject('tEventField')){ $in_field->fromArray($field); if(!$in_field->save()) $modx->log(xPDO::LOG_LEVEL_ERROR, "[tEvent] field {$field['name']} not add!"); } } } $modx->log(xPDO::LOG_LEVEL_INFO, '[tEvent] Successfully add Default fields!'); break; } } Вопросы / Импорт дефольтных данных в базу данных modExtra 3 +1 1
05 марта 2020, 12:32 Читал год назад. (int) использую, а с санацией строки проблема вышла. В поле название города кавычки писались и его никто найти не мог. Так что, санация это работа надолго :-(. Готовые решения / Подзапросы для pdoTools 64 0
05 марта 2020, 12:20 Актуальность в одну минут, вообще не принципиально))) В смысле, крон настраивать запросы для этих таблиц писать. На 80 базовых таблиц — это офигенное кол-во временных. Сайт только висеть будет их генерировать. Готовые решения / Подзапросы для pdoTools 64 0
05 марта 2020, 12:05 Если бы ты принял этот PR, пришлось бы pdoTools удалять. Дыры много где есть. И никто вам не мешает взять и переписать PR или что-то еще без дыр, если они там есть. Вроде ничего такого не должно быть. Все стандартные дыры MODX только. Готовые решения / Подзапросы для pdoTools 64 0
05 марта 2020, 11:50 Никогда не понимал зачем такие мега запросы писать. Бесполезных join-нов куча. Этаж сколько выборка этого всего идти будет. А потом еще сидеть постоянно разбирать что там написано.Выборка достаточно быстро идет. Какие-то тормоза не заметны. И в каком таком случае не приходиться разбирать что написано? Что в сниппете что в запросе одинаково приятно. Для таких запросов проще временную таблицу сделать куда будут данные сливаться на бэкенде, и потом уже готовые данные забирать на фронте.И еще за актуальность временных таблиц следить. Причем разных нужных данных может быть много вариантов. Вроде кол-во перестановок пропорционально n! Если 2 таблицы по 5 колонок, то кол-во возможных выборок 10! = 3628800 вариантов :-). Готовые решения / Подзапросы для pdoTools 64 0
05 марта 2020, 11:39 Ну если вы магистр напишите внятную инструкцию как делать санацию параметров. $where['id'] = (int)$_POST['id'];(int) это понятно. Для даты strftime можно использовать. А остальное? string, decimal, float. Хотя тоже все понятно. Только писать такие преобразования во все сниппеты долго. Плагин или что-то такое посмотрю. Ну здесь на интранет хакеров лет 10 не предвидеться. А если и предвидятся, то взлом внутреннего сайта это уже мелочь. Готовые решения / Подзапросы для pdoTools 64 0
04 марта 2020, 23:49 Известная проблема :-) В файле faq.mysql.schema.xml <field key="question" dbtype="text" length="1023" phptype="text" null="false" default=""/>phptype=«text» нет такого. Когда-то работало, а сейчас надо phptype=«string». Замените phptype=«text» на phptype=«string» везде в схеме и перегенируйте классы XPDO. Я с помощью migx это делаю. Создание таблиц через MIGX Вопросы / Реализация раздела "Вопрос - ответ" 34 +1 1
04 марта 2020, 22:44 Сколько будет выполнятся такой вопрос, если сверху на него навесить абстракцию в виде pdoTools? Сорок лет? Преобразовать массив на 10-40 ключей в строку 100-600 символов? Явно миллисекунды :-). После последней правки, подзапрос добавил плюс 7 мс к общему выполнению запроса. getChunk операция затратная. Целых 5 мс :-). Готовые решения / Подзапросы для pdoTools 64 0
04 марта 2020, 22:16 А если серьёзно, то ты пишешь очень сложный запрос, который не понадобится 99% пользователей pdoTools, а может и вообще MODX Если 1% понадобится, то уже неплохо. 99% не понадобиться — это не слишком хороший критерий. Взлетит не взлетит 100% не угадаешь. То есть, это критерий на способности предсказывать будущие. А оно не слишком предсказуемо. Он не станет менее сложным, если засунуть его в массив Fenom, никто ничего от этого не выиграет. А, кстати, тогда зачем вообще запросы описывать массивом феном? Можно же вообще писать чисто SQL. XPDO это типа ORM. В нем получил объект и сразу можно что-то записать в базу. В pdoTools только чисто вывод. Мне просто удобнее сам синтаксис pdoTools писать. И, так как запрос массив, есть возможность на лету его поменять. Приготовил массив запроса, а потом where добавляешь или удаляешь когда надо. На чисто sql менять where жуть. Код 5 лет назад :-). Ни pdoTools ни strftime еще не знал. if(isset($_GET['date1'])){ $modx->setPlaceholder('date1',$_GET['date1']); if(isset($_GET['date2'])){ $modx->setPlaceholder('date2',$_GET['date2']); } if($_GET['date1']!='' and $_GET['date2']==''){ $where = "where o.makedate >='".$_GET['date1']." 00:00:00' and l.status_id=1"; }elseif($_GET['date2']!=''){ $where = "where o.makedate >='".$_GET['date1']." 00:00:00' and o.makedate <='".$_GET['date2']." 23:59:59' and l.status_id=1"; } }else{ $where = "where l.status_id=1"; }Тоже для XPDO и pdoTools $where = [ 'l.status_id'=>1]; if($_GET['date1']){ $modx->setPlaceholder('date1',$_GET['date1']); $where['o.makedate:>='] = '".$_GET['date1']." 00:00:00'"; } if($_GET['date2']){ $modx->setPlaceholder('date2',$_GET['date2']); $where['o.makedate:<='] = '".$_GET['date2']." 23:59:59'"; }Явно проще. Особенно когда фильтр больше на параметров 6. А вот пример уже с феном. {set $where = [ 'Detail.flanec:NOT IN'=>[1,3], 'Detail.sech'=>'pryam', ]} {if $.get.sk_order_id}{set $where['Detail.sk_order_id']=$.get.sk_order_id}{/if} {if $.get.smena_id}{set $where['tSkladDetNSLink.smena_id']=$.get.smena_id}{/if} {if $.get.type_job_id}{set $where['DetailClass.type_job_id']=$.get.type_job_id}{/if}Так что запрос в массиве штука полезная. А вот подзапросов в массиве у меня не было. Поиграюсь, посмотрю, что можно с ними сделать. Хотя, конечно, их на каждом шагу внедрять не стоит. Усилия по добавлению этого функционала не просто ничего не стоят, они отрицательные не длинной дистанции, потому что нужно будет отвечать на вопросы по конвертации этих твоих вложенных массивов в SQL. Это аргумент. Отвечать на вопросы кучи начинающих прогеров не самая приятная перспектива. Но тормозить из-за этого компоненты или проекты?? Это раз. И два. Отвечать имеет смысл, если развивать свою команду. С которой можно делать очень большие проекты. Такие как linux, например. Думаю сеньор не предел развития программиста. Можно как-бы основать свою школу и стать что-то вроде академика. Периодически будут находиться люди, пытающиеся наворотить какую-нибудь фигню в этими параметрами. Как сейчас это делают с долбаным tvFilters. Будут явно. Люди пытаются решить свои задачи. Изучаем их задачи и пишем код, чтобы у них был инструмент для их задач :-). Прикалываюсь, если что :-). Но в каждой шутке доля шутки… Резюме. Я этот PR не приму, удачи в развитии своих дополнений. Ну как хотите. Я то надеялся, что вот крутая фишка пользуйтесь. Но, возможно, это и не так круто как мне кажется. Подзапросы, когда они мне понадобятся буду писать в своей версии синтаксиса pdoTools. Просто потому, что мне так удобнее. Сейчас, практические преимущества этой версии не понятны :-(. PS. Сюда $fields массивом иногда приходят. $fields = 'SQL_CALC_FOUND_ROWS ' . $fields;В итоге запрос выглядит так: SELECT SQL_CALC_FOUND_ROWSArray FROMГде $fields массивом становиться не нашел. Просто implode сделал. Может разберетесь? Готовые решения / Подзапросы для pdoTools 64 -2
04 марта 2020, 19:56 Блин. Мне не нужны сырые запросы. Мне надо, чтоб запрос был подготовлен. Вдруг я префикс базы захочу изменить, а в куче запросов он будет указан. Готовые решения / Подзапросы для pdoTools 64 0
04 марта 2020, 19:40 А нафига ж ты его прислал с своём PR?Торопился не проверил. И мне он нравиться :-). Не надо. Подсадили всех на pdoTools, а теперь нужные правки отказываетесь принять? :-) Проявите ответственность :-) Готовые решения / Подзапросы для pdoTools 64 -2
04 марта 2020, 19:31 проверяешь свой новый придуманный синтаксис на pdoFetch с твоими изменениями, и без них? И приводишь как доказательство, что твой синтаксис без твоих изменений в pdoFetch не работает? 1) Сперва проверил синтаксис на чистом pdoTools. Понятно дело ошибка. 2) Проверил синтаксис только с заменой pdoFetch. Заработало. То есть Я уже не принял предыдущий PR принимать этот PR Не требуется.. 3) Ну и на всякий случай проверил как весь сайт без предыдущего PR будет работать. Нормально работает. (Только в стилях пробелов понаставил). Сейчас подготовлю PR чисто для подзапросов. Еще через минут 20 будет. Готовые решения / Подзапросы для pdoTools 64 0
04 марта 2020, 16:20 ты легко запилишь прекрасный форкЗапилю :-). Надо для работы. Не легко :-(. И будешь его потом поддерживать бесплатно, годами. Не буду :-). Наверно передам кому-нибудь, если будут желающие. Но пока такой ситуации нет, так что вопрос открытый. Проблемы решаю по мере поступления. Готовые решения / Подзапросы для pdoTools 64 -1
04 марта 2020, 16:14 Пиши свои допы, развивай — Сергей верно говорит.Ниже пример с подзапросом. Нужно для одного этапа производства детали получить на когда запланирован следующий этап. С измененным pdoTool, это можно получить через pdoResources. Не надо писать никаких сниппетов. Их уже и так целая куча. Как можно сделать доп, чтобы можно было так же через pdoResources вывести нужную информацию, не меняя pdoTools? {'!pdoResources' | snippet :[ 'loadModels'=>'tSklad', 'subpdo'=>[ 'test'=>[ 'class'=>'tSkladDetNSLink', 'alias'=>'NextDNL', 'select'=>[ 'NextDNL'=>'NextDNL.smena_id', ], 'leftJoin'=>[ 'NextS'=>[ 'class'=>'tSkladSmena', 'on'=>'NextS.id=NextDNL.smena_id', 'where'=>[ 'NextS.date > Smena.date', ], ], ], 'where'=>[ 'NextS.date > Smena.date', ], 'sortby'=>[ 'NextS.date'=>'ASC', 'NextS.number'=>'ASC', ], 'limit'=>1, ], ], 'class'=>'tSkladDetNSLink', 'select'=>[ 'tSkladDetNSLink'=>'tSkladDetNSLink.id,Smena.id as smena_id, ({$subpdo.test}) as on_next_smena_id', ], 'leftJoin'=>[ 'Smena'=>[ 'class'=>'tSkladSmena', 'on'=>'Smena.id=tSkladDetNSLink.smena_id', ], ], 'where'=>[ 'Smena.id > 0', ], 'sortby'=>[ 'tSkladDetNSLink.id'=>'DESC', ], 'limit'=>10, 'tpl'=>'subpdo_test', 'showLog'=>1, ]} Готовые решения / Подзапросы для pdoTools 64 0
gtsAPI 1.1.7 — таблицы на TanStack, инлайн-редактирование как в Excel Prime Vue datatable тупит на 200+ строк и в виртуальном скролинге высота полей фиксирована. Вот нам в итоге и не подошло. Директор сказал расчет должен сразу показываться без пагин...
mxApi — быстрый внешний API для MODX Revolution • зафиксировать публичный контракт EndpointInterface / метаданных по semver, чтобы наш провайдер не ломался на обновлениях;Фактически это уже так, beta стоит просто на всякий случа...
YaSmartCaptcha - защитите ваши формы от спама умной капчей от Яндекс Вообще не понял о чем речь) В системной настройке service_js сейчас указана ссылка smartcaptcha.cloud.yandex.ru/captcha.js Я предложил очистить эту настройку, тогда компонент н...
mxBackup — обезличенные копии MODX в пару кликов Ещё нет, я там разом почти полтора десятка пакетов выложил модератор, вероятно, а шоке.
Gallery3x 3.4.0 - вставка галерей прямо из визуального редактора (CKEditor и TinyMCE RTE) Здравствуйте. Есть консольный скрипт Вот почитайте: docs.ivan345.com/books/gallery3x/page/import-ms2galleryphp
[mSync] Новая версия синхронизации с 1С Всем привет. В какой то момент начали сыпаться ошибки: Error 23000 executing statement: INSERT INTO `modx_msync_products` (`product_id`, `uuid_1c`) VALUES ...
Со своей сборкой почти все победил. Как собрать разобрался, пакеты добавил, добавил сразу настройку поставщика модсторе, ошибки пролечил. И тут оказалось что все шаблоны и чанки на php написаны :-(. А на это привыкать не надо. В pdoTools поддержку $modx и php я вырубил. Придется чанки и шаблоны с другого проекта брать или самому переписывать ;-(.
Тест лишнее. Не работает. Наверно основной класс запроса не Ticket, поэтому не срабатыват. Извиняюсь, лезть в код не стал и точно сказать не могу. Только проверил.
Для getTickets тоже прокатило. А с TicketLatest уже не срабатывает.
Главное после tables его включить. В tables сами таблицы создаются.
В новом modExtra build.php
Ресолверы сами подключаются из папки. Наверно их стоит переименовать 1tables.php и т.д. Может сработает. Проверять надо.
А вы как данные в базу подключаете? Или еще не подключаете?
resolve.default_fields.php
И еще за актуальность временных таблиц следить. Причем разных нужных данных может быть много вариантов. Вроде кол-во перестановок пропорционально n! Если 2 таблицы по 5 колонок, то кол-во возможных выборок 10! = 3628800 вариантов :-).
(int) это понятно. Для даты strftime можно использовать. А остальное? string, decimal, float. Хотя тоже все понятно. Только писать такие преобразования во все сниппеты долго. Плагин или что-то такое посмотрю. Ну здесь на интранет хакеров лет 10 не предвидеться. А если и предвидятся, то взлом внутреннего сайта это уже мелочь.
В файле faq.mysql.schema.xml
phptype=«text» нет такого. Когда-то работало, а сейчас надо phptype=«string». Замените phptype=«text» на phptype=«string» везде в схеме и перегенируйте классы XPDO. Я с помощью migx это делаю. Создание таблиц через MIGX
После последней правки, подзапрос добавил плюс 7 мс к общему выполнению запроса. getChunk операция затратная. Целых 5 мс :-).
А, кстати, тогда зачем вообще запросы описывать массивом феном? Можно же вообще писать чисто SQL.
XPDO это типа ORM. В нем получил объект и сразу можно что-то записать в базу. В pdoTools только чисто вывод.
Мне просто удобнее сам синтаксис pdoTools писать. И, так как запрос массив, есть возможность на лету его поменять. Приготовил массив запроса, а потом where добавляешь или удаляешь когда надо. На чисто sql менять where жуть. Код 5 лет назад :-). Ни pdoTools ни strftime еще не знал.
Тоже для XPDO и pdoTools
Явно проще. Особенно когда фильтр больше на параметров 6.
А вот пример уже с феном.
Так что запрос в массиве штука полезная.
А вот подзапросов в массиве у меня не было. Поиграюсь, посмотрю, что можно с ними сделать. Хотя, конечно, их на каждом шагу внедрять не стоит.
Это аргумент. Отвечать на вопросы кучи начинающих прогеров не самая приятная перспектива. Но тормозить из-за этого компоненты или проекты?? Это раз. И два. Отвечать имеет смысл, если развивать свою команду. С которой можно делать очень большие проекты. Такие как linux, например. Думаю сеньор не предел развития программиста. Можно как-бы основать свою школу и стать что-то вроде академика.
Будут явно. Люди пытаются решить свои задачи. Изучаем их задачи и пишем код, чтобы у них был инструмент для их задач :-). Прикалываюсь, если что :-). Но в каждой шутке доля шутки…
Резюме.
Ну как хотите. Я то надеялся, что вот крутая фишка пользуйтесь. Но, возможно, это и не так круто как мне кажется. Подзапросы, когда они мне понадобятся буду писать в своей версии синтаксиса pdoTools. Просто потому, что мне так удобнее. Сейчас, практические преимущества этой версии не понятны :-(.
PS. Сюда $fields массивом иногда приходят.
В итоге запрос выглядит так:
Где $fields массивом становиться не нашел. Просто implode сделал. Может разберетесь?
Подсадили всех на pdoTools, а теперь нужные правки отказываетесь принять? :-) Проявите ответственность :-)
2) Проверил синтаксис только с заменой pdoFetch. Заработало. То есть
принимать этот PR Не требуется..
3) Ну и на всякий случай проверил как весь сайт без предыдущего PR будет работать. Нормально работает. (Только в стилях пробелов понаставил).
Сейчас подготовлю PR чисто для подзапросов. Еще через минут 20 будет.
Не буду :-). Наверно передам кому-нибудь, если будут желающие. Но пока такой ситуации нет, так что вопрос открытый. Проблемы решаю по мере поступления.
Как можно сделать доп, чтобы можно было так же через pdoResources вывести нужную информацию, не меняя pdoTools?