Всего 123 799 комментариев

Артур Шевченко
09 июня 2023, 12:31
+1
Давно уже оформил. AjaxFormitLogin называется
Артур Шевченко
09 июня 2023, 11:50
0
getResources выводит список ресурсов, а не формирует ссылки на них. Как в чанке вы выводите ссылку? Так
<a href="[[+uri]]">link</a>
Vladislav
09 июня 2023, 10:30
0
Поразбирался немного, в результате:
$user = $this->modx->getObject($modtelegram->classModUser, $q);
вот эта команда в методе GetUserByEmailPassword из файла
core/components/modtelegram/model/modtelegram/modtelegram.class.php
должна возвращать объект $user, но возвращает null. Пользователь точно есть.
$q формируется как
$q = $this->modx->newQuery($modtelegram->classModUser);
    $q->innerJoin($modtelegram->classModUserProfile, $modtelegram->classModUserProfile,
        "{$modtelegram->classModUser}.id = {$modtelegram->classModUserProfile}.internalKey");
    $q->where(array(
        "{$modtelegram->classModUser}.active"       => true,
        "{$modtelegram->classModUserProfile}.email" => $email,
    ));
Пока не понятно куда копать дальше. В modx и php новичёк. Первый сайт на modx делаю.
Anton K
09 июня 2023, 00:05
0
Не думали оформить как отдельный компонент (и может даже в стор залить)? Было бы удобнее, работал бы не зависимо от оригинального ajaxform. Например, можно было бы использовать на новых страницах, не боясь поломать старый сайт (с кучей чужого кода), полезно при редизайне главной, например, чтоб бандл jquery не тащить ради него… но и старые шаблоны не трогать.

хотя есть FetchIt (вроде то, что нужно)
Александр Туниеков
08 июня 2023, 18:45
0
в migx при попытке содать таблицы в базе вылетает ошибка
Fatal error: Class 'xPDOGenerator_mysql' not found in C:\OSPanel\domains\modx3.loc\core\components\migx\model\migx\migxpackagemanager.class.php on line 3
Александр Туниеков
08 июня 2023, 18:38
0
Ага. А вот как мне быть? Мне нужно чтоб класс таблицы я мог указать прямо в параметрах сниппета. То есть имя класса в сниппете есть только в виде переменной строки.
$class = 'ModExtra\Model\ModExtraItem';
$class::class;
Так не работает. Конечно можно использовать eval
$class = 'ModExtra\Model\ModExtraItem';
eval('$class1 ='. $class.'::class;');
if($item = $modx->getObject($class1,1)){
    print_r($item->toArray());
}

Но eval как известно зло. Или Использовать $xpdo->loadClass Но его не изветно когда отрубят.
Так как быть?
Николай Савин
08 июня 2023, 18:23
0
Да loadClass до сих пор используется и очень активно прямо в ядре.
Александр Туниеков
08 июня 2023, 18:02
0
Так а что ты проверял? (в обществе вроде по правилам использовать ты)
Я проверяю
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

$class = 'ModExtra\Model\ModExtraItem';
$class::class;
ошибка: Fatal error: Dynamic class names are not allowed in compile-time ::class fetch in

Работает такой код:
{'!pdoResources' | snippet : [
   'class'=>'ModExtra\Model\ModExtraItem',
   'sortby'=>[
       'ModExtraItem.id'=>'ASC'
   ]
]}
Это работает только не понятно будет ли дальше работать.
\core\components\pdotools\src\Fetch.php вызывает
\core\vendor\xpdo\xpdo\src\xPDO\Om\xPDOQuery.php
public function __construct(& $xpdo, $class, $criteria= null) {
        parent :: __construct($xpdo);
        if ($class= $this->xpdo->loadClass($class)) {
            $this->_class= $class;
            $this->_alias= $this->xpdo->getAlias($this->_class);
            $this->_tableClass = $this->xpdo->getTableClass($this->_class);
            $this->query['from']['tables'][0]= array (
                'table' => $this->xpdo->getTableName($this->_class),
                'alias' => & $this->_alias
            );
            if ($criteria !== null) {
                if (is_object($criteria)) {
                    $this->wrap($criteria);
                }
                else {
                    $this->where($criteria);
                }
            }
        }
    }
\core\vendor\xpdo\xpdo\src\xPDO\xPDO.php
/**
     * Load a class by fully qualified name.
     *
     * The $fqn should in the format:
     *
     *    dir_a.dir_b.dir_c.classname
     *
     * which will translate to:
     *
     *    XPDO_CORE_PATH/om/dir_a/dir_b/dir_c/dbtype/classname.class.php
     *
     * As of xPDO 3.0, the use of loadClass is only necessary to support BC
     * with older xPDO models. Auto-loading in models built with xPDO 3.0 or
     * later makes the use of this method obsolete.
     *
     * @param string $fqn The fully-qualified name of the class to load.
     * @param string $path An optional path to start the search from.
     * @param bool $ignorePkg True if currently loaded packages should be ignored.
     * @param bool $transient True if the class is not a persistent table class.
     *
     * @return string|boolean The actual classname if successful, or false if
     * not.
     * @deprecated since 3.0
     */
    public function loadClass($fqn, $path= '', $ignorePkg= false, $transient= false) {
loadClass вроде deprecated а закомментировал весь блок с if ($class= $this->xpdo->loadClass($class)) { сайт ушел в аут. Чет похоже разработчики MODX3 недодумали :-)
Николай Савин
08 июня 2023, 16:39
0
у меня в ModExtra3 работает
Александр Туниеков
08 июня 2023, 16:37
0
Черт. Ввязался в обсуждение. Скорее всего не сработает. неймспейс это конструкция языка php а не текстовая переменная. Но чтоб точно сказать придется сейчас модекс 3 ставить пдотулс и модеекстра и пробовать :-(
Николай Савин
08 июня 2023, 16:23
0
Можно попробовать экранировать слэши вот так

ModExtra\\Processors\\Item\\GetList
Не уверен что сработает, но попробовать можно
Александр Туниеков
08 июня 2023, 15:38
0
Возможно. Но тут 1 вопрос имя класса текстовая переменная например
$class = 'MODX\Revolution\modResource'
Как текстовую переменную преобразовать в неймспайс? Просто не нашел этот момент в инете.
use $class
Насколько я понял точно нельзя. А
$class:class

можно?
Николай Савин
08 июня 2023, 15:08
0
Конечно не будет, нужно писать с неймспейсами. Тогда все будет
Александр Туниеков
08 июня 2023, 15:05
0
Я сказал часть функционала не работает и не будет работать. Например попробуйте через новый migx создать пакет и таблицу в базе данных. Когда я тестировал не работало.
А в pdoTools код типа
{'!pdoResource' | snippet : [
   'loadModels'=>'modextra',
   'class'=>'modextraItem',
]}
Работать наверно не будет. У меня сейчас modx3 не установлен и точно сказать не могу работает или нет. Но скорей всего в modx 3.3 такой код не будет работать.
Вячеслав
08 июня 2023, 15:05
0
Так это просто весь MCE меняет на Ace. А вот как во всплывающем окне с исходным кодом, Ace подключить. К примеру как в платном плагине TinyMCE — advcode.
Николай Савин
08 июня 2023, 14:33
0
Так то pdoTools и migx для MODX3 уже больше года работают
Александр Туниеков
08 июня 2023, 14:15
0
Скорей всего migxdb, pdotools и getTables никогда не смогут нормально работать в MODX3. В MODX3 внесли изменение Перед тем как работать с объектами их необходимо подключить в скрипте через use. Например
use MODX\Revolution\modResource;
Но в MODX REVO можно использовать конструкцию вида
{'!pdoResource' | snippet : [
   'loadModels'=>'modextra',
   'class'=>'modextraItem',
]}
И работать с любой таблицей базы данных. Просто указываешь класс таблицы в настройках сниппета.
Так вот, по идее, чтоб работать с какой-то таблицей в модекс 3 надо прописать вызов ее класса use в начале сниппета. Но это не возможно. Сниппеты и код pdoTools, migx и getTables при запуске кода не знают какой класс им надо подключать. Класс прописан в настройках в виде текста. А в php запустить use какая-то переменная нельзя. Сейсас в MODX 3.0.3 это еще работает, но в MODX 3.3 обещают отключить метод modx->loadClass через который сейчас вызов произвольного класса через текстовую переменную его названия еще работает.

Вообщем существенная для меня часть возможностей migx и pdoTools в MODX3 накроется. Я разбирался в этой теме полгода назад когда хотел перевести getTables на MODX3 и возможно еще что-то не понял. Не судите строго если ошибся. Но по моему для меня переход на MODX3 не имеет смысла. Вроде как часть нужного фуункционала в будущем просто не будет работать.
Александр Туниеков
08 июня 2023, 13:41
0
Есть те, кто делают сайты, а есть те, кто развивает бэк, и их осталось единицы…
Бек или админку? Было бы что в админке развивать… Ресурс, чанк, сниппет, пользователя и т.д. можно создать и отредактировать и что еще надо то?
Сергей
08 июня 2023, 13:23
0
Я считаю, что каждый в праве на свое мнение, я высказался, ранее не видел тут подобных постов, возможно ни кто не хочет это выставлять на показ. Я не боюсь осуждения.

Какой смысл создавать тему, в которой пользователи что-то будут предлагать разработчикам?
Смысл заключается в том, что некоторые модули можно улучшать в плане функционала, удобства. Я по жизни идеалист и всегда хочу какого-то совершенства в делах. Сайт которые я создаю, дорабатываются с гадами и это очень хорошо отражается на их развитие, в последующем доход, поэтому я со своими клиентами работаю по 4-5 лет и более.

Зайдёт в тему, почитает, и — вот оно, бегу делать, волосы назад.
Не стоит судить всех под одну гребенку, с кем я на связи, через поддержку или телегу, то в 90% случаем они соглашаются с моим мнением и вносят корректировки (парой это баги), улучшают свои дополнения, что бы сделать свой компонент еще удобнее и привлекательней.

Люди, которые умеют что-то делать, без дела не сидят. И если они не хотят развивать свои дополнения для MODX, значит они заняты чем-то еще. Как правило тем, за что лучше платят, или где интереснее работать.
Улучшать это одно, но есть и баги, на которые некоторые просто забили. Это больше уже относится к порядочности.

Современный MODX не интересен разработчикам
Это опять же ваше мнение. Все зависит от ЦА с которой вы работаете. Если вы делаете сайты по 500 к, круто, но что делать тем, кто делает сайты за цену до 50к, ни Laravel ни bitrix не поможет решить эти задачи, так-как это дорого.

То, что вы создали это бесспорно круто и вызывает уважение.

Некоторые дополнения и посей день развиваются, я хочу поддержать, предложил некоторые глобальные изменения. Вы же все верно говорите, программист найдет всегда себе работу, вот я и хочу предложить, что бы работа оплачивалась. Ввести обновления через время платным, это даст мотивацию улучшать и дорабатывать, а что бы было куда стремиться, я предложил дать по каждому компоненту возможность предлагать идеи.