Контактная информация

По всем интересующим вас вопросам связывайтесь при помощи контактной информации приведенной на этой странице!

telegram: @Accusser
skype: metsof
email: accusser@gmail.com

В социальных сетях...

Форма обратной связи

Авторизация

CMPGenerator MODX Revolution

Сайдбар

Что такое CMPGenerator?

CMPGenerator предназначен для использования PHP-разработчиками, которые хотят создавать настраиваемые табличные базы данных, которые будут использоваться через сниппет, плагин или CMP. CMPGenerator представляет собой GUI (графический интерфейс), создает схемные xpdo-файлы и xpdo-классы для пользовательских таблиц баз данных всего лишь одним нажатием кнопки. Это позволяет быстро начать использовать xpdo в пользовательских проектах.

Необходимые знания разработчиков

• Базы данных - MySQL

• PHP

• И тогда вы можете начать использовать XPDO

• стандарты кодирования MODX

История

CMPGenerator был написан Джошем Галледжем (Josh Gulledge), чтобы предоставить возможность простого создания и добавления пользовательских таблиц в CMP, сниппет или плагин. CMPGenerator написан в июле 2011 года, а первый публичный релиз состоялся в начале 2012 года.

Установка

Установить CMPGenerator можно в рамках менеджера MODx Revolution с помощью менеджера пакетов.

Как использовать

1. Создайте таблицы баз данных методом, которому Вы отдаете предпочтение - PhpMyAdmin, SQLyog, и т.д.

Обратите внимание, Ваш автоматический инкрементный первичный ключ должен быть назван ID

2. Теперь создайте новый пакет

- Выберите уникальное имя, это пригодится для создания префикса для ваших пакетов.

Например, Вы можете использовать ваши инициалы по схеме First Middle Last: fmlMyCustomPackage

Также убедитесь, что вы используете только буквы и значения

- Объедините новосозданные таблицы в список, разделенный запятыми

- Укажите префикс для таблицы, если такой имеется. Рекомендуется использовать тот же префикс, который указан для установки MODX.

- Выберите, если вы хотите построить схему. Если Вы не сделаете этого, не можете использовать таблицы.

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

3. После создания файлов, если Вы используете таблицы со связями, которые могут понадобиться, вручную добавьте этот код в файл: core/components/YOUR-CMP/model/YOUR-CMP/YOUR-CMP.mysql.custom.schema.xml.


После обновления этого файла, чтобы показать связи, Вы можете регенерировать пакет. Отметьте в Build Scheme “No”, Build Package – “Yes” и сохраните.

BuildScheme – создает или воссоздает XML-файл. Убедитесь, что вы установили в этой опции “No”, если Вы вносили какие-либо изменения в файл.

BuildPackage – создает или воссоздает файлы xpdo-класса, запрашиваемые пакетом.

При создании нового CMP, CMPGenerator создает все папки для CMP как в assets/components/MYCMP, так и в core/components/MYCMP.

Выполните следующие действия после установки CMPGenerator.

1. Создайте таблицу modx_test с любимым SQL GUI или командной строкой:


CREATE TABLE `modx_test` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(64) NOT NULL,
  `description` VARCHAR(64) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8

2. Далее откройте Manager CMPGenerator и нажмите на кнопку Create Package

Заполните информацию в таблице, которую мы только что создали и выберите имя пакета:



3. Вы нажимаете сохранить все файлы, созданные в /your MODX/core/components/mytest/

4. Теперь проверяете, получилось ли и создаете простой сниппет, чтобы проверить нашу вновь созданную таблицу.

Называете сниппет mytest и вставляете следующий код:

mytest Snippet Code


<code><!--?php
/**
 * mytest table
 */
 = '';// это то, что возвращает сниппет
// добавьте пакет, чтобы можно было использовать xpdo:
 = --->getOption('core_path').'components/mytest/model/';
// посмотрите на файл-схему и элемент xml модели и Вы увидите атрибутивный пакет, который должен соответствовать:
$modx->addPackage('mytest', $package_path);
// давайте добавим данные!
// посмотрите на файл-схему и элемент объекта xml и Вы увидите атрибутивный класс, который должен соответствовать:
$myRow = $modx->newObject('Test');
$data = array(
        'name' => 'MODX Revolution',
        'description' => 'A great CMS product...'
    );
$myRow->fromArray($data);
if ( !$myRow->save() ) {
    $output .= '</code>

Could not create row

<code>';
} else {
    $output .= '</code>

Created row successfully

<code>';
}
// теперь давайте покажем данные в быстрой таблице:
$output .= '
';
// Запомните: для всех HTML нужно использовать чанки: http://rtfm.modx.com/display/revolution20/Chunks#Chunks-ProcessingChunkviatheAPI
/* build query */
$query = $modx->newQuery('Test');
$rows = $modx->getIterator('Test', $query);
/* iterate */
$list = array();
foreach ($rows as $row) {
    // для объекта к упорядочиванию можно сделать $row->get('name');
    $row_array = $row->toArray();
    $output .= '
    ';
}
$output .= '</code>
ID Name Description
'.$row_array['id'].' '.$row_array['name'].' '.$row_array['description'].'
<code>';
return $output;</code>



5.Теперь вводите сниппет в ресурс и запускаете несколько раз.



<code>[[!mytest]]</code>



Вы должны увидеть что-то вроде этого (помните, на странице my test есть CSS, заданный к таблицам)

Использование внешних баз данных

Добавлено в 1.1

Внешняя база данных означает базу данных второй или третьей стороны. Пример, который должен быть Вам знаком – база данных modx в качестве Вашей MODX db и, возможно, у Вас есть crm для Вашей CRM db. crm в этом случае – внешняя база данных. Начиная с версии 1.1 для создания файла Ваша внешняя база данных должна быть на той же машине, что и Ваша MODX DB и MySQL. Пользователь базы данных, использующий MODX, также должен иметь разрешение на доступ к внешней базе данных.

При запуске CMPGenerator заносит в базу данных имя и, при необходимости, префикс таблицы. Теперь, когда Вы создаете сниппет, Вам нужно будет создать новый образец xPDO, а затем вы можете вводить код как обычно (с помощью ссылки на Вашу $foreignDB вместо $MODx, конечно). См. пример кода ниже.

Базовый пример фрагмента кода

<?php
require_once $modx->getOption('core_path').'config/foreigndb_config.php';
$output = '';// this is what the snippet will return
$foreignDB = new xPDO('mysql:host=' . $foreign_database_host.';dbname='.$foreign_database_name/*.';charset='.$foreign_database_charset*/,
  $foreign_database_username,
  $foreign_database_password );
$package_path = $modx->getOption('core_path').'components/foreigndb/model/';
// see the scheme file and the xml model element and you will see the attribute package and that must match here
// make sure you set the prefix as empty if you don't use it
if ( !$foreignDB->addPackage('foreigndb', $package_path, '') ) {
  return 'Can not load package';
}
// lets add some data!
// see the scheme file and the xml object element and you will see the attribute class and that must match here
$myRow = $foreignDB->newObject('EventName');
$data = array(
  'name' => 'MODX Revolution',
  'description' => 'A great CMS product...'
  );
$myRow->fromArray($data);
if ( !$myRow->save() ) {
  $output .= '<p>Could not create row</p>';
} else {
  $output .= '<p>Created row successfully</p>';
}
// now lets show the data in a quick and dirty table:
$output .= '
<table>
  <tr>
  <th>ID</th>
  <th>Name</th>
  <th>Description</th>
  </tr>';
// Note for all HTML you should be using Chunks see: http://rtfm.modx.com/display/revolution20/Chunks#Chunks-ProcessingChunkviatheAPI
/* build query */
$query = $foreignDB->newQuery('EventName');
$rows = $foreignDB->getIterator('EventName', $query);
/* iterate */
$list = array();
foreach ($rows as $row) {
  // from object to array you can also do $row->get('name');
  $row_array = $row->toArray();
  $output .= '
  <tr>
  <td>'.$row_array['id'].'</td>
  <td>'.$row_array['name'].'</td>
  <td>'.$row_array['description'].'</td>
  </tr>';
}
$output .= '
</table>';
return $output;