Сергей Шлоков

Сергей Шлоков

Был в сети 06 ноября 2025, 19:54
Заказы не принимаю
Тут же проблема не в самом принципе расширения, а в том, что не до конца продуман функционал. С таким же успехом можно было бы озаглавить топик «Как не надо программировать в MODX» или вообще обобщить «Как не надо программировать».
Прошу не относится критически, просто размышление.
П.С. Но к содержанию претензий нет, поэтому плюсанул.
В том то и дело, что теоретически, между получением и записью, другой пользователь тоже получит старое значение и увеличит. Практически получится увеличение на единицу, а должно на две единицы. Это не вариант.
Теоретически да, но практически вряд ли. Разница между этими операциями составляет доли секунды. Вероятность, что кто-то попадет как раз между, крайне мала. Думаю, что даже если постараться нажать одновременно с кем-то, то все равно не получится.
Ну а в случае использования PDO для таких страхов вообще нет почвы.
Вы не совсем понимаете суть транзакций. Их, как правило, используют для одновременного изменения нескольких записей. И если одну из операций выполнить не удалось, то нужно откатить уже проведенные. В вашем примере они не причем.
Хорошо, с транзакциями диалога не получается, может быть подскажите как на xPDO составить такой запрос
UPDATE VotesTable SET votes = votes+ 1 WHERE id = 10
На xPDO такой запрос можно сделать в 2 этапа:
1. Сначала получить количество голосов, увеличить на 1 и записать в переменную.
2. Выполнить тот запрос, который указан в конце вашего поста с подстановкой переменной из первого шага.
А можно сделать на PDO, как выше написал Василий.

П.С. Кстати, можно упростить ваш пример. Вместо
$c =$modx->newQuery('VotesTable');
$c->where(array(
	'id' => 10,
));
//Получили объект
$item = $modx->getObject('VotesTable', $c);
достаточно сделать так
$id = 10;
$item = $modx->getObject('VotesTable', $id);
Человек, ценящий чужой труд и чужое мнение, никогда не напишет
Отдельно про дескрипшн: не представляю, кому это надо
Ни один человек в мире не знает насколько хорошо вы можете себе что-либо представлять, чтобы считать ваше мнение авторитетным.
Я от этой болезни излечился 20 лет назад. Ни в коем разе не хотел вас обидеть. Просто перечитайте первую строчку моего предыдущего комментария.
П.С. Меня не расстраивают минусы. Главное, чтобы Вам помогало.
Проще в настройках отключить дескрипшн для меню ...
Всегда забавляет подобная формулировка. Кому проще? Вам? Значит эта заметка не для вас. Кроме того, решение с отключением описания меню уже обсуждалось. Лично мне не нравится такой вид. Я предложил альтернативу. Вы лично против существования в мире альтернативных решений???
Ширина определяется не автоматически, хотя можно сделать и так. В моем примере только 2 колонки предусмотрено — width: 544px;
Кому надо 3 колонки — увеличиваем width до 816.
П.С. Я же говорю, что решение простенькое :) Да и пригодится единицам. Так что пулреквест будет мертворожденным.
Думаю, с вашей ценой вы скорее нарветесь на игнор, чем на обиды. Даже вами же предложенный объем работ (заниженный, кстати) не соответствует предложенной вами стоимости. Сейчас средняя цена фрилансера около 500 руб/час. Если считать день за 8 часов, то получаем 7 дней = 56 часов. Умножаем на 500 и получаем 28 тыс. р. И это только по вашей оценке. Вот и думайте.
Не думаю, что даже половина разработчиков меняет расположение этих папок. Но для безопасности лучше это сделать.
Перемещают обычно только core — выносят на уровень выше. А manager и connectors обычно просто переименовывают.
И еще вот совет
//Чтобы исключить подмены HTTP_HOST, нужно в конфиге вместо
$http_host= $_SERVER['HTTP_HOST'];
// указать свой хост или определить константу
define('MODX_HTTP_HOST', 'mysite.com');
// или в настройках контекста указать site_url или вызывать тег [[!++site_url]] некэшированным