Я работаю над плагином для Elgg, который отслеживает идентификаторы устройств, которые отправляются в приложение при входе с вашего мобильного телефона. Для этого я хотел бы сохранить эти идентификаторы устройств в базе данных и использовать ElggObjects для этого.
Это то, что я делаю сейчас:
function initialize() {
$androidTokens = elgg_get_entities(array(
'type' => 'object',
'subtype' => 'androidTokens',
'limit' => 0
));
$iosTokens = elgg_get_entities(array(
'type' => 'object',
'subtype' => 'iosTokens',
'limit' => 0
));
if ($androidTokens == 0) {
$tokenObject = new ElggObject();
$tokenObject->subtype = 'androidTokens';
$tokenObject->tags = array();
$tokenObject->save();
}
if ($iosTokens == 0) {
$tokenObject = new ElggObject();
$tokenObject->subtype = 'iosTokens';
$tokenObject->tags = array();
$tokenObject->save();
}
}
Таким образом, генерируются два объекта ElggObject, которые содержат идентификаторы для устройств Android и iOS, которые хранятся в тегах поля метаданных. Однако этот массив тегов больше не может быть получен. Когда я делаю:
$tokenObject = elgg_get_entities(array(
'type' => 'object',
'subtype' => $os.'Tokens',
'limit' => 0
));
$tokens = $tokenObject->tags
токены остаются пустыми. Кто-то знает, что я делаю не так? Я неправильно использую объекты Элгга?
Я думаю, что причина, по которой вы сталкиваетесь с проблемами, заключается в том, что elgg_get_entities возвращает массив сущностей.
Правильно ли я предположил, что у вас будет только один из каждого подтипа объекта токена? (Один для iOS и один для Android?)
Если это так, я бы изменил ваш код следующим образом:
function initialize() {
$androidTokens = elgg_get_entities(array(
'type' => 'object',
'subtype' => 'androidTokens',
'limit' => 1 // only expecting one entity
));
$iosTokens = elgg_get_entities(array(
'type' => 'object',
'subtype' => 'iosTokens',
'limit' => 1 // only expecting one entity
));
if (count($androidTokens) == 0) {
$tokenObject = new ElggObject();
$tokenObject->subtype = 'androidTokens';
$tokenObject->tags = array();
$tokenObject->save();
}
if (count($iosTokens) == 0) {
$tokenObject = new ElggObject();
$tokenObject->subtype = 'iosTokens';
$tokenObject->tags = array();
$tokenObject->save();
}
}
Позже при захвате сущности:
$tokenObject = elgg_get_entities(array(
'type' => 'object',
'subtype' => $os.'Tokens',
'limit' => 1 // only grab one
));
$tokens = $tokenObject[0]->tags; // get tag data for first (and only) entity
Других решений пока нет …