Не подключаются сторонние таблицы в xPDO

Не могу подключить свои сторонние таблицы для вывода их через xPDO, а не напрямую из базы.
Мне нужно подключить 2 таблицы с базой стран и городов.
Что я делал:


  1. Таблицы city и country переименовал на всякий случай в modx_baz_city и modx_baz_country
  2. Через CMP Generator сгенерировал схему модели. Ввёл следующие данные: Package Name — country, Tables — modx_baz_country,modx_baz_city, Prefix — modx_, Build Schema — Да. Остальное оставил по умолчанию (только схему, пакет не создавал).
  3. Добавил запись в extension_packages с помощью $modx->addExtensionPackage('country', '[[++core_path]]components/country/model/');
  4. Попытался в сниппете подключить и вызвать свои таблицы — не получается. Как правильно вызвать пакет и проверить его работу?


Код сниппета вместе со всеми неудачными попытками вызова (всё закомментировано):
<?php
ini_set("display_errors",1);
error_reporting(E_ALL);

// $modx->addPackage('country', $modx->getOption('core_path').'components/country/model/','modx_baz_');
// $modx->addPackage('country', MODX_CORE_PATH . 'components/country/model/');

// $countries = $modx->getCollection('country');
// $modx->getService('');
// echo 'Всего стран: '.count($countries);

// $myRow = $modx->newObject('BazCountry');
// echo $myRow->_table;

// $object = $modx->getObject('BazCountry', 1);

// $document = $modx->getObject('bazCountry',array(
// 'country_group' => 1
// ));
// $document = $document->toArray();
// print_r($document);

// $docArray = $modx->getCollection('BazCity');
// $phpArray = $object->toArray();

// $countries = $modx->getCollection('BazCity');
// echo '<b>Всего стран: '.count($countries).'</b>';

// $item = $modx->newObject('BazCountry');
// $item->save();


Код модели схемы из core/components/country/model/country/country.mysql.schema.xml

<?xml version="1.0" encoding="UTF-8"?>
<model package="country" baseClass="xPDOObject" platform="mysql" defaultEngine="MyISAM" version="1.1">
	<object class="BazCity" table="baz_city" extends="xPDOObject">
		<field key="id_city" dbtype="int" precision="10" attributes="unsigned" phptype="integer" null="false" index="pk"  generated="native" />
		<field key="id_region" dbtype="int" precision="10" attributes="unsigned" phptype="integer" null="false" index="index" />
		<field key="id_country" dbtype="mediumint" precision="8" attributes="unsigned" phptype="integer" null="false" index="index" />
		<field key="oid" dbtype="int" precision="10" attributes="unsigned" phptype="integer" null="false" />
		<field key="city_name_ru" dbtype="varchar" precision="255" phptype="string" null="true" />
		<field key="city_name_en" dbtype="varchar" precision="255" phptype="string" null="false" />
		<field key="city_name_ro" dbtype="varchar" precision="255" phptype="string" null="false" />

		<index alias="PRIMARY" name="PRIMARY" primary="true" unique="true" type="BTREE" >
			<column key="id_city" length="" collation="A" null="false" />
		</index>
		<index alias="id_region" name="id_region" primary="false" unique="false" type="BTREE" >
			<column key="id_region" length="" collation="A" null="false" />
		</index>
		<index alias="id_country" name="id_country" primary="false" unique="false" type="BTREE" >
			<column key="id_country" length="" collation="A" null="false" />
		</index>
	</object>
	<object class="BazCountry" table="baz_country" extends="xPDOObject">
		<field key="id_country" dbtype="mediumint" precision="8" attributes="unsigned" phptype="integer" null="false" index="pk"  generated="native" />
		<field key="oid" dbtype="int" precision="10" attributes="unsigned" phptype="integer" null="false" />
		<field key="alpha3" dbtype="varchar" precision="5" phptype="string" null="false" />
		<field key="iso5" dbtype="varchar" precision="5" phptype="string" null="false" />
		<field key="country_name_ru" dbtype="varchar" precision="50" phptype="string" null="false" index="index" />
		<field key="country_name_en" dbtype="varchar" precision="50" phptype="string" null="false" />
		<field key="country_name_ro" dbtype="varchar" precision="50" phptype="string" null="false" />
		<field key="country_hidden" dbtype="tinyint" precision="1" phptype="integer" null="false" default="0" />
		<field key="country_group" dbtype="tinyint" precision="1" phptype="integer" null="false" default="2" />
		<field key="country_name_ru_from" dbtype="varchar" precision="75" phptype="string" null="false" />
		<field key="country_name_ru_to" dbtype="varchar" precision="75" phptype="string" null="false" />

		<index alias="PRIMARY" name="PRIMARY" primary="true" unique="true" type="BTREE" >
			<column key="id_country" length="" collation="A" null="false" />
		</index>
		<index alias="country_name_ru" name="country_name_ru" primary="false" unique="false" type="BTREE" >
			<column key="country_name_ru" length="" collation="A" null="false" />
		</index>
	</object>
</model>

Итак, вопросы (первый самый главный, остальные думаю отпадут если первый заработает):
  1. Как правильно подключить мои таблицы чтобы можно было работать с ними через xPDO?
  2. Как проверить подключение таблиц в сниппете?
  3. Как вывести значения из таблиц в сниппете?
Василий Столейков
04 июня 2015, 07:34
modx.pro
3
1 984
+1
Поблагодарить автора Отправить деньги

Комментарии: 10

Василий Столейков
04 июня 2015, 11:05
0
У меня есть большие пробелы в этом направлении, но я постоянно пытаюсь их восполнить — отсюда и эти вопросы (может быть для кого-то они покажутся глупыми)…
    Сергей Шлоков
    04 июня 2015, 15:40
    0
    Начинать надо с лога. А там должно быть написано, почему например не выполняется такой код
    $docArray = $modx->getCollection('BazCity');
      Василий Столейков
      04 июня 2015, 15:48
      0
      В логах:
      [2015-06-04 15:47:32] (ERROR @ /index.php) Could not load class: BazCity from mysql.bazcity.
      [2015-06-04 15:47:32] (ERROR @ /index.php) BazCity::loadCollection() is not a valid static method.
      Это при следующем коде:
      $modx->addPackage('country', $modx->getOption('core_path').'components/country/model/','modx_baz_');
      $docArray = $modx->getCollection('BazCity');
        Сергей Шлоков
        04 июня 2015, 15:53
        0
        А зачем ты указываешь префикс? Убери.
        $modx->addPackage('country', $modx->getOption('core_path').'components/country/model/');
          Василий Столейков
          04 июня 2015, 15:55
          0
          Пробовал по разному. Без префикса результат всё тот же:
          [2015-06-04 15:54:33] (ERROR @ /index.php) Could not load class: BazCity from mysql.bazcity.
          [2015-06-04 15:54:33] (ERROR @ /index.php) BazCity::loadCollection() is not a valid static method.
            Сергей Шлоков
            04 июня 2015, 16:04
            0
            Явно не подключается пакет. Попробуй пересоздать, проверь пути, название.
            Попробуй так, чтобы проверить наверняка
            if (!$modx->addPackage('country', $modx->getOption('core_path').'components/country/model/')) {
              print 'Ошибка подключения пакета!';
            }
              Василий Столейков
              04 июня 2015, 16:06
              0
              Ок, попробую, уже в который раз…
              Кстати, проверка
              if (!$modx->addPackage('country', $modx->getOption('core_path').'components/country/model/')) {
                print 'Ошибка подключения пакета!';
              }
              не срабатывает — пустой экран. И в логах тоже пусто.
                Сергей Шлоков
                04 июня 2015, 16:11
                +1
                Удали пакет. И папку в компонентах удали. А потом пересоздай заново. Алгоритм создания правильный. Но видимо где-то допустил ошибку.
                  Василий Столейков
                  04 июня 2015, 16:21
                  1
                  0
                  Ура! Завелось!
                  Следующий код сработал без проблем:
                  $modx->addPackage('country', $modx->getOption('core_path').'components/country/model/');
                  $countries = $modx->getCollection('BazCountry');
                  echo '<b>Всего стран: '.count($countries).'</b>';

                  Видимо при генерации схемы нужно было в CMP Generator ещё поставить Build Package на Да (я думал мне достаточно только схемы и это не нужно).

                  Спасибо большое! Теперь иду изучать дальнейшие методы для работы с этими таблицами через xPDO…
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    10