Кирилл Киселев

Кирилл Киселев

С нами с 12 июля 2016; Место в рейтинге пользователей: #427

Расширенные поля пользователей

Небольшая пошаговая инструкция, как научиться сохранять любые интересующие данные о юзере в специальное поле extended.

На самом деле, это никакой не секрет. Во многих объектах MODX есть специальное поле типа JSON, которое хранится в БД как текст, например, properties у modResource и extended у modUserProfile.

При работе с объектами xPDO, JSON текст из этих полей превращается в массивы. То есть, общий принцип выглядит так:
// id нужного пользователя
$user_id = 15;
// Получаем объект modUser
if ($user = $modx->getObject('modUser', $user_id)) {
	// Получаем связанный с ним профиль пользователя
	if ($profile = $user->getOne('Profile')) {
		// Получаем специальное поле extended
		$extended = $profile->get('extended');
		// Добавляем новое значение
		$extended['mykey'] = 'mydata';
		// И сохраняем обратно в профиль
		$profile->set('extended', $extended);
		$profile->save();
	}
}
Самое приятное, что эти данные вы можете не только просмотреть на странице пользователя, но и изменить.
Василий Наумкин
07 апреля 2014, 11:00
modx.pro
40
16 892
+11

Вывод суммы прописью

Специально по просьбе Wassi Wassinen достал из нафталина, отряхнул пыль и публикую свой класс вывода сумм прописью, который основан на вот этих методах.

В оригинальной версии копейки писались цифрами, а теперь — буквами. Ради этого пришлось переписать больше половины кода.
Василий Наумкин
30 марта 2014, 11:19
modx.pro
6
3 421
+5

Использование xPDO без MODX

Некоторое время назад подписался помочь хорошему проекту Критиканство в написании парсера для автоматической загрузки скриншотов игр.
«Критиканство» — это крупнейший в российском сегменте интернета агрегатор критических отзывов на фильмы и игры. В нашей базе более 150 печатных и интернет-изданий, а количество рецензий на момент запуска (на март 2013 года) составило более 60 000.
Этот проект был запущен ребятами с прекрасного сайта kino-govno.com, к которому я питаю очень теплые чувства. Шутка ли, его создали авторы из лучшего журнала про игры — Game.EXE, который я до дыр зачитывал еще в школе.

Админка Критиканства создавалась в разное время разными специалистами и выглядит немного разрозненной. Тоже касается и таблиц базы данных — каждый разработчик мудрил с ними по своему.

Сам сайт сделан очень олдскульно и «чисто для себя». То есть, работает быстро, но все что можно зашито прямо в php код. Никаких ORM, никаких шаблонов, только то, что нужно.

Для разработки парсера мне предоставили полную свободу действий, поэтому я набросал новую версию админки с использованием шаблонов, xPDO и других любимых методик.
Василий Наумкин
18 марта 2014, 16:10
modx.pro
3
6 091
+3

Генерация расписания занятий на pdoTools


Увидел недавно вопрос на сообществе — человек хочет сгенерировать таблицу с расписанием занятий по дням.

Казалось бы, задача несложная, но это совсем не так. Стандартные сниппеты не предназначены для такой работы и их приходится запускать на каждый день недели. И даже если вас не волнует скорость работы, то в итоговой таблице будут пропущенные ячейки, что совсем не айс.

Можно сделать свой компонент расписаний, но это нужно далеко не всем, тем более, для вывода всего одной недели из дерева.

Поэтому предлагаю вам готовое решение, а заодно и демонстрацию работы с pdoTools. Конечно, можно было бы обойтись и родными методами MODX, но с ним быстрее.

Все нужные данные выбираются за один запрос, а дальше очень быстрая обработка и оформление на PHP.
Василий Наумкин
05 октября 2013, 03:56
modx.pro
17
6 155
0

Подавление ошибок php

Некоторое время назад мне сделали замечание, что использовать @ — «плохая привычка». На предложение доказать, что это именно так, я получил ссылку на Хабр, со статьей про управление ошибками.

Окей, наконец-то я узнал, как именно ими управлять, но чем же плоха привычка подавлять сообщения об ошибках, если ты знаешь, что делаешь?

На мой взгляд, плохого здесь нет и быть не может. Применение @ — это такое же управление ошибками, как и функция error_reporting() или директива в php.ini.

Однако, детальный разбор показал несколько иное.
Василий Наумкин
06 июля 2013, 16:45
modx.pro
3
11 575
0

Установка компонентов через MODX API

Предлагаю всем желающим готовую функцию для установки компонентов через Api.

Можно делать из консоли, можно из сниппета — не важно. Собственно загрузка файла выделена в отдельную функцию, которая пытается работать через file_get_contents(), если это не запрещено. Иначе использует cUrl.

Параметров всего 2: имя компонента и id провайдера пакетов (по умолчанию — 1, то есть, modx.com).
Василий Наумкин
21 марта 2013, 07:57
modx.pro
8
5 191
0

Динамические функции на замену фильтрам

Очередная модель от известного велосипедостроителя — меня.

Суть в следующем: заменить все фильтры в чанке на функции внутри сниппета, сделанного на pdoTools.
При этом, сами фильтры должны лежать как и раньше, сниппетами, а не быть жестко закодированы, чтобы их можно было удобно изменять и использовать также в в плагинах, или еще где.
Василий Наумкин
14 марта 2013, 18:36
modx.pro
3
2 419
0

Описание для системных настроек MODX из словаря

Есть распространённая проблема: компоненты из репозитория обычно идут с системными настройками, которые выглядят примерно так:

А хотелось бы вот так:

Все потому, что у объекта modSystemSetting нет полей для хранения ключа записи в словаре, в отличии от параметров сниппетов или плагинов.

Лично мне было лень разбираться, откуда же берутся нормальные записи для настроек ядра, если в объекте и БД их нет, но сегодня я себя переборол и всё прояснилось.
Василий Наумкин
24 января 2013, 12:38
modx.pro
3
3 223
0

Самые быстрые сниппеты с pdoTools

Давно изместно, что xPDO не нужен для выборки и вывода большого количества данных. Зачем его использовать, создавая кучу объектов, жрать процессор и память, если мы хотим просто выбрать 100 строк из БД и вывести их на экран?

Тут больше подойдет специальный сниппет, который будет работать через PDO, без объектов. Таких сниппетов я написал немало, и в один момент мне надоело их копипастить с разных проектов и изменять.

Тогда я написал себе список хотелок:
— Быстрое создание готового сниппета.
— Любые выборки, из любых таблиц с любыми условиями и джоинами.
— Учет времени на каждую операцию, подробный лог для выявления узких мест.
— Итоговые сниппеты должны работать с getPage, автоматически.
— Лёгкая кастомизация, оно не должно меня ограничивать.
— Самый быстрый рендер чанков, быстрее только вообще без них.

Simple Dream дали добро на это дело, и в итоге вышла мини-библиотека pdoTools, которая уже входит в состав Tickets и войдёт в miniShop2.

Она отвечает всем моим требованиям и позволяет писать самые быстрые сниппеты для MODX Revolution, всего за 10 минут.
Василий Наумкин
11 января 2013, 06:43
modx.pro
8
14 125
0

Подсчёт значений из присоединённой таблицы на xPDO

Сегодня понадобилось вывести список блогов с подсчетом количества тикетов внутри. Желательно, за один запрос, и чтобы обращал внимание на состояние дочернего тикета.

В итоге вышел простой и быстрый сниппет getSections:
Василий Наумкин
10 декабря 2012, 05:22
modx.pro
7
3 719
0