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

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

Был в сети 06 ноября 2025, 19:54
Заказы не принимаю
мой стаж программирования не позволяет мне похвастаться крупными вкладами в open source проекты, но я за бесплатное ПО и за улучшение его качества.
Это и есть ответ на вопрос. Вот когда сделаешь что-то большое, значимое для себя, вот тогда и решишь для себя как реагировать, когда какой-нибудь новичок в приступе борьбы за все хорошее будет копировать твое творение. Если ты найдешь и выпустишь много элементарных вещей за 190 руб. никто в обиде не будет. Главное найти хотя бы одну такую вещь.

Ещё раз повторю, дело не в деньгах. Ты не задумывался, почему я более крутые дополнения делаю бесплатно, а сайтстатистик за деньги? Только из соображений «внутренней» порядочности и из уважения к Валентину из АртДевю. Я сделал свое позже. А мой доход позволяет мне покупать новую Ауди А4 каждый месяц и ещё немного останется. Мне эти 300 руб. вообще никуда не упирались. Вопрос только в уважении разработчиков друг к другу. Ваше отношение с Гвоздем к уважению ясно, но Михаил проявил себя вполне достойно. Настоящий мужик. Уважаю.

Лично я готов сделать свое дополнение бесплатным хоть сейчас. Уверен Валентин не будет против.
Да, pdoFetch решает проблему со скоростью. По-моему, Василий писал, что оптимизировал вызов getChunk() в цикле — т.е. он зачитывает его в кеш при первом обращении и потом достает его при повторном запросе. Т.е.
foreach ($rows as $row) {
	...
	// Первый запрос в базу, остальные в кэш
	$output .= $pdo->getChunk('name', $row);
}
Но мой кусок кода будет чуть-чуть быстрее только из-за многочисленных проверок методов класса pdoFetch, сделанных для универсальности и проверки разных условий.

П.С. Кстати, ты проверил годовые периоды?

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

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

Никого не хочу обидеть. Ответ чисто гипотетический, если бы вдруг меня об этом спросили.
У меня опечатка в коде. В первой строчке должно быть так
$rows = $modx->getCollection('modResource', $q); // Про это я говорил заменить на newQuery.
Вот поправленный вариант
// Если использовать pdoTools
$where = array(); // Указать необходимое условие
$rows = $pdo->getCollection('modResource', $where); // Второй параметр: или id, или JSON, или массив
$output = '';
// Нужно указать название чанка
$chunk= $modx->getChunk('чанк');
foreach ($rows as $row) {
	// В чанке плейсхолдеры должны совпадать с именами ключей массива $row
	$modx->setPlaceholders($row);
	$modx->getParser()->processElementTags('', $chunk, false, false, '[[', ']]', array(), 10);
	$modx->getParser()->processElementTags('', $chunk, true, true, '[[', ']]', array(), 10);
	$output .= $chunk;
	$modx->unsetPlaceholders($row);
}
Михаил, не надо меня убеждать, что мои эмоции неправильные. Почему Василий обиделся на Володю за копирование небольшой части офиса (пользовательских контроллеров)? Ты сможешь это понять, когда будешь в такой же ситуации.
Я сделал сайтстатистик, чтобы заменить у себя HitsPage. И сделал его платным только из-за того, что считаю неправильно отбивать у них пользователей. Поэтому сделал выбор для пользователя — бесплатно меньше функций, платно больше. И ребятам из АртДевю не обидно. А чтобы пользователь чувствовал вес платного варианта, добавил ещё usersOnline, который вы и дарите тут.
Вопрос не в деньгах, а в солидарности разработчиков и уважении друг друга. Представь, что я сделаю свой бесплатный компонент, который копирует твой бесплатный. Т.е. ты ничего не потеряешь, но какие получишь эмоции?
На вскидку.
...
// Я бы заменил getCollection() на newQuery(). Быстрее и меньше памяти жрет.
$rows = $pdo->getCollection('modResource', $q);
$output = '';
// Нужно указать название чанка
$chunk= $modx->getChunk('чанк');
foreach ($rows as $row) {
	// В чанке плейсхолдеры должны совпадать с именами ключей массива $row
	$modx->setPlaceholders($row);
	$modx->getParser()->processElementTags('', $chunk, false, false, '[[', ']]', array(), 10);
	$modx->getParser()->processElementTags('', $chunk, true, true, '[[', ']]', array(), 10);
	$output .= $chunk;
	$modx->unsetPlaceholders($row);
}
На 30 объектах время сократится раза в 2.
$assigned   =  $instance;
Этот код клонирует объект $instance и записывает в переменную $assigned указатель на клонированный.
Вообще не так. Подумай, зачем тогда нужна конструкция clone? И почему тогда, если это разные объекты, изменение $assigned изменяет $instance?

На самом деле объект всегда один (начиная с PHP 5). Но в первом случае создается ещё один псевдоним объекта и получается, что две переменных ссылаются на один объект. Когда мы разрываем одну связь ($instance = null), вторая переменная ($assigned) всё ещё хранит ссылку на объект. Работая с двумя переменными, мы, на самом деле, работаем с одним объектом. Но удалить можно только связь с объектом. И когда удалится последняя связь, то удалится и сам объект. Похоже на жесткую ссылку в Linux.
А во втором случае, переменная $reference — это прямая ссылка на объект в памяти. И в данном случае, присваивая переменной $reference NULL, обнуляется не связь, а сам объект, т.е. в память по адресу объекта записывается NULL.