MIGX DB как вывести данные?

Добрый день! Не могу понять, как можно вывести данные из таблицы MIGX DB, такого вида:

Название категории 1 (имя ресурса)
  • Запись из этой категории 1
  • Запись из этой категории 2
  • Запись из этой категории 3
  • Запись из этой категории 4 и тд.
_____

Название категории 2 (имя ресурса)
  • Запись из этой категории1
  • Запись из этой категории 2
  • Запись из этой категории 3
  • Запись из этой категории 4 и тд.
Где записи, это строки в таблице MIGX DB.
Есть ресурс, в нем TV типа migxdb, в этом tv записи.
Нужна иерархия в несколько уровней, примерно как в pdoMenu, только вместо вложенных ресурсов записи из таблицы MIGX DB.

Сейчас получается вывести только полностью все записи из таблицы, вывожу так:

[[pdoResources?
    &parents=`0`
    &class=`recordTopList`
    &loadModels=`toplist`
    &tpl=`tpl.topList.mdb`
    &sortby=``
    &sortdir=``
    &where=`{ "published:=":"1" }`
]]
Или вот так:
[[!migxLoopCollection?
  &packageName=`toplist`
  &classname=`recordTopList`
  &where=`{ "published":"1" }`
  &tpl=`tpl.topList.mdb`
]]
В самой таблице, в БД, есть поле resource_id, в котором хранится id родителя.
Делала по данной статье: http://www.tale.by/blog/tovaryi-iz-otdelnoj-tabliczyi-(migxdb).html

Думаю что нужно выбирать данные из 2-х таблиц, из собственной modx_record_top_list и из modx_site_content через innerJoin. Но проблема в том, что я вообще не представляю как это сделать + еще вывести в структурированном порядке…
До этого не работала ни со своей таблицей, ни с MIGX DB. Помогите пожалуйста разобраться, как это можно сделать
Яна Митрофанова
08 февраля 2019, 10:56
modx.pro
2
1 561
0

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

Андрей
08 февраля 2019, 17:03
+1
Примерный код сниппета, например назовем его getTopList

<?
$pdo = $modx->getService('pdoFetch');

$ids = $modx->getOption('ids', $scriptProperties, '');
$tpl = $modx->getOption('tpl', $scriptProperties, '');

$data = [];

if (!$ids) {
	return;
}

$ids = explode(',', $ids);

$q = $modx->newQuery('recordTopList'); // имя вашего класса
$q->leftJoin('modResource', 'Resource', 'recordTopList.resource_id = Resource.id');
$q->where([
	'Resource.published' => 1,
	'Resource.id:IN' => $ids
]);
$q->select([
	'Resource.pagetitle as pagetitle',
	'Resource.id as rid',
	'recordTopList.*'
]);

if ($q->prepare() && $q->stmt->execute()) {
	while ($row = $q->stmt->fetch(PDO::FETCH_ASSOC)) {
		$data[$row['rid']][] = $row;
	}
}

if (!empty($data)) {
	return $pdo->getChunk($tpl, [
		'data' => $data
	]);
}

Пример вызова сниппета
[[!getTopList?
	&ids=`10,20` //id ресурсов
	&tpl=`@INLINE
		{foreach $data as $rid => $records}
			<div>
				{$rid}, {$records[0]['pagetitle']}

				{foreach $records as $record}
					{$record.resource_id}
				{/foreach}
			</div>
		{/foreach}
	`
]]
    Яна Митрофанова
    09 февраля 2019, 14:38
    0
    Андрей, большое вам спасибо, очень выручили! Сниппет работает именно так, как было нужно
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    2