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

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

С нами с 19 декабря 2015; Место в рейтинге пользователей: #15
Александр Туниеков
12 ноября 2019, 14:26
0
В сниппете ошибка. В коде страницы поправил, а здесь забыл.
[[!pdoResources?
&parents=`1`
&where=`{"active":1}`
]]
Александр Туниеков
12 ноября 2019, 14:12
0
Сейчас ошибка возникает фиг знает где. Вот последний случай. Мне понадобилось включить fenom на страницах готового сайта. И сайт стал показывать пустые страницы. В логах
pdotools.class.php : 989) Unexpected token ':' in 65502631cb124d85a4b77cf0b9656e40 line 71, near '{"active":' <- there
То есть, не понятно в каком шаблоне или чанке или контенте или tv. Ищи где хочешь.
Оказалось в шаблоне нашел и поправил быстро. Но пришлось поволноваться. Ошибку вызывает вызов типа
[[!pdoResource?
&parents=`1`
&where=``{"active":1}`
]]
Сейчас я воспроизвел ее на тестовом сайте. yadi.sk/i/fPFVkXKf9M8oIQ
Вчера я наметил идею. То есть, не окончательный вариант. Счас попробуем реализовать.
Реализовал. Вот изменения:
Файл core/components/pdotools/vendor/fenom/fenom/src/Fenom/Template.php со строки 273
} else {
                            try{
                                $code = $this->parseTag($tokens);
                                if ($tokens->key()) { // if tokenizer have tokens - throws exceptions
                                    throw new CompileException("Unexpected token '" . $tokens->current() . "' in {$this} line {$this->_line}, near '{" . $tokens->getSnippetAsString(0, 0) . "' <- there", 0, E_ERROR, $this->_name, $this->_line);
                                }
                                $this->_appendCode($code, '{' . $tag . '}'); // start the tag lexer
                            }catch (\Exception $e){
                                $this->_appendText('{' . $tag . '}');
                                $this->_appendText('<pre class="fenomLog">'.$e->getMessage().'</pre>');
                            }
                        }
Файл core/components/pdotools/model/pdotools/pdotools.class.php со строки 580
$content = $tpl->fetch($properties);
                    //$this->modx->log(modX::LOG_LEVEL_ERROR, $tpl);
                    //$this->modx->log(modX::LOG_LEVEL_ERROR, $content);
                    if(preg_match("#<pre class=\"fenomLog\">(.*?)</pre>#is", $content, $matches)){
                        $content = preg_replace("#<pre class=\"fenomLog\">(.*?)</pre>#is", "", $content);
                        $this->modx->log(modX::LOG_LEVEL_ERROR, print_r($matches,1));
                    }
Журнал ошибок
[2019-11-12 14:03:20] (ERROR @ D:\OpenServer\domains\modx.loc\core\components\pdotools\model\pdotools\pdotools.class.php : 585) Array
(
    [0] => <pre class="fenomLog">Unexpected token ':' in 57d5300dc6213bb54abc3938f719d063 line 72, near '{"active":' <- there</pre>
    [1] => Unexpected token ':' in 57d5300dc6213bb54abc3938f719d063 line 72, near '{"active":' <- there
)

[2019-11-12 14:03:20] (ERROR @ D:\OpenServer\domains\modx.loc\core\components\pdotools\model\pdotools\pdofetch.class.php : 172) [pdoTools] Error 42S22: Unknown column 'modResource.active' in 'where clause'
Страница нормально грузиться yadi.sk/i/yTdJ1mWadBz_nQ и если бы у меня на тестовом сайте было бы поле modResource.active то и сниппет бы нормально отработал. То есть, все JS/JSON отработали бы без ошибок.
Александр Туниеков
12 ноября 2019, 00:11
+1
Вопрос актуальный. Тоже на этой скобке проблемы вылазят. Взглянул на исходники fenom. По идее фигурная скобка прошита только в этой функции github.com/fenom-template/fenom/blob/fc188a582229c7735df1bb584eb268548a957f46/src/Fenom/Template.php#L212
В принципе, ее там можно заменить чем-то другим, но спецсимволов на клаве не так много, и все где-то используются. А двойным символом заменять не красиво и не удобно :-(.
Думаю лучше чтоб на этой строке github.com/fenom-template/fenom/blob/fc188a582229c7735df1bb584eb268548a957f46/src/Fenom/Template.php#L276
не создавалось исключение с обрывом компиляции, а чтоб ошибка кидалась в лог и компиляция продолжалась.
Лог прикрутить довольно сложно.
$result = $fenom->fetch("template/name.tpl", $vars);
Возвращает уже откомпилированную страницу. Не массив. И чтоб метод вернул массив много изменений надо.
Можно сделать костыль. Вместо исключения
throw new CompileException("Unexpected token '" . $tokens->current() . "' in {$this} line {$this->_line}, near '{" . $tokens->getSnippetAsString(0, 0) . "' <- there", 0, E_ERROR, $this->_name, $this->_line);
Запихать ошибку в текст страницы
$error_text = "Unexpected token '" . $tokens->current() . "' in {$this} line {$this->_line}, near '{" . $tokens->getSnippetAsString(0, 0) . "' <- there";
$this->_appendText("<!--log ".$error_text." end_log-->");
И уже в MODX в pdoParser вылавливать ошибку в тексте и писать ее в лог MODX.
Ну вот так по идее можно решить проблему :-)
Александр Туниеков
25 сентября 2019, 06:54
0
Сам задал вопрос. Сам и отвечу :-).
Проблема не в MODX а в классе php finfo. На одном хостинге он на тип файла возвращает «text/html», на другом «application/xml». Или от версии php зависит.
Я поправил в MODX файл core/model/modx/modfilehandler.class.php
/**
     * Tells if a file is a binary file or not.
     *
     * @param string $file
     * @return boolean True if a binary file.
     */
    public function isBinary($file) {
        if (!file_exists($file) || !is_file($file)) {
            return false;
        }

        if (filesize($file) > 0 && class_exists('\finfo')) {
            $finfo = new \finfo(FILEINFO_MIME);
            $info_file = $finfo->file($file);
            //$this->modx->log(1,"$file ".$info_file);
            if(strpos($info_file, "application/xml") !== false) {
                //$this->modx->log(1,"$file ".$info_file);
                return false;
            }
            return substr($info_file, 0, 4) !== 'text';
        }

        $fh = @fopen($file, 'r');
        $blk = @fread($fh, 512);
        @fclose($fh);
        @clearstatcache();
        return (substr_count($blk, "^ -~" /*. "^\r\n"*/) / 512 > 0.3) || (substr_count($blk, "\x00") > 0);
    }
Теперь xml редактируется у меня.
Александр Туниеков
24 сентября 2019, 12:16
0
2 раза подобный модуль делал, а прилизать и оформить в отдельный компоненть и выложить руки не добрались :-).
Александр Туниеков
20 сентября 2019, 10:11
0
Понятно. Что-то это оказалось мне неожиданно :-(.
Александр Туниеков
01 сентября 2019, 18:22
0
Я вот работаю только с MODX. Пробовал и WP и Joomla. Не завелось. А вот с MODX взял и начал что-то писать. Все просто и интуитивно понятно для меня. Только два дня потратил на освоение ModExtra. MODX Revo почти идеален ;-). Может он и устаревает, но от новой MODX-like системы хотелось бы такой же легкости освоения, стандартизованную админку и стандартные средства такие как сниппеты, чанки, шаблоны, tv, formit, fenom,pdoTools, minishop, tickets, множество готовых компонентов для программирования-сборки сайтов, исчерпывающею русскую документацию и активное сообщество. И это главное :). Например WP мне не понравился зоопарком плагинов. Для того чтобы что-то сделать нужно изучить плагины, на которых сделали сайт до меня. И таких плагинов очень много. Как-то пробовал сделать програмку на VB сдох на программировании авторизации пользователей. А в MODX все что нужно для авторизации уже есть. Пробовал освоить Октябрь, но выяснилось, что он заточен под англоязычных, и документация приложений в магазине не слишком подробная.
У MODX есть недостатки: сайт тупит когда много ресурсов и tv, нет дополнений таких как чат, форум, делать компоненты на продажу не слишком выгодно (для большей части аудитории хватает бесплатных и на платные мало покупателей, не считая конечно office и msearch). С tv, наверно, можно было сделать галочку «хранить в отдельной таблице» и, при ее включении, создавать для tv таблицу с типом value определенном правилами tv и переносить в нее все данные этой tv.
Уф. Высказался. Не очень мне нравится разговоры про новый MODX и отказ от обратной совместимости.
Александр Туниеков
28 августа 2019, 14:12
0
Купили компонент. Что-то статистика не айс. В списке хитов можно сделать фильтрацию? Хотя бы убрать заблокированные запросы. И может сделать в запросе mySQL группировку по юзер агент или по айпи с подсчетом кол-ва запросов? И соотвественно кнопки группировка по айпи и группировка по юзар агент в топбаре списка хитов.
Александр Туниеков
09 июня 2019, 07:42
0
1. Картинки и файлы у меня практически не спрашивали. Они сделаны просто чтоб были. Зачем размер картинок ставил уже не помню :(. Уберу размеры в следующей версии. Пусть сами настраивают как хотят.
2. Захватываешь ответ мышкой и перетаскиваешь напротив нужной строки. yadi.sk/i/g4e9MtRiSWoixA
Александр Туниеков
07 июня 2019, 19:43
0
А вот это не предусмотрели :(.
Попробуйте все что в case 'OnBeforeUserFormSave': обернуть в
if($_POST['action']=='auth/formRegister'){
Александр Туниеков
30 мая 2019, 19:03
0
Добрый день! Картинку к вопросу прикрепить можно. Посмотреть демо здесь http://z9233215.bget.ru/testyi.html. Тестовый менеджер: demo пароль: demo z9233215.bget.ru/manager
Александр Туниеков
09 мая 2019, 20:05
0
Конечно можно. Я делал php скрипт который выдавал товары в json, а на андроид запрашивал с него данные парсил и вставлял в базу SQLite.
Александр Туниеков
09 мая 2019, 19:57
0
Ну с андроид я знаком уже :). а с iphone нет. Для андроид приложение сделать что-то около 30 т.р. плюс вам где-то надо будет дизайн сделать на него. На iphone мне придется учиться и это получиться дороже.
Вот так если захотите у меня заказать.
А вообще лучше на сайтах для программистов андроид и iphone вам поискать.
Александр Туниеков
09 мая 2019, 19:46
0
Приложение для андроид? насколько большая база товаров? синхронизация может будет долгая :(
Александр Туниеков
09 мая 2019, 17:15
0
Мобильное приложение для андроид или iphone? Что в нем нужно? Я делал для андроид приложение калькулятор товаров, но во первых дизайн не мое, во вторых никто им пока не пользуется :).
Александр Туниеков
31 марта 2019, 13:24
0
Вообщем надо было в build.config.php добавить define('PKG_PROVIDER_ID', 3); чтобы при установке знало с какого провайдера брать ключ. 3 — это у меня ид модсторе. Теперь при установке с модсторе пакет ставиться, а с локальной установкой не ставиться. Как и должно быть. Только порылся я по транспортному пакету и вообще не нашел что там зашифровано :(.
Александр Туниеков
31 марта 2019, 11:41
0
Попробовал так https://gist.github.com/touol/af98f895e770debff7aad9b128e6debd. Но попытка не удалась :(. Пакет на тесте ставится, а не должен.
Помогите пожалуйста
Александр Туниеков
31 марта 2019, 09:57
0
К сожалению, я это пример не понял :(.