Как через MIGX вывести только уникальные значения?
        Добрый день!
Есть TV MIGX, в котором есть несколько текстовых полей, одно из полей называется [[+country]]
на сайте необходимо вывести список уникальных значение из этого поля, сейчас вывожу так:
Подскажите, как вывести только уникальные значения без повторений?
    
    
                                                                                
            Есть TV MIGX, в котором есть несколько текстовых полей, одно из полей называется [[+country]]
на сайте необходимо вывести список уникальных значение из этого поля, сейчас вывожу так:
[[!getImageList?
	&tvname=`partners`
	&tpl=`@CODE:<a href="#" class="filter" data-filter="[[+country]]">[[+country]]</a>`
	&docid=`2`
]]Соответственно, если в нескольких TV значение повторяется, то на сайте оно выводится столько раз, сколько есть TV с этим значением.Подскажите, как вывести только уникальные значения без повторений?
Комментарии: 11
                Наилучшая техника для выбора уникальных строк – использование вспомогательного объекта. Название свойства в объекте, с одной стороны – строка, а с другой – всегда уникально. Повторная запись в свойство с тем же именем перезапишет его. А потом уже выводите все свойства конечного вспомогательного объекта.            
                    
                Тут getImageList не нужен.
Сниппет getCountries:
Вызываете:
&parent — родитель ресурсов с этой MIGX-TV (по умолчанию подставляется текущий).
&tvname — имя MIGX-TV
&tpl — чанк-шаблон ссылки. Единственный плейсхолдер — [[+country]]:
                    Сниппет getCountries:
<?php
if(!$tvname) return;
if(!$parent) $parent = $modx->resource->get('id');
$countries = array();
foreach ($modx->getIterator('modResource', array('parent' => $parent)) as $resource) {
	$tv = $resource->getTVValue($tvname);
	$arr = json_decode($tv, true);
    	$countries[] = $arr[0]['country'];
}
$countries = array_unique($countries);
natsort($countries);
foreach($countries as $country){
    $out .= $modx->getChunk($tpl, array('country'=>$country));
}
return $out;Вызываете:
[[getCountries? 
&parent=`15`  
&tvname=`имя_TV`
&tpl=`country-tpl`
]]&parent — родитель ресурсов с этой MIGX-TV (по умолчанию подставляется текущий).
&tvname — имя MIGX-TV
&tpl — чанк-шаблон ссылки. Единственный плейсхолдер — [[+country]]:
<a href="#" class="filter" data-filter="[[+country]]">[[+country]]</a>            
                Спасибо за ответ, сделал все как Вы написали, но почему-то вообще ничего не происходит…            
                    
                Если просто вывести значение этого MIGX-TV на странице какого-нибудь ресурса с ним, то что отображается?
                    [[*имя_tv]]            
                Выводит содержимое TV в json, насколько я понимаю
[{«MIGX_id»:«2»,«image»:...................................}]
Проблем с выводом похоже нет
                    [{«MIGX_id»:«2»,«image»:...................................}]
Проблем с выводом похоже нет
                Так что-нибудь выводит?
                    <?php
if(!$tvname) return;
if(!$parent) $parent = $modx->resource->get('id');
$countries = array();
foreach ($modx->getIterator('modResource', array('parent' => $parent)) as $resource) {
	$tv = $resource->getTVValue($tvname);
	echo $tv;
	$arr = json_decode($tv, true);
    	$countries[] = $arr[0]['country'];
}
$countries = array_unique($countries);
natsort($countries);
foreach($countries as $country){
    $out .= $modx->getChunk($tpl, array('country'=>$country));
}
return $out;            
                У него у него в migx может там несколько записей с country для каждого ресурса, надо все собрать наверное, а не только из первого ключа.
там массив такого вида наверняка
                    там массив такого вида наверняка
[
	[
		'MIGX_id' => 1,
		'country' => ...
	],
	[
		'MIGX_id' => 2,
		'country' => ...
	]
]И так для каждого ресурса            
                Угу. Потому и попросил показать, что выводит поле ))            
                    
                С новым кодом ничего не выводит,
да, все верно tv выводятся так:
                    да, все верно tv выводятся так:
[{"MIGX_id":"2","image":"test.png","name":"test","description":"Тестовый текст","country":"Россия","park":"Тест1"},
{"MIGX_id":"1","image":"test.png","name":"test","description":"Тестовый текст","country":"Германия","park":"Тест2"},
{"MIGX_id":"4","image":"test.png","name":"test","description":"Тестовый текст","country":"Германия","park":"Тест1"}]            
                Так у Вас это один ресурс, в котором MIGX-поле partners которое надо обработать? 
Тогда все проще:
И вызываете:
Если же структура такая:
… и эти TV partners у ресурсов 16, 17 и 18, то сниппет такой:
И тогда вызываете:
                    Тогда все проще:
<?php
if(!$tv) return;
$countries = array();
$arr = json_decode($tv, true);
foreach($arr as $partner){
	$countries[] = $partner['country'];
}
$countries = array_unique($countries);
natsort($countries);
foreach($countries as $country){
    $out .= $modx->getChunk($tpl, array('country'=>$country));
}
return $out;И вызываете:
[[getCountries? 
&tv=`[[*partners]]`
&tpl=`country-tpl`
]]Если же структура такая:
Раздел (15)
	Ресурс(16)
	Ресурс(17)
	Ресурс(18)
	...… и эти TV partners у ресурсов 16, 17 и 18, то сниппет такой:
<?php
if(!$tvname) return;
if(!$parent) $parent = $modx->resource->get('id');
$countries = array();
foreach ($modx->getIterator('modResource', array('parent' => $parent)) as $resource) {
	$tv = $resource->getTVValue($tvname);
	$arr = json_decode($tv, true);
	foreach($arr as $partner){
    		$countries[] = $partner['country'];
	}
}
$countries = array_unique($countries);
natsort($countries);
foreach($countries as $country){
    $out .= $modx->getChunk($tpl, array('country'=>$country));
}
return $out;И тогда вызываете:
[[getCountries? 
&parent=`15`  
&tvname=`partners`
&tpl=`country-tpl`
]]            
                Какой же вы хороший человек) Огромнейшее спасибо за помощь!            
                    
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.