Урок xPDO 1. Создание классов из таблиц базы данных

Статья недоделана!

Давайте разберём как исползовать такой мощный инструмент MODx как xPDO (OpenExpedio это название для открытых расширений PDO), необходимые для использования MODx xPDO методов с вашими пользовательскими таблицами базы данных. В данном уроке разберёмся как использовать xPDO для операций со своими таблицами базы данных без создания Транспортного пакета, чтобы поделится своими классами с остальными. Если вы хотите распространять пакет, содержащий ваши классы, то вам необходимо просмотреть другие уроки по созданию пакета с пользовательскими таблицами. Doodles уроки также включают информацию о создании Пользовательской страницы в менеджере - Custom Manager Page (CMP) для управления данными таблиц ваших данных. Рекомендуется вначале пройти через это занятие, чтобы прочувствовать как происходит весь процесс.  

Лучший способ создания классов xPDO

Этот урок подразумевает, что вы импортировали свои пользовательские таблицы в базу данных MODx. Если нужен доступ к таблицам в другой базе данных, нужно следовать этим же шагам в данном уроке, но в сниппетах, которые вызывают классы, вам нужно создать новый экземпляр объекта xPDO. Это будет выглядет приблизительно так:

$xpdo = new xPDO('mysql:host=localhost;dbname=mydatabase', $database_user,$database_password,$table_prefix);

Для целей этого урока, мы создадим простую таблицу баз данных, которая будет хранить записи наших четырёх полей: id, quote, topic и author. Мы назовём таблицу bobs_quotation (примите во внимание префикс таблицы: 'bobs_' — всегда заканчивайте ваш префикс знаком подчёркивания). Хорошей практикой является использование разных табличных префиксов, а не тех, что находятся в вашей базе данных MODx (на самом деле, это необходимо делать в связи с текущей версией writeSchema(), но это может изменится) и использование существительного единственного числа для названия таблицы, потому что имя таблицы бедет именем вашего класса. Неплохой идеей будет создание отдельной локальной установки для этого урока MODx, так как мы будем изменять базу MODx, в то же время единственным изменением будет добавление пользовательской таблицы. Сниппет CreateXpdoClasses не изменяет базу данных он просто читает её и создаёт файлы в директории core/components/.

Обзор процесса создания классов

Мы собираемся создать  "пакет" называемый "quotes" с необходимыми классами для использования xPDO с нашей таблицой bobs_quotation. С целью использования xPDO с пользовательской таблицей, вам необходим набор классов и файлов-карт, которые будут использованы для создания необходимых классов.  MODx  сам по себе имеет их в своей директории core/model/modx/ . Мы будем размещать наши классы в директории core/components/. В это место обычно размещают свои классы устанавливаемые дополнения. В любом сниппете, который использует классы, вам необходимо сообщать xPDO, где находятся файлы в вызове, - addPackage(). Для создания файлов, мы будем использовать два метода класса xpdogenerator: writeSchema() и parseSchema().

Первый, writeSchema(), записывает схему - XML файл, который строится на основе указанной нами таблиц(ы) в базе.  Этот файл содержит формальное описание таблиц(ы) базы данных, которое будут использовать методы xPDO для доступа к каждой таблице. Схема MODx находится в файле core/model/schema/modx.mysql.schema.xml (если вы захотите на неё взглянуть).

Для нашей схемы сниппет CreateXpdoClasses вычислит путь к файлу-схеме исходя из названия пакета. Наш пакет называется "quotes", поэтому путь будет core/components/quotes/schema/. Наш файл-схема будет называтся "quotes.mysql.schema.xml" и будет находится в той директории. Мы таже включим в аргумент префикс "bobs_", таким образом writeSchema() будет обрабатывать таблицы только с этим префиксом. У нас есть только одна таблица, но если мы хотим иметь больше с таким префиксом, то writeSchema() обработает все их и разместит все их описания в файле-схеме. Размещение файла-схемы произвольное, но мы его положим в стандартное место.

Второй метод, parseSchema(), также мало интересует, где находится схема-файл. Он берёт два аргумента: первый говорит, где находится файл-схема, а второй, куда ложить классы и файлы-карты (также произвольное место). Сниппет CreateXpdoClasses автоматически использует пути, которые мы даём для writeSchema(), чтобы найти файл-схему и вычислить местоположение для класса файлов-карт базируясь на имени пакета. Эта вторая часть будет core/components/quotes/model/quotes/. Этот путь вы используете в сниппетах, которые используют файлы классов и файлы-карт, чтобы сказать $modx->addPackage(), где они находятся. Методу addPackage() также не важно, где находятся файлы, пока вы правильно указываете им пути к ним.

Как только сниппет CreateXpdoClasses запущен, то у вас появится следующая структура в директории core/components/quotes/:

quotes model quotes mysql quotation.class.php quotation.map.inc.php quotation.class.php schema quotes.mysql.schema.xml

В сниппетах или плагинах, которые используют файлы класса вам необходимо использовать правильное название класса в любом вызове методов xPDO (например, getObject(), getCollection() и др.). Если вы неуверенны в правильности названия, то взгляните в файл-схему. У него будет строчка для каждого объекта, начинающаяся с <object class="className".

Создание таблицы

Используя PhpMyAdmin, откройте вашу базу данных MODx и нажмите вкладку "SQL". Вставьте следующий код в окно и нажмите кнопку "Go".

 

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

CREATE TABLE IF NOT EXISTS `bobs_quotation` (

`id` int(25) unsigned NOT NULL auto_increment,

`quote` mediumtext NOT NULL,

`author` varchar(200) NOT NULL default '',

`topic` varchar(20) NOT NULL default '',

PRIMARY KEY (`id`),

KEY `topic` (`topic`),

KEY `author` (`author`),

FULLTEXT KEY `quote` (`quote`,`author`,`topic`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=0 ;

 

Также нам нужно сделать некоторые вставки в таблицу с целью протестировать наши классы. По-прежнему находясь в PhpMyAdmin, выберите таблицу bobs_quotation и нажмите вкладку "Insert" наверху. Добавьте парочку записей с заполнением столбцов topic и author поля - Value fields (оставьте поле id пустым и не перепутайте с другими полями), далее нажмите кнопку "Go" внизу. Добавьте еще несколько полей, если хотите. Далее, если вы нажмете на вкладке "Browse", то увидите ваши записи в таблице. Нажмине на иконку карандаша и сможете отредактировать её.

Установка сниппета CreateXpdoClasses

Сниппет может быть доступен как Транспортный пакет, который вы можете загрузить и установить, используя Менеджер пакетов кнопка "Download Extras". Как другой вариант, вы можете скопировать и вставить код внизу этой страницы или из загруженного здесь сниппета 'CreateXpdoClasses'.

Либо берём этот файл