We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 43305
    • 5 Posts
    Добрый всем форумчанам.
    Прошу подсказки.
    Модикс Рево 2.2.10.
    Делаю маппинг своих таблиц (пока 1 таблицы) руковдствуясь в основном этим - http://habrahabr.ru/post/123072/
    Таблица реквизитов фирмы main_rekvisits .
    Кстати создана в InnoDB, а не в MyIsam.

    Размещаю свои классы правда не в папке core/components,
    а в папке core/model.
    Прописываю префикс для таблиц $tablePrefix='main_',
    выполняю код из файла gen_main.php

    <?php

    /* /core/model.gen_main.php */

    $obj = 'main';
    $tablePrefix='main_';

    /*$Model = dirname(__FILE__).'/model/';
    $Schema = dirname(__FILE__).'/model/schema/'; */
    $Model = dirname(__FILE__).'/';
    $Schema = dirname(__FILE__).'/schema/';

    shell_exec('rm -rf '.$Model.$obj.'/mysql/*');
    shell_exec('rm -rf '.$Schema.'*');
    $xml = $Schema.$obj.'.mysql.schema.xml';
    /*******************************************************/
    require_once /*dirname(*/dirname(dirname(dirname(__FILE__)))/*)*/.'/core/config/config.inc.php';
    include_once MODX_CORE_PATH . 'model/modx/modx.class.php';
    $modx= new modX();

    $modx->setLogLevel(modX::LOG_LEVEL_INFO);
    $modx->setLogTarget(XPDO_CLI_MODE ? 'ECHO' : 'HTML');

    $modx->loadClass('transport.modPackageBuilder', '', false, true);
    $manager = $modx->getManager();
    $generator = $manager->getGenerator();
    $generator->writeSchema($xml, $obj, 'xPDOObject', $tablePrefix, $restrictPrefix=true );

    $generator->parseSchema($xml, $Model);
    print "

    Выполнена генерация маппинга для таблиц с префиксом".$tablePrefix;


    ?>

    получаю класс Rekvisits,
    процесс маппинга происходит удачно - ошибок не выдает,
    файлы в core/model/main и в core/model/schema создаются.

    При попытке создать запись в этой таблице черех XPDO
    объект вроде бы создается, но при чтении поля и при записи в БД выдает ошибку
    Call to a member function get() on a non-object in D:\Run\OpenServerNew\domains\localhost\core\cache\includes\elements\modsnippet\28.include.cache.php on line 16

    Вот код сниппета
    <?php

    $modx->addPackage('main', MODX_CORE_PATH.'model/main/', 'main_');
    $rekv = $modx->newObject('Rekvisits', array('name' => 'IPTelekom'));
    if (!rekv)
    die("error creating object Rekvisit");
    else
    print "okey creating object
    ";
    print $rekv -> get('name');
    $rekv->save();

    похожечто Modx не понимает что это класс БД, унаследованный от XPDO
    и не знает что с ним делать.

    В чем может быть причина?
    Что нужно еще сделать/доделать?
      • 43305
      • 5 Posts
      Разобрался, в какой-то статье нашел что нужно подключать package
      так:

      <?php
      $modx->addPackage('main', MODX_CORE_PATH.'model/', 'main_');

      теперь заработало,
      осталось научиться еще создавать компоненты для работы со своими данными
        • 43054
        • 15 Posts
        Quote from: artproud at Apr 03, 2014, 07:42 AM
        Добрый всем форумчанам.
        Прошу подсказки.
        Модикс Рево 2.2.10.
        Делаю маппинг своих таблиц (пока 1 таблицы) руковдствуясь в основном этим - http://habrahabr.ru/post/123072/
        Таблица реквизитов фирмы main_rekvisits .
        Кстати создана в InnoDB, а не в MyIsam.

        Размещаю свои классы правда не в папке core/components,
        а в папке core/model.
        Прописываю префикс для таблиц $tablePrefix='main_',
        выполняю код из файла gen_main.php

        <!--?php

        /* /core/model.gen_main.php */

        $obj = 'main';
        $tablePrefix='main_';

        /*$Model = dirname(__FILE__).'/model/';
        $Schema = dirname(__FILE__).'/model/schema/'; */
        $Model = dirname(__FILE__).'/';
        $Schema = dirname(__FILE__).'/schema/';

        shell_exec('rm -rf '.$Model.$obj.'/mysql/*');
        shell_exec('rm -rf '.$Schema.'*');
        $xml = $Schema.$obj.'.mysql.schema.xml';
        /*******************************************************/
        require_once /*dirname(*/dirname(dirname(dirname(__FILE__)))/*)*/.'/core/config/config.inc.php';
        include_once MODX_CORE_PATH . 'model/modx/modx.class.php';
        $modx= new modX();

        $modx--->setLogLevel(modX::LOG_LEVEL_INFO);
        $modx->setLogTarget(XPDO_CLI_MODE ? 'ECHO' : 'HTML');

        $modx->loadClass('transport.modPackageBuilder', '', false, true);
        $manager = $modx->getManager();
        $generator = $manager->getGenerator();
        $generator->writeSchema($xml, $obj, 'xPDOObject', $tablePrefix, $restrictPrefix=true );

        $generator->parseSchema($xml, $Model);
        print "

        Выполнена генерация маппинга для таблиц с префиксом".$tablePrefix;


        ?>

        получаю класс Rekvisits,
        процесс маппинга происходит удачно - ошибок не выдает,
        файлы в core/model/main и в core/model/schema создаются.

        При попытке создать запись в этой таблице черех XPDO
        объект вроде бы создается, но при чтении поля и при записи в БД выдает ошибку
        Call to a member function get() on a non-object in D:\Run\OpenServerNew\domains\localhost\core\cache\includes\elements\modsnippet\28.include.cache.php on line 16

        Вот код сниппета
        <!--?php

        $modx--->addPackage('main', MODX_CORE_PATH.'model/main/', 'main_');
        $rekv = $modx->newObject('Rekvisits', array('name' => 'IPTelekom'));
        if (!rekv)
        die("error creating object Rekvisit");
        else
        print "okey creating object
        ";
        print $rekv -> get('name');
        $rekv->save();

        похожечто Modx не понимает что это класс БД, унаследованный от XPDO
        и не знает что с ним делать.

        В чем может быть причина?
        Что нужно еще сделать/доделать?
        Я начинал свои таблицы в revo с компонента http://rtfm.modx.com/extras/revo/cmpgenerator, указываете таблицы он сам строит классы и схемы и файлы создает и тд, дальше с ними уже можно работать в обычном режиме в виде $modx->getObject('MyClass');
          • 43054
          • 15 Posts
          и подключить свой класc перед работой.

          $package_path = $modx->getOption('core_path').'components/MyComponent/model/';
          $modx->addPackage('MyComponent', $package_path);
          $ob = $modx->getObject('MyClass');