Александр Туниеков

Александр Туниеков

С нами с 19 декабря 2015; Место в рейтинге пользователей: #15
Александр Туниеков
13 июня 2023, 12:09
0
Сталкивались, но редкость и не понятно откуда ноги растут. Вроде конфиг компонента из сесии не подгружает. Проследите за сесиями. Может они меняются как-то при прогрузке странице одна а при ajax другая. Или что-то другое.
Александр Туниеков
13 июня 2023, 12:05
0
Хм… я как-то ожидал конструктор сайтов как тильда. Установил и блоки натыкал на сайте. Но задача конечно сложная… Вообще даже не тестировал. А привязка конкретно к блогу, интернет-магазину жесткая? Произвольный сайт из блоков можно собрать? Например сообщество MODX или сообщество майнкрафт?
Александр Туниеков
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: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:37
0
Черт. Ввязался в обсуждение. Скорее всего не сработает. неймспейс это конструкция языка php а не текстовая переменная. Но чтоб точно сказать придется сейчас модекс 3 ставить пдотулс и модеекстра и пробовать :-(
Александр Туниеков
08 июня 2023, 15:38
0
Возможно. Но тут 1 вопрос имя класса текстовая переменная например
$class = 'MODX\Revolution\modResource'
Как текстовую переменную преобразовать в неймспайс? Просто не нашел этот момент в инете.
use $class
Насколько я понял точно нельзя. А
$class:class

можно?
Александр Туниеков
08 июня 2023, 15:05
0
Я сказал часть функционала не работает и не будет работать. Например попробуйте через новый migx создать пакет и таблицу в базе данных. Когда я тестировал не работало.
А в pdoTools код типа
{'!pdoResource' | snippet : [
   'loadModels'=>'modextra',
   'class'=>'modextraItem',
]}
Работать наверно не будет. У меня сейчас modx3 не установлен и точно сказать не могу работает или нет. Но скорей всего в modx 3.3 такой код не будет работать.
Александр Туниеков
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, 12:32
0
MODX для тех, кто творит, WP для тех, кто просто делает, это отличие многого стоит
Модекс крут :-). Я только на модекс и работаю. Ни ларавел ничто другое мне ни зашло. Просто потому что от старта начала программирования до рабочего сайта в модекс минимум телодвижений. А на ларавел (Я могу ошибаться) на старте нет админки и пользователей.Смысл самому каждый раз писать админку и процедуры аутентификации??? Модекс крут потому что многое стандартно используемое уже есть и можешь сосредоточиться на конкретно логике своего приложения. В том числе круто что модекс почти не ограничевает в том какое приложение ты хочешь написать. Мы например пишем управление производством.
Аналогов по соотношению гибкость-скорость разработки я не знаю.
Александр Туниеков
11 мая 2023, 18:02
0
Можно getTables использовать. https://modstore.pro/packages/utilities/gettables
Сколько использовал тупняков при виборке из базы не замечал. В пределах секунды грузиться.
Если устроит, то напишу как использовать.
Александр Туниеков
05 мая 2023, 12:19
0
Странно. Вроде обновления в модсторе бесплатные. Было бы хорошо если была бы какая-то процедура разрешения конфликтов. Например написать тему с отзывом об авторе компонента. Только конечно пока заморачиваться никто не хочет.
Александр Туниеков
04 мая 2023, 20:36
0
офтоп. а за что от дмитрия минусы? мешают ориентироваться.

ИИ круто и в будущем поможет снять часть рутины, но уметь правильно ему вопросы задавать мешает. Вообще хотелось бы чтоб был в контексте твоих задач и понимал с полуслова :-)
Александр Туниеков
21 апреля 2023, 12:51
0
Поиск делает OpenSearch в своем индексе(базе) и соответственно сайт должен загрузить на него данные по которым поиск идет. На 40т товаров данные грузятся 5 минут. Если поменять хостинг, то соответственно минут 5-6 и не будет работать фильтр. Надо буде перезапусть создание индекса вручную
Александр Туниеков
21 апреля 2023, 12:39
0
нужно ли в будущем обновления
Ну думаю можно обновлять OpenSearch. Пока совместимость не сломают. Хотя врядли в ближайшем будущем сломают. Я не обновляю пока. Еще даже не разбирался как обновлять.
Александр Туниеков
21 апреля 2023, 12:32
0
OpenSearch бесплатный opensource.
Кроме единоразовой оплаты за модуль, еще будут оплаты?
Нет.
Хотелось бы еще увидеть интеграцию с SeoFilter.
Пока в планах. Но насколько я смотрел там ничего сложного нет. Просто немного переписать js SeoFillter.

Хотя есть одна мысль которая не дает покоя, если клиент на вашем хостинге, то вы подключаете ему этот модуль, а если он хочет уйти на свой хостинг, вы же не будете ему предоставлять место для хранения фильтров на vps.
Ну он не будет ничего загружать на мой хостинг и соответственно место не будет занимать. А к чему вопрос?
Александр Туниеков
07 апреля 2023, 06:11
0
Точки с запятой нет после инструкии $this->modx->log(1, print_r($success_page,1))
надо
$this->modx->log(1, print_r($success_page,1));
Александр Туниеков
07 апреля 2023, 06:01
0
А в MODX whereCondition вообще есть? я только xPDOQuery::where в гугле нахожу