Дуже хитрі TV параметри

Дуже хитрі TV параметри

У MODX вони називаються Template Variables, тобтоTV.

Це дуже потужна система, і тэвешки можна створювати нескінченно багато, з різними властивостями та наворотами. Чим багато хто й зловживає.

Пояснюю чому. Один TV - це один рядок у таблиціmodTemplateVarResource. Якщо потрібно отримати 10 TV - це зазвичай 10 запитів до бази. Якщо потрібно відсортувати за ними – ще складніше та довше.

Ось і виходить, що "MODX гальмує", коли на один ресурс навішано штук 20 ТБ і вони виводяться на кожній сторінці з getResources.

Особисто я намагаюся їх взагалі не використовувати, але на думку спала цікава ідея.Потрібно дублювати TV в полі properties ресурсу, яке зберігає json рядок з будь-якою інформацією.

Ось плагін, для дублювання: Він дивиться в $_POST при збереженні ресурсу, і копіює TV куди треба. Зверніть увагу, що використовуються id параметри з префіксомtv. Можна, звичайно, отримувати імена TV, але це зайва робота при збереженні ресурсу. До того ж, якщо ви перейменуєте параметр, ця інформація не оновиться самостійно. Тому, тэвешки будуть простоtv1, tv2, tv3у масивіtvs.

Окремий масивtvsпотрібен, щоб не затерти щось потрібне, тому що поле properties використовують і компоненти, наприкладArticlesіTickets. Ключі перед збереженням сортуються, так що TV у полі завжди будуть за зростанням id.

А далі ми можемо виводити їх звичайним getResources, використовуючи плейсхолдери. Парсер розбирає масиви в ресурсі та склеює ключі через точку. Тобто значення TV параметрів будуть виводитися без зайвих запитів у БД. Звісно, ​​ працювати не буде — ну і фіг з ним.

У будь-якому випадку, це легко можна використовувати назавантажений на сайтах, для прискорення виведення ресурсів. Теоретично, можна навіть криво фільтрувати по полю properties, але мені так і не вдалося передати відповідний виклик параметр&where.

Можна написати сніпет на pdoTools і він повинен нормально вибирати, але я не перевіряв. У будь-якому випадку, ця фільтрація буде дуже обмеженою, просто пошук