Тонкости и трюки

Авторизация в админке с фронтенда

Разбираю старые плагины на bezumkin.ru, и наткнулся на небольшой lifehack — вроде еще не публиковал.

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

Это делается очень просто:

if ($modx->event->name == 'OnWebPageInit') {
	if (!$modx->user->hasSessionContext('mgr') && $modx->user->isMember('Administrator')) {
		$modx->user->addSessionContext('mgr');
	}
}


Всего 5 строк, и в админку можно входить с фронтенда через HybridAuth.

Читать дальше

Вывод категорий с присоединением товара

Вот многие сравнивают pdoTools с другими сниппетами, забывая, что сравнивать можно не только скорость, но и возможности.

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

В итоге выходит вот такой листинг раздела товаров:


Конечно, вызов сниппета довольно сложный, и местами похож на извращение, но работает.

Читать дальше

Плоское меню из категорий товаров

Возникла задачка: выбрать все категории товаров и вывести их списком в одном месте. Этакое «плоское меню».

6 блоков, по 2 категории в каждом, итого 12 небольших меню. При этом, конечно, категории товаров находятся на разной глубине, и даже вложены друг в друга.

Ни один стандартный сниппет так не сделает, поэтому пришлось написать свой.

Читать дальше

Вывод ТВ со своим оформлением

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

Конечно, менеджеру должно быть удобно и html теги он писать не собирается.

Использовать для этого TinyMCE не хочется — слишком просто в нем сломать верстку. Поэтому я решил использовать ТВ и выводить их в нужном мне виде простым сниппетом.

Читать дальше

Переключение контекстов в зависимости от URL

Периодически появляется задача — создать несколько контекстов и сделать так, чтобы нужный загружался для работы автоматически в зависимости от URL. Будем считать, что ЧПУ настроены. Более никаких изменений ни в .htaccess, ни в конфигах сервера. Ведь часто встречаются злые хостеры, которые не позволяют этого делать. А еще нежелательно создавать подкаталоги и копировать в них index.php, иначе после каждого обновления придется следить за его изменением.

Читать дальше

Вывод секций для публикаций Tickets

При создании нового тикета, в форме выводится список секций, доступных для пользователя.
Чтобы иметь возможность публиковать тикеты, юзер должен быть авторизован и входить в группу, у которой есть разрешение section_add_children для секций тикетов.

По умолчанию, Tickets выбирает все доступные секции, что не очень удобно, если сайт большой.
Поэтому, я написал простенький сниппет, который позволяет указать

  • &parents — список контейнеров, где искать секции тикетов
  • &depth — глубина выборки
  • &tpl — шаблон оформления секции
  • &sortby — сортировка, по умолчанию — «menuindex».
  • &sortdir — направление сортировки, по умолчанию «desc».
  • &where — дополнительные параметры выборки.
Возможно, он войдёт в состав Tickets на постоянной основе, но не факт.

Читать дальше

@EVAL не работает в поле "Значение по умолчанию" у ТВ

modx revo 2.2.7.
Если в поле «Значение по умолчанию» некоторого TV-параметра указать:

@EVAL return $modx->runSnippet('snippet');
то значение по умолчанию при создании ресурса не устанавливается.
Значение по умолчанию в этом случае устанавливается только при нажатии на зелёном кружке.

Если же указать так:
@EVAL return 5;
то значение устанавливается в 5 сразу же при создании ресурса.

Как сделать так, чтобы при использовании EVAL+runSnippet значение по умолчанию устанавливалось сразу (без нажатия на зелёном кружке)?

Читать дальше

Дополнительное поле в свойствах товара в 2 клика

Для тех, кому не хватает полей товара, и хотелось бы еще хотя бы одно, не дописывая плагин, можно сделать следующее:

  1. Зайти в пункт «Настройка системы».
  2. Выбрать пространство «minishop2».
  3. В настройке «Основные поля панели товара» добавить «description», например перед «introtext», естественно отделив запятой.
Собственно и все, +1 поле готово к использованию.

Читать дальше

Очень хитрые TV параметры

У любого ресурса MODX есть ограниченное число полей, таких как pagetitle, content, introtext. Чтобы расширить этот функционал, и добавить, например, картинку к заметке — нужны дополнительные поля.

В MODX они называются Template Variables, то есть, TV.

Это очень мощная система, и тэвэшки можно создавать бесконечно много, с разными свойствами и наворотами. Чем многие и злоупотребляют.

Объясняю почему. Один TV — это одна строка в таблице modTemplateVarResource. Если нужно получить 10 TV — это обычно 10 запросов в базу. Если нужно отсортировать по ним — еще сложнее и дольше.

Читать дальше