Anton
перед вторым запросом. Или после того, как первый сделал.
Anton
выше простыня с сообщением
Anton
Народ, спасите меня, я мозг сломал уже. Второй день не могу понять, что за дичь. Вот кусок кода: $id = $_POST['id'];
$oldid = $_POST['oldid'];
if (($oldid == 0) && ($account > 0) || ($oldid > 0)) {
$sql = "INSERT INTO user_lessons (student_id,id) VALUES (" . $modx->user->id . ', ' . $modx->quote($id) . '); ' . ($oldid == 0 ? '' : ('DELETE FROM user_lessons WHERE (id = ' . $modx->quote($oldid) . ' ) AND (student_id = ' . $modx->user->id . ');'));
$stmt = $modx->prepare($sql);
//этот запрос выполняется корректно
if (!$stmt->execute([])) {
//...
} else {
if ($oldid == 0) {
//...
} else {
//вот с этого места начинаются странности
$sql1 = "SELECT id, date, teacher FROM calendar WHERE (id = " . $modx->quote($id) . ') OR (id = ' . $modx->quote($oldid) . ');';
$statement = $modx->prepare($sql1);
$statement->execute();
$result = $statement->fetchAll(PDO::FETCH_ASSOC);
// что бы я не делал, $result всегда равен false, хотя этот же код в консоле или в пхпмайадмин возвращает корректные данные.
foreach ($result as $item) {
//обработка результата
}
}
$res = '{"account" : ' . $account . "}";
}
} первый скуль-запрос выполняется корректно а вот вместо второго всегда приходит булевое значение, вроде фелс, тру не замечал. Штука в том, что если этот второй запрос вынести в консоль, то всё корректно отрабатывает, если запрос выполнить в пхп майадмине, тоже всё ок, а тут не работает, упорно возвращает false вместо данных из бд. Что я не так делаю? Может как-то надо сбрасывать драйвер бд между запросами или ещё какие-то премудрости, о которых я не догадываюсь?
Yaroslav
Народ, спасите меня, я мозг сломал уже. Второй день не могу понять, что за дичь. Вот кусок кода: $id = $_POST['id'];
$oldid = $_POST['oldid'];
if (($oldid == 0) && ($account > 0) || ($oldid > 0)) {
$sql = "INSERT INTO user_lessons (student_id,id) VALUES (" . $modx->user->id . ', ' . $modx->quote($id) . '); ' . ($oldid == 0 ? '' : ('DELETE FROM user_lessons WHERE (id = ' . $modx->quote($oldid) . ' ) AND (student_id = ' . $modx->user->id . ');'));
$stmt = $modx->prepare($sql);
//этот запрос выполняется корректно
if (!$stmt->execute([])) {
//...
} else {
if ($oldid == 0) {
//...
} else {
//вот с этого места начинаются странности
$sql1 = "SELECT id, date, teacher FROM calendar WHERE (id = " . $modx->quote($id) . ') OR (id = ' . $modx->quote($oldid) . ');';
$statement = $modx->prepare($sql1);
$statement->execute();
$result = $statement->fetchAll(PDO::FETCH_ASSOC);
// что бы я не делал, $result всегда равен false, хотя этот же код в консоле или в пхпмайадмин возвращает корректные данные.
foreach ($result as $item) {
//обработка результата
}
}
$res = '{"account" : ' . $account . "}";
}
} первый скуль-запрос выполняется корректно а вот вместо второго всегда приходит булевое значение, вроде фелс, тру не замечал. Штука в том, что если этот второй запрос вынести в консоль, то всё корректно отрабатывает, если запрос выполнить в пхп майадмине, тоже всё ок, а тут не работает, упорно возвращает false вместо данных из бд. Что я не так делаю? Может как-то надо сбрасывать драйвер бд между запросами или ещё какие-то премудрости, о которых я не догадываюсь?
скорее всего дело именно в том, что надо закрывать курсор именно после инсерта. Дело в том, что в модкс так не принято работать с апи, т.к. орм. орм насколько помню сам закрывает курсор после выполнения, возможно, поэтому раньше не сталкивался с подобной проблемой. для получения данных тоже запрос пожно конструировать через квери билдер а выполнять через стейтмент
Anton
ну у меня там голая таблица, без пдоклассов.
Anton
Поэтому делаю голые запросы
Anton
я так понимаю, что инсерт и делит возвращают свои тру/фолс, типа успешно вставили/удалили, и эта инфа остаётся в пдо где-то, пока не сбросишь буфер.
Anton
Да я нубас просто, мне проще было с запросами всё делать простыми, когда-нибудь и я научусь классы свои пилить.
Yaroslav
еще это драйвер-специфик операция. типа в mysql не нужно как правило делать. какая субд?
Anton
ну мускуль там.
Anton
думаю тут ещё штука в том, что там в первом запросе идёт и делит и инсерт через точку с запятой.
Anton
может это как-то влияет.
Anton
Ну я обещаю, что на следующем проекте, где что-то понадобится такое, я заставлю себя сесть и разобраться, как делаются свои классы)
Yaroslav
было бы интересно узнать что в логах MODX/PHP/httpd(nginx)
Yaroslav
модкс лучше вывести на уровень 3 log_level в сис. настройках
Anton
в логах модх вообще чисто было.
Anton
я поэтому голову и ломал.
Anton
потом выгуглил, что можно сделать так: $s->errorInfo()
Anton
ну и тут-то дело пошло.
Anton
там варнинг вылез, что буффер не сброшен из-за не завершенного предыдущего запроса.
Anton
Зато я теперь знаю ещё один способ выстрелить себе в ногу в модх.
Anton
ну просто кроме модх я больше с пхп и мускулем дел нигде не имею.
Андрей
https://modx.com/download - 2.7 уже выложили
Anton
2.7 это типа переходный перед третьим, без особых плюшек, просто подготовка к мажорному обновлению?
Андрей
Anton
не кисло там работы
Anonymous
не кисло там работы
Там и в самом деле много работы, но решили окончательно закрыть вторую ветку, чтобы не распыляясь пилить уже третью версию
Anonymous
После слития текущей и третьей ветки должно пойти веселее
Anonymous
У меня куча идей и заготовок в загашнике
Anonymous
Ну и там ещё 500 багов и фич в issues
Anonymous
Работы хватает в общем
Anton
Крутяк. Будем надеяться, что получится консерваторов победить. Я так понимаю, там ещё Василий крутые ПР заготовил в третью ветку.
Anonymous
К сожалению не очень
Anonymous
Есть способы сделать то, что сделал он более гладко
Anonymous
Частично его pr я пробовал растащить на куски и часть из них уже влили
Anonymous
У меня пока идея об вынесении ядра в отдельный пакет композер
Anton
Погулял по репозиторию. Пипец там так-то кода. Сколько же нужно времени, чтоб с этим разобраться и влиться в работу...
Anonymous
Я почти 10 лет с рево знаком, но в сами исходники стал вникать где-то с года 2015
Anonymous
Не так много на самом деле и нужно
Anonymous
Код по части довольно простой, много вещей делают почти одно и то же
Anonymous
Например процессоры
Anonymous
Только класс и пару параметров меняется
Anonymous
Есть много лишнего, что осталось по наследству
Anonymous
В рево до сих пор есть классы для парсинга синиаксиса ево
Anonymous
Anonymous
Но уже deprecated и будут удалены в 3.x
Anton
Ну я так понимаю, там очень много легаси-кода накопилось, который не позволяет некоторые современные вещи внедрять? А планируется совместимость старых пакетов с новой версией, или что-то переписывать/править придётся?
Anonymous
Сейчас все совместимо
Anonymous
Расхождения минимальны
Anonymous
Ну морда админки другая, но внутри все по старому
Anonymous
Есть Васин пр который все ломает
Anonymous
Задача найти обходные пути, чтобы всё работало и можно было обновлять всё активнее
Anton
тоесть эта третья версия - это мостик перед будущей планируемой движухой?
Anton
Я так понимаю, он это ПР не просто так сделал. Радикально, но идеи-то там правильные.
Anonymous
Вообще да
Anonymous
Но опять же, есть способ элегантнее
Anonymous
В ближайшее время вероятно напишу статейку или пару на эту тему
Anton
Классно, будет очень интересно почитать.
Андрей
Кто может подсказать где и как искать причину невесть с чего появившейся ошибки 403 Forbidden на главной странице?
Админка работает, внутренние страницы работают и главная в англоязычной версия тоже, а основная русскоязычная вылетает в 403. Мультиязычность делал на локализаторе, адреса различаются добавлениемв конце /ru/ и /en/.
С неделю назад переносил домен к другому регистратору, после переноса все норм было. Сегодня ночью вдруг перестала главная работать. Так понимаю, что с настройками сервера скорее всего проблема, но в них ведь уже год ничего не менялось. Хостинг на modhost.pro.
Владислав
После переноса была такая херня
Василий
У меня вот что-то не получилось, потому что при переводе ядра MODX на xPDO3 всё меняется. А xPDO3 в него добавил Jason, только до конца не закончил.
Это не Васин PR всё ломает, это Вася пытается закончить то, что Jason начал, а потом испугался и оставил висеть как есть - уже почти год
Иван
Вася привет!
Иван
А всему дело teleport)
Василий
Ну и новости - https://modx.pro/news/16963
Иван
Ну и спасибо за перевод
Василий
А всему дело teleport)
Мне кажется, там весь бизнес MODX LLC построен на текущей кодовой базе. Весь MODX Cloud, с которого они живут. И все их клиенты.
Поэтому заявили новую мажорную версию, а потом страшно стало. и всё сидим на берегу, покуриваем, думаем как дальше быть.
И поменять что-то хочется, и не можется, поэтому вот вам Fred.
Василий
А мой PR отлично работает, даже pdoTools3 есть, которые ставится на MODX с Fenom в composer, и miniShop2 с namespaces был в разработке.
А сейчас всё на паузе. Будем посмотреть на отмазки после релиза 2.7, больше поводов тормозить нет.
Иван
Может все-таки Иван разнесет все на разные PR. Как он и говорил ранее
Василий
Alexey
"Возможность установить MODX на хостинг через CLI (как логичное продолжение загрузки через Composer). Таким образом, теперь можно ставить MODX на сервер одной консольной командой."
крутяк. еще бы решить проблемы с установкой дополнений с помощью сборки Ильи Уткина и будет совсем здорово
Василий
Еще раз, если кто не понял.
В текущей версии MODX3 вся модель самой системы - от версии 2. А внутри встроен xPDO3 с переходниками.
Сгенерировать модель для дополнений, например miniShop2, чтобы оно работало в MODX3 можно только, внимание!, на MODX2.
Потому что xPDO3 в составе MODX3 генерирует модель с namespaces, которая не работает со старой моделью ядра.
Поэтому задача состоит в том, чтобы:
1. Перевести само ядро на модель нового формата. Потому что сейчас сам MODX3 для себя модель генерирует новой версии, а работать с ней не может
2. Перевести все сложные дополнения на эту новую модель, чтобы они могли собираться на xPDO3, на котором работает MODX3.
Как это можно решать костылями в мажорной версии - я без понятия. При изменении модели ядра меняется всё, вообще всё.
Соответственно, я всё и переписал. И даже так, что простые дополнения спокойно встают и работают, а сложные можно обновить для MODX3 за день-два.
Еще раз, если кто не понял. В текущей версии MODX3 не генерируется модель ни для его ядра, ни для любых дополнений. Точнее, генерируется, но он сам с ней работать не может.
Народ тестирует установку дополнений, сделанных для MODX2 на текущей версии MODX3 и радуется, если они работают. И, видимо, обновления этих дополнений для MODX3 тоже будут собирать на MODX2. Какой-то сюр.
При этом, есть сообщения о том, что это можно сделать как-то лучше и элегантнее, но никаких подтверждений в коде и PR - нет.
В общем, на этом всё и вставло. Низы не могут, верхи не хотят - Revolution подтверждает своё название.
Можете меня цитировать.
Alexey
Ахах, бесконечная революция, походу чтобы нормально всё стало, придётся в эволюшн обратно переименовывать)
alex
Еще раз, если кто не понял.
В текущей версии MODX3 вся модель самой системы - от версии 2. А внутри встроен xPDO3 с переходниками.
Сгенерировать модель для дополнений, например miniShop2, чтобы оно работало в MODX3 можно только, внимание!, на MODX2.
Потому что xPDO3 в составе MODX3 генерирует модель с namespaces, которая не работает со старой моделью ядра.
Поэтому задача состоит в том, чтобы:
1. Перевести само ядро на модель нового формата. Потому что сейчас сам MODX3 для себя модель генерирует новой версии, а работать с ней не может
2. Перевести все сложные дополнения на эту новую модель, чтобы они могли собираться на xPDO3, на котором работает MODX3.
Как это можно решать костылями в мажорной версии - я без понятия. При изменении модели ядра меняется всё, вообще всё.
Соответственно, я всё и переписал. И даже так, что простые дополнения спокойно встают и работают, а сложные можно обновить для MODX3 за день-два.
Еще раз, если кто не понял. В текущей версии MODX3 не генерируется модель ни для его ядра, ни для любых дополнений. Точнее, генерируется, но он сам с ней работать не может.
Народ тестирует установку дополнений, сделанных для MODX2 на текущей версии MODX3 и радуется, если они работают. И, видимо, обновления этих дополнений для MODX3 тоже будут собирать на MODX2. Какой-то сюр.
При этом, есть сообщения о том, что это можно сделать как-то лучше и элегантнее, но никаких подтверждений в коде и PR - нет.
В общем, на этом всё и вставло. Низы не могут, верхи не хотят - Revolution подтверждает своё название.
Можете меня цитировать.
ну крутяк))) а к развитию modx ты больше свою руку не прикладываешь?