Владимир Бабусенко

Владимир Бабусенко

С нами с 11 ноября 2014; Место в рейтинге пользователей: #206
Владимир Бабусенко
09 июня 2015, 19:33
0
Выдает Fatal error: Call to a member function set() on a non-object in public_html/core/cache/includes/elements/modsnippet/45.include.cache.php on line 14
Не нравится ему метод set. Весь вопрос почему?
Владимир Бабусенко
09 июня 2015, 19:04
0
Алексей спасибо, ценная вещь, обязательно воспользуюсь, т.к у меня все пакетами идет. Но мне пока не запустить связанный объект, может вы подскажите. Выше я спросил Василия, но не соображу как дать ссылку на описание моих действий, поэтому, извините, продублирую......, по сравнению с 1 постом схема изменилась в резольвере, соответсвенно прописан только один объект
$objects = array(
				/*'MyExtUserItem',*/
                'Userdata'
			);
Создаю схему:
<?xml version="1.0" encoding="UTF-8"?>
<model package="myextuser" baseClass="xPDOObject" platform="mysql" defaultEngine="MyISAM" phpdoc-package="myextuser"
	   version="1.1">


    <object class="Userdata" table="data" extends="xPDOSimpleObject">
        <field key="userdata_id" dbtype="int" precision="11" phptype="integer" null="false" attributes="unsigned"/>
        <field key="anyfield" dbtype="varchar" precision="100" phptype="string" null="true" />

        <aggregate alias="extUser" class="modUser" local="userdata_id" foreign="id" cardinality="one" owner="foreign" />
    </object>

</model>
Генерирую модель как описано у вас bezumkin.ru/training/course1/2136/

Добавил системные настройки с ключем
extension_packages со значением
[{«myextuser»:{«path»:"[[++core_path]]components/myextuser/model/"}}]Ключ: myextuser_assets_url Значение: {assets_path}components/myextuser/
Ключ: myextuser_core_path Значение: {core_path}components/myextuser/

Собрал и установил пакет myextuser.

Добавил в файл /public_html/core/components/myextuser/model/myextuser/metadata.mysql.php
<?php

$xpdo_meta_map = array (
  'xPDOSimpleObject' => 
  array (
    0 => 'Userdata',
  ),
);

$this->map['modUser']['composites']['Services'] = array(
    'class' => 'Userdata',
    'local' => 'id',
    'foreign' => 'userdata_id',
    'cardinality' => 'one',
    'owner' => 'local',
);
Создал сниппет:
$modx->addPackage('myextuser', MODX_CORE_PATH . 'components/myextuser/model/');

if (!$MyExtUser = $modx->getService('myextuser', 'MyExtUser', $modx->getOption('myextuser_core_path', null, $modx->getOption('core_path') . 'components/myextuser/') . 'model/myextuser/', $scriptProperties)) {
	return 'Could not load MyExtUser class!';
}

$User = $modx->getObject('modUser', $modx->user->get('id'));
$Data = $User->getOne('Services');
$Data->set('anyfield','any text'); 
$Data->save();
500 ошибка
Владимир Бабусенко
09 июня 2015, 18:33
0
Василий, что не так в этот раз. Я немного пересмотрел связь объектов, и теперь делаю так.

Создаю схему:
<?xml version="1.0" encoding="UTF-8"?>
<model package="myextuser" baseClass="xPDOObject" platform="mysql" defaultEngine="MyISAM" phpdoc-package="myextuser"
	   version="1.1">


    <object class="Userdata" table="data" extends="xPDOSimpleObject">
        <field key="userdata_id" dbtype="int" precision="11" phptype="integer" null="false" attributes="unsigned"/>
        <field key="anyfield" dbtype="varchar" precision="100" phptype="string" null="true" />

        <aggregate alias="extUser" class="modUser" local="userdata_id" foreign="id" cardinality="one" owner="foreign" />
    </object>

</model>
Генерирую модель как описано у вас bezumkin.ru/training/course1/2136/

Добавил системные настройки с ключем
extension_packages
со значением
[{"myextuser":{"path":"[[++core_path]]components/myextuser/model/"}}]
Ключ: myextuser_assets_url Значение: {assets_path}components/myextuser/
Ключ: myextuser_core_path Значение: {core_path}components/myextuser/

Собрал и установил пакет myextuser.

Добавил в файл /public_html/core/components/myextuser/model/myextuser/metadata.mysql.php
<?php

$xpdo_meta_map = array (
  'xPDOSimpleObject' => 
  array (
    0 => 'Userdata',
  ),
);

$this->map['modUser']['composites']['Services'] = array(
    'class' => 'Userdata',
    'local' => 'id',
    'foreign' => 'userdata_id',
    'cardinality' => 'one',
    'owner' => 'local',
);
Создал сниппет:
$modx->addPackage('myextuser', MODX_CORE_PATH . 'components/myextuser/model/');

if (!$MyExtUser = $modx->getService('myextuser', 'MyExtUser', $modx->getOption('myextuser_core_path', null, $modx->getOption('core_path') . 'components/myextuser/') . 'model/myextuser/', $scriptProperties)) {
	return 'Could not load MyExtUser class!';
}

$User = $modx->getObject('modUser', $modx->user->get('id'));
$Data = $User->getOne('Services');
$Data->set('anyfield','any text'); 
$Data->save();
Выдает 500 ошибку… что я не так делаю?
Владимир Бабусенко
09 июня 2015, 15:40
0
Вы правы, не поспоришь. Может подскажите как реализовать, как пример: отношение объектов user и user_attributes. Как я понимаю, достаточно создать одну схему(объект), указать связь с modUser.

<?xml version="1.0" encoding="UTF-8"?>
<model package="myextuser" baseClass="xPDOObject" platform="mysql" defaultEngine="MyISAM" phpdoc-package="myextuser"
	   version="1.1">

    <object class="Userdata" table="data" extends="xPDOSimpleObject">
        <field key="userdata_id" dbtype="int" precision="11" phptype="integer" null="false" attributes="unsigned"/>
        <field key="anyfield" dbtype="varchar" precision="100" phptype="string" null="true" />

        <aggregate alias="extUser" class="modUser" local="userdata_id" foreign="id" cardinality="one" owner="foreign" />
    </object>

</model>
и прописать
$this->map['modUser']['composites']['Services'] = array(
	'class' => 'Userdata',
	'local' => 'id',
	'foreign' => 'userdata_id',
	'cardinality' => 'one',
	'owner' => 'local',
);


Владимир Бабусенко
09 июня 2015, 14:46
0
что сразу не обратил. Вы пишите что я создал новый объект в моем случае (Userdata), и добавил связь с modUser, а именно
<aggregate alias="extUser" local="userdata_id" foreign="id" cardinality="one" owner="foreign" />
А у modUser не было связи и нет… меня смутило. Как же, я же расширяю объект modUser и прописываю связь. Разве не такой принцип? При генерации модели, разве это связь не должна учитываться?
<object class="extUser" extends="modUser">
        <composite alias="Data" local="id" class="Userdata" foreign="userdata_id" cardinality="one" owner="local" />
    </object>
Владимир Бабусенко
09 июня 2015, 14:20
0
Прописал
<?php

$xpdo_meta_map = array (
  'modUser' => 
  array (
    0 => 'extUser',
  ),
  'xPDOSimpleObject' => 
  array (
    0 => 'Userdata',
  ),
);

$this->map['modUser']['composites']['Data'] = array(
    'class' => 'Userdata',
    'local' => 'id',
    'foreign' => 'userdata_id',
    'cardinality' => 'one',
    'owner' => 'local',
);
прописываю в файле MyExtUser/core/components/myextuser/model/myextuser/metadata.mysql.php
Но при генерации пакета удаляется добавленная связь…