Не подключаются сторонние таблицы в xPDO
Не могу подключить свои сторонние таблицы для вывода их через xPDO, а не напрямую из базы.
Мне нужно подключить 2 таблицы с базой стран и городов.
Что я делал:
Код сниппета вместе со всеми неудачными попытками вызова (всё закомментировано):
Код модели схемы из core/components/country/model/country/country.mysql.schema.xml
Итак, вопросы (первый самый главный, остальные думаю отпадут если первый заработает):
Мне нужно подключить 2 таблицы с базой стран и городов.
Что я делал:
- Таблицы city и country переименовал на всякий случай в modx_baz_city и modx_baz_country
- Через CMP Generator сгенерировал схему модели. Ввёл следующие данные: Package Name — country, Tables — modx_baz_country,modx_baz_city, Prefix — modx_, Build Schema — Да. Остальное оставил по умолчанию (только схему, пакет не создавал).
- Добавил запись в extension_packages с помощью $modx->addExtensionPackage('country', '[[++core_path]]components/country/model/');
- Попытался в сниппете подключить и вызвать свои таблицы — не получается. Как правильно вызвать пакет и проверить его работу?
Код сниппета вместе со всеми неудачными попытками вызова (всё закомментировано):
<?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>
Итак, вопросы (первый самый главный, остальные думаю отпадут если первый заработает):
- Как правильно подключить мои таблицы чтобы можно было работать с ними через xPDO?
- Как проверить подключение таблиц в сниппете?
- Как вывести значения из таблиц в сниппете?
Поблагодарить автора
Отправить деньги
Комментарии: 10
У меня есть большие пробелы в этом направлении, но я постоянно пытаюсь их восполнить — отсюда и эти вопросы (может быть для кого-то они покажутся глупыми)…
Начинать надо с лога. А там должно быть написано, почему например не выполняется такой код
$docArray = $modx->getCollection('BazCity');
В логах:
[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');
А зачем ты указываешь префикс? Убери.
$modx->addPackage('country', $modx->getOption('core_path').'components/country/model/');
Пробовал по разному. Без префикса результат всё тот же:
[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.
Явно не подключается пакет. Попробуй пересоздать, проверь пути, название.
Попробуй так, чтобы проверить наверняка
Попробуй так, чтобы проверить наверняка
if (!$modx->addPackage('country', $modx->getOption('core_path').'components/country/model/')) {
print 'Ошибка подключения пакета!';
}
Ок, попробую, уже в который раз…
Кстати, проверка
Кстати, проверка
if (!$modx->addPackage('country', $modx->getOption('core_path').'components/country/model/')) {
print 'Ошибка подключения пакета!';
}
не срабатывает — пустой экран. И в логах тоже пусто.
Удали пакет. И папку в компонентах удали. А потом пересоздай заново. Алгоритм создания правильный. Но видимо где-то допустил ошибку.
Ура! Завелось!
Следующий код сработал без проблем:
Видимо при генерации схемы нужно было в CMP Generator ещё поставить Build Package на Да (я думал мне достаточно только схемы и это не нужно).
Спасибо большое! Теперь иду изучать дальнейшие методы для работы с этими таблицами через xPDO…
Следующий код сработал без проблем:
$modx->addPackage('country', $modx->getOption('core_path').'components/country/model/');
$countries = $modx->getCollection('BazCountry');
echo '<b>Всего стран: '.count($countries).'</b>';
Видимо при генерации схемы нужно было в CMP Generator ещё поставить Build Package на Да (я думал мне достаточно только схемы и это не нужно).
Спасибо большое! Теперь иду изучать дальнейшие методы для работы с этими таблицами через xPDO…
Удачи!
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.