Death_Unlimited

Death_Unlimited

Был в сети 25 июня 2019, 11:23
Заказы не принимаю
эту строчку лучше вынести за foreach, т.к. лучше один раз присвоить переменной, чем каждый раз обращаться.
Да не досмотрел, спасибо.
нужен вложенный foreach
ну об этом тоже подумал, только вот а выводить потом как, не могу просто додуматься как в $output потом еще и с вложенного цикла вывести плейсхолдеры вложенного массива.
Премного извиняюсь, но не подскажете что делать если нужно так же обрабатывать еще и вложенные поля migx? То есть допустим есть MIGx поле 'tv_name1' и в него вложено 'tv_name2'. Массив получается имеет вот такой вот вид:
Array (     [MIGX_id] => 1     [title_name] => "значение"     [address] => "значение"     [tv_name2] => 
	[{"MIGX_id":"1","youtube_video":"значение"}]
[idx] => 1     [total] => 4     [_first] => 1 )
Сам нашел решение:
<?php 

//$docid - id документа, если не задано берем id текущего документа
//$tvname - поле MIGx
//$chunk - чанк или @INLINE

if (empty($docid)) {
	$docid = $modx->resource->get('id');
}

$tv = $modx->getObject('modResource',$docid);

$tv = $tv->getTVValue($tvname);

$rows = $modx->fromJSON($tv);

reset($rows);

$_first = key($rows);

end($rows);

$_last = key($rows);

$total = count($rows);

foreach ($rows as $key => $row) {

	$row['idx'] = $key+1;

	$row['total'] = $total;

	if ($key === $_first)
		$row['_first'] = 1;
	if ($key === $_last)
		$row['_last'] = 1;
	if ($key % 2)
		$row['_alt'] = 1;

	$pdo = $modx->getService('pdoTools');

	if (empty($chunk)) {
		$output = '<pre>' . $pdo->getChunk('', $row) . '</pre>';
	} else {
		$output = $pdo->getChunk($chunk, $row, false);

		//$output = $pdo->fastProcess($output);
	}

	echo $output;

}
Просто return надо поменять на echo и поместить в цикл.
Подскажите пожалуйста что я делаю не так, написал сниппет, потому как предложенное здесь решение не совсем меня удовлетворяет, но через сниппет выводятся только значения последнего элемента.
<?php 

//$docid - id документа, если не задано берем id текущего документа
//$tvname - поле MIGx
//$chunk - чанк или @INLINE

if (empty($docid)) {
	$docid = $modx->resource->get('id');
}

$tv = $modx->getObject('modResource',$docid);

$tv = $tv->getTVValue($tvname);

$rows = $modx->fromJSON($tv);

reset($rows);

$_first = key($rows);

end($rows);

$_last = key($rows);

$total = count($rows);

foreach ($rows as $key => $row) {

	$row['idx'] = $key+1;

	$row['total'] = $total;

	if ($key === $_first)
		$row['_first'] = 1;
	if ($key === $_last)
		$row['_last'] = 1;
	if ($key % 2)
		$row['_alt'] = 1;

	$pdo = $modx->getService('pdoTools');

	if (empty($chunk)) {
		$output = '<pre>' . $pdo->getChunk('', $row) . '</pre>';
	} else {
		$output = $pdo->getChunk($chunk, $row, false);

		//$output = $pdo->fastProcess($output);
	}
}




//return print_r($placeholder);

return $output;
А еще вопрос, будет ли таким способом кешироваться чанк задаваемый в параметре chunk в виде файла?