Відразу уточню: цей метод максимально підійде саме новачкам, але тим, які хоч якось плавають в SQL, тому що якщо ви навіть не вмієте створювати таблички через phpMyAdmin, то спочатку слід вивчити саме основи MySQL і навчитися створювати таблички і писати найпростіші SQL- запити, і тільки потім вже сюди.
Ще уточнення: багато хто вважає, що правильно створювати вручну XML з описом БД, а потім вже з неї генерувати кінцеві об'єкти. Я з цим сперечатися не буду. Але це більш складна процедура, і особисто мені жодного разу не знадобилася. Ми розглянемо більш простий метод: створення своїх таблиць відразу в базі даних, а потім генерацію скриптом кінцевих об'єктів і XML з описом моделі, в який, до речі, можна вже дописати вручну зв'язку таблиць і згенерувати вже об'єкти зі зв'язками.
Отже, завдання: Створити свої таблиці і мати можливість формувати до них запити через xPDO і API MODX. Тобто, наприклад, створити таблицю modx_mypackage_my_table і потім мати можливість виконувати типу цього:
Думаю, завдання всім зрозуміла.
Тепер трохи узагальненої теорії, що і як нам треба буде зробити. 1. Створюємо потрібні нам таблиці в базі даних через phpMyAdmin (або хто що використовує для роботи з БД). Тільки відразу майте на увазі, що щоб було без гемора, префікси для таблиць треба задавати відрізняються від MODX-префіксів. Наприклад, якщо у MODX префікс modx_, то задавайте modx_myprefix_ або типу того. 2. Генеруємо скриптом кінцеву модель з файлами-класами. 3. Перед виконанням запитів до об'єктів або підключаємо пакет через $ modx-> addPackage (), або методом, описаним тут. 4. Все, можна працювати з об'єктами.
У даній статті ми розберемо наступні питання:
Створення призначених для користувача таблиць для MODx Revolution.
Генерація XML-схеми і php-файлів-класів для xPDO.
Робота з одними таблицями.
Одна з найбільших складнощів в переході з Evolution на Revolution - це xPDO ІМХО. Адже як раніше було просто: заліз в мускул через phpMyAdmin, створив табличку, і працюєш з нею, відправляючи чисті SQL-запити через $ modx-> db. Тепер же будь-які зміни в базі даних ні скільки не турбують $ modx, крім як повний drop таблиць і т.п. Як пов'язані між собою xPDO і MODx (а точніше $ modx), я написав тут. Вважаю складності в роботі з одними таблицями в MODx Revolution - чималим перешкодою для багатьох програмістів. Але насправді, все не так вже й складно. Весь розглянутий далі алгоритм в трьох словах:
Так само через phpMyAdmin (або інший зручний використовуваний інструмент) створюємо потрібні нам таблиці
За допомогою комплектного нижче код генеруємо необхідні для роботи xPDO файли
Використовуючи метод $ modx-> addPackage () довантажувати в потрібному місці наш новий клас і вже працюємо з нашими таблицями через методи $ modx-> getObject (), $ modx-> getCollection () і т.п.
Отже, необхідний нам для генерації файлів код (Исходник тут):
Заливаємо цей файл на сервер, прописуємо йому правильно шляху до конфігу MODx-а, і директорії, де будуть створені згенеровані файли. Звертаємося до файлу через браузер. В результаті в зазначеній папці повинні бути створені xml-файл, в якому будуть описані наші таблиці і php-файл. Ці файли, якщо дуже треба, можна перемістити в іншу папку, де ви вирішите зберігати свій новий Клас. Надалі ці файли завжди будуть потрібні для роботи зі своїми таблицями.
Тепер ви можете працювати зі своїми таблицями. Для того, щоб краще розуміти механізм взаємодії xPDO з XML-схемою, а так само розуміти, що прописується у файлі-генераторі, і які об'єкти отримуєте на виході, привожу свою замітку з даного питання. Чесно сказати, по початку без неї було просто ніяк ...
1. Підключення пакетів і виконання запитів до схеми
1.1 Вибірка записів з таблиці
Перше, що потрібно зробити, це розібратися що взагалі потрібно для того, щоб звернутися до схеми. Для цього вивчимо XML-файл. Ось основний блок созданой нами схеми:
Саме основне, що нам тут знадобиться, це:
значення атрибута package нам потрібно, щоб знати який пакет нам взагалі потрібно довантажувати. В даному випадку це testtbl. Викликати пакет будемо так:
Розглянемо уважніше параметри. $ Package. Назва пакета. У нашому випадку якраз testtbl $ path. Шлях до каталогу пакета (в якому є XML-файл і папка з назвою Об'єкту, в якому все PHP-файли) $ prefix. Якщо при створенні схеми вказувався префікс, відмінний від дефолтовая, то обов'язково потрібно його вказати.
Є ще одна маленька хитрість, як точно визначити необхідний префікс. Формула: $ prefix = $ fullTableName - $ tableName; Тут $ fullTableName - це повне ім'я таблиці бази даних, до якої звертаємося, $ tableName - значення атребута table тега