Death_Unlimited

Death_Unlimited

С нами с 01 октября 2017; Место в рейтинге пользователей: #1046
Death_Unlimited
01 октября 2017, 12:08
0
эту строчку лучше вынести за foreach, т.к. лучше один раз присвоить переменной, чем каждый раз обращаться.
Да не досмотрел, спасибо.
нужен вложенный foreach
ну об этом тоже подумал, только вот а выводить потом как, не могу просто додуматься как в $output потом еще и с вложенного цикла вывести плейсхолдеры вложенного массива.
Death_Unlimited
01 октября 2017, 10:28
0
Премного извиняюсь, но не подскажете что делать если нужно так же обрабатывать еще и вложенные поля 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 )
Death_Unlimited
01 октября 2017, 09:25
0
Спасибо, так тоже работает, ниже нашел решение через echo, но думаю что ваш вариант предпочтительнее)
Death_Unlimited
01 октября 2017, 09:22
0
Сам нашел решение:
<?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 и поместить в цикл.
Death_Unlimited
01 октября 2017, 07:59
0
Подскажите пожалуйста что я делаю не так, написал сниппет, потому как предложенное здесь решение не совсем меня удовлетворяет, но через сниппет выводятся только значения последнего элемента.
<?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 в виде файла?