Снять с публикации много ресрсов
Есть массив содержащий id ресурсов minishop2
как снять с публикации их за 1 проход?
$unarr — мой массив
$resources = ??
так выдает ошибку
как снять с публикации их за 1 проход?
$unarr — мой массив
$resources = ??
так выдает ошибку
$resources = $modx->getCollection('msProduct',$unarr);
вот приблизительно так я менять буду публикациюforeach ($resources as $k => $res_n){
$res_n->set('published',0);
$res_n->save();
}
Комментарии: 7
Грубо говоря вот весь мой код:
в котором я разбираю это TV
я понимаю, что код не изящный но это мой первый сниппет который я делаю сам и был бы рад Вашей помощи
в котором я разбираю это TV
[{"color":"Черный","size":"M","barCode":"2000023492996","count":0},
{"color":"Черный","size":"L","barCode":"2000023493993","count":4},
{"color":"Черный","size":"XL","barCode":"2000023494990","count":3},
{"color":"Черный","size":"XXL","barCode":"2000023495997","count":1},
{"color":"Белый","size":"M","barCode":"2000023488999","count":1},
{"color":"Белый","size":"L","barCode":"2000023489996","count":2},
{"color":"Белый","size":"XL","barCode":"2000023490992","count":4},]
И в зависимости от значения count я определяю опубликовывать ли весь ресурс (товар minishop2) на сайте или нет. Т.е. если хотя бы у одного цвета товара есть count > 0 то я публикую этот товар на сайте. Если нет то снимаю с публикации.<?php
$resources = $modx->getCollection('msProduct'); // достаю все товары
$output = '<p>Всего ресурсов: '.count($resources).'</p>';
print $output;
$count_not_ready = 0;
$ress = 0;
$output_count = 0;
$stack = array();
foreach ($resources as $k => $res) { // прохожу по всем товарам
$ress++;
$array = $res->getTVValue('12'); // достаю значение дополнительного поля
$response = json_decode($array, true); // записываю дополнительное поле в массв
$ids = $res->get('id');
if ($response){
foreach ($response as $element) { // прохожу по полям дополнительного поля
if ($element['count'] > 0) { // проверяю если количество больше 0
$output_count++;
array_push($stack, $ids); // записать все id элементов у которых count > 0
}
}
}
else{
// снять ресурс с публикации
$count_not_ready++;
$res->set('published',0);
$res->save();
}
//$output .= '<p>['.$k.'] => '.count($resources).'</p>';
}
$unarr = array_unique($stack);
echo '<p>Всего обработано count: '.$output_count.'</p>';
echo '<p>Всего обработано: '.$ress.'</p>';
echo '<p>Всего снято с публикации: '.$count_not_ready.'</p>';
echo '<p>Всего элементов в массиве: '.count($unarr).'</p>';
unset($output_count);
$resources2 = $modx->getCollection('msProduct');
foreach ($resources2 as $k => $res_n){
$ids = $res_n->get('id');
echo $ids;
}
Все это я повешу на событие mSyncAfterImportя понимаю, что код не изящный но это мой первый сниппет который я делаю сам и был бы рад Вашей помощи
В общем сделал свой рабочий плагин:
Если будут советы по его улучшению то милости просим.
Если будут советы по его улучшению то милости просим.
<?php
switch ($modx->event->name) {
case 'mSyncAfterImport':
$resources = $modx->getCollection('msProduct'); // достаю все товары
$output = '<p>Всего ресурсов: '.count($resources).'</p>';
print $output;
$count_not_ready = 0;
$ress = 0;
$output_count = 0;
$stack = array();
foreach ($resources as $k => $res) { // прохожу по всем товарам
$array = $res->getTVValue('12'); // достаю значение дополнительного поля
$response = json_decode($array, true); // записываю дополнительное поле в массв
$ids = $res->get('id');
if ($response){
$output_count = 0;
foreach ($response as $element) { // прохожу по полям дополнительного поля
if ($element['count'] > 0) { // проверяю если количество больше 0
$output_count = 1;
$ress++;
}
}
if($output_count != 1){
$res->set('published', 0);
$res->save();
$output_count = 0;
}
}
else{
// снять ресурс с публикации
$count_not_ready++;
$res->set('published',0);
$res->save();
}
}
break;
}
А замени getCollection на getIterator и сможешь поудалять все лишнее.
вот блин, круто, спасибо
$docs = $modx->getIterator('msProduct');
foreach($docs as $doc){
$array = $doc->getTVValue('12');
echo $array;
break;
не выводит ничего. ему нельзя все id передавать разве?Instantiated a derived class modDocument that is not a subclass of the requested class msProduct
ка мне выбирать именно товары? $q = $modx->newQuery('modResource');
$q->where(array('class_key'=>'msProduct'));
$docs = $modx->getIterator('modResource', $q);
foreach($docs as $doc){
$array = $doc->getTVValue('12');
echo $array;
}
разобрался. только не понял почему)
array('class_key' => 'msProduct') — нужно передавать класс получается?
array('class_key' => 'msProduct') — нужно передавать класс получается?
// Проходимся по всем товарам
$products = $modx->getIterator('msProduct', array('class_key' => 'msProduct'));
foreach ($products as $product) {
// Получаем оригиналы их картинок
$array = $product->getTVValue('12');
echo $array;
//$files = $product->getMany('Files', array('parent' => 0));
}
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.