Новости
- 16.02.2019 - Вышел Shopkeeper 4.0.3
- 05.02.2019 - Symfony для MODX-разработчиков
- 18.01.2019 - Вышел Shopkeeper 4.0.0, Обновлен сайт
- 15.11.2018 - Импорт/экспорт товаров в Shopkeeper 4
- 18.09.2018 - Вышел Shopkeeper v4.0-rc
- 14.09.2018 - Установка и обзор Shopkeeper4
- 29.07.2018 - Бесплатные базы данных MongoDB на 1 год
- 21.07.2018 - Критическая уязвимость MODX <=2.6.4
- 01.06.2018 - Тест производительности Shopkeeper 4
Последние темы
-
Не добавляется цена товара в корзину.
Поддержка9 -
Вышел Shopkeeper 4.0.3
Новости1 -
TagManager2 отображает в фильтре удаленные значения TV-полей
Поддержка7 -
Бесплатные базы данных MongoDB на 1 год
Новости7 -
Пересчет цены в зависимости от параметров
Поддержка3 -
CatalogFill: не работает импорт в таблицу MIGXDB
MODX - Вопросы и обсуждения15 -
TagManager2 при фильтрации на странице, ничего не происходит
Поддержка17 -
Не выводиться ID товара в письме
Поддержка2 -
Несколько значений checkbox для Formit
MODX - Вопросы и обсуждения2 -
Array в теле письма после оформления заказа
Поддержка5 -
Изменения товара на внешней части сайта modx
MODX - Вопросы и обсуждения10 -
tagManager2 отображает в фильтрации значения удаленных товаров
Поддержка1 -
Цена доставки (не получается найти)
Общие вопросы3 -
shopkeeper3 и цена в зависимости от площади
Поддержка9 -
Catalofill выдает 502 ошибку при загрузке 35 000+ позиций
Поддержка13 -
Получить имена и значения всех TV
Поддержка10 -
CatalogFill + MIGX (не shopkeeper)
Поддержка4 -
Symfony для MODX-разработчиков
Новости1 -
Shopkeeper2 другие цены у товаров в зависимости от выбранного способа оплаты
Поддержка7 -
Не добавляет товары через SHK.toCartFromArray
Поддержка4
Catalogfil не импортировать если нет в наличии
-
Подскажите как настроить импорт только тех товаров, которые есть в наличии. Второе: как настроить импорт, что бы товары в наличии публиковались, те которых нет, не публиковались.
-
Подскажите как настроить импорт только тех товаров, которые есть в наличии.
В функции
filter_import()
проверять значение и возвращатьnull
, если нет в наличии.Второе: как настроить импорт, что бы товары в наличии публиковались, те которых нет, не публиковались.
Документацию читали? Там про это написано.
Отмена публикации или изменение значения TV для товаров, которых нет в новом прайс-листе Пример: $cf_config['imp_before_change'] = '[{"published":0},{}]';
-
@andchir
не публиковать с tv.available = 1.$cf_config['imp_before_change'] = '[{"published":0},{"tv.available":"1"}]';
Всё равно публикует...
Участник @andchir написал в Catalogfil не импортировать если нет в наличии:
В функции
filter_import()
проверять значение и возвращатьnull
, если нет в наличии.function filter_import($value_arr){ $output_arr = $value_arr; if($output_arr['content']['available'] = "1") $output_arr = null; return; } Попробовал так, не получилось.
-
Попробовал так, не получилось.
А проверить код, погуглить - это слишком сложно? Я стараюсь давать только направление, чтобы человек сам что-то делал и это было бы более полезно для него.
Вот пример:
//функция для фильтрации значений при ИМПОРТЕ function filter_import($value_arr){ $output_arr = $value_arr; if(empty($output_arr['tv'][10])) { return null; } return $output_arr; }
10 - это ID параметра наличия, который указан в конфигурации в параметре
$cf_config['content_row']
. -
Участник @andchir написал в Catalogfil не импортировать если нет в наличии:
Попробовал так, не получилось.
А проверить код, погуглить - это слишком сложно? Я стараюсь давать только направление, чтобы человек сам что-то делал и это было бы более полезно для него.
С первого дня использования Shopkeeper только и приходиться что то гуглить, ждать исправлений и.т.п. В итоге на протяжении всего своего существования Shopkeeper не представляет готовый продукт. Последний раз когда я спросил почему крошки цепляют названия из соседних категорий, мне сказали гуглить, смотреть демо сайт и.т.п., оказалось баг. В итоге работа не была сдана вовремя. Как только большинство багов было исправлено, появился Shopkeeper 4, т.е. на протяжении всего времени существования Shopkeeper 3 не был полноценным интернет-магазином. Shopkeeper 3 - это некий недоделанный конструктор.
Дело в том, что стандартный функционал или простейшие готовые решения, надо вынести в отдельный раздел документации.И вот эта настройка не работает. 0 - в наличии, 1 - нет в наличии. Публикует всё.
$cf_config['imp_before_change'] = '[{"published":0},{"tv.available":1}]';
P.S.: Эта критика будет полезна и поможет делать интернет-магазин более качественным.
-
Последний раз когда я спросил почему крошки цепляют названия из соседних категорий, мне сказали гуглить, смотреть демо сайт и.т.п., оказалось баг.
Как связаны хлебные крошки с шопкипером?
Дело в том, что стандартный функционал или простейшие готовые решения, надо вынести в отдельный раздел документации.
Не хотите этим заняться? Ждите доброго дядю. Хотя есть люди, которые помогают.
И вот эта настройка не работает. 0 - в наличии, 1 - нет в наличии. Публикует всё.
$cf_config['imp_before_change'] = '[{"published":0},{"tv.available":1}]';
Нужны подробности. Покажите полный конфиг и файл, который импортируете.
Эта критика будет полезна и поможет делать интернет-магазин более качественным.
Критика полезна когда есть что-то конкретное. А лучше не критиковать, а сделать самому и поделиться решением. Именно из-за такого отношения Shopkeeper 3 заброшен. Большинство считает, что им кто-то должен.
Кстати, специально для таких как вы создана такая страничка:
http://forum.modx-shopkeeper.ru/topic/954/для-тех-кто-уверен-что-делает-всё-правильно-но-что-то-не-работает-а-должно -
<?php //Название класса таблицы товаров в БД $cf_config['className'] = 'shopContent'; //Название пакета таблицы товаров в БД $cf_config['packageName'] = 'shop'; //Название поля ID родителя $cf_config['parent_field'] = 'resource_id'; //разбивка по столбцам при импорте и экспорте (content|tv|category) $cf_config['content_row'] = array( array('Артикул',array('articul','content')), array('Наименование',array('pagetitle','content')), array('Цена',array('price','content')), array('Страна',array('country','content')), array('Состав',array('consist','content')), array('Длина',array('size','content')), array('Ширина',array('width','content')), array('Высота',array('height','content')), array('В наличии',array('available','content')), array('Вес',array('weight','content')) ); //значения по умолчанию при импорте или проверка при экспорте $cf_config['imp_content_default'] = array( 'content' => array( 'deleted' => 0, 'published' => 1, 'template' => 808 //'createdon' => strtotime("now") //'publishedon' => strtotime("now") //'pub_date' => strtotime("now") //'editedby' => 1 //'editedon' => strtotime("now") ), 'tv' => array( //7 => 0 ) ); //первая строка - названия полей $cf_config['include_captions'] = true; //число товаров импортируемых за один раз (загрузка по группам). 0 - не ограничивать. $cf_config['batch_import'] = 300; //разбивать по категориям $cf_config['include_categories'] = false; //удалять дочерние категории при очистке и обновлении каталога $cf_config['delete_subcategories'] = true; //по какому полю проверять соответствие товара при обновлении. false - не проверять (очистка категории при обновлении). $cf_config['imp_chk_field'] = 'pagetitle'; //проверять соответствие товара при обновлении по значению TV. Указать ID TV. false - не проверять (очистка категории при обновлении). $cf_config['imp_chk_tvid_val'] = false; //Добавлять товары, которые не найдены при обновлении по TV (imp_chk_tvid_val) или полю (imp_chk_field) $cf_config['imp_if_not_exist'] = true; //удалять HTML-теги при экспорте $cf_config['exp_strip_tags'] = false; //автоматически генерировать псевдоним (alias) при импорте //false - выключено; true - генерировать с переводом в транслит; 'notranslit' - генерировать без перевода в транслит. $cf_config['imp_autoalias'] = true; //Изменить значения поля для всех вложенных товаров до начала импорта. //Например можно отменить публикацию для всех товаров и публиковать только те, которые есть в новом прайс-листе. //первый массив - какие поля и на какие значения менять, второй массив - условия которые нужно проверять (можно сделать пустым) $cf_config['imp_before_change'] = '[{"published":0},{"tv.available":"1"}]'; //'[{"published":1},{"tv.available":0}]';//'[{"tv.inventory":0},{}]';//'[{"published":0},{"tv.pricename":"Поставщик1"}]';//false - для отмены //удалить файл после экспорта (скачивания) $cf_config['exp_delete_file'] = false; //кодировка CSV-файла при экспорте $cf_config['exp_csv_charset'] = 'UTF-8'; //'windows-1251' //Импортировать (обновлять) пустые значения $cf_config['imp_empty'] = true; //Имя файла процессора, который использовать для импорта. Если пусто, используется стандартный процессор "import". $cf_config['imp_custom_processor'] = ''; //путь (xpath) в XML структуре до товаров $cf_config['imp_xml_itemsparent_path'] = '';//'/catalog/shop/offers'; //Структура XML файла для импорта $cf_config['imp_xml_structure'] = ''; //тестирование конфигурации (без записи в БД). Отчёты -> Журнал ошибок. $cf_config['imp_testmode'] = false; //функция для фильтрации значений при ЭКСПОРТЕ function filter_import($value_arr){ $output_arr = $value_arr; /* if(isset($output_arr['content']['pagetitle'])) $output_arr['content']['pagetitle'] = mb_strtoupper($output_arr['content']['pagetitle'], 'UTF-8'); */ return $output_arr; } ?>
Наименование Цена Страна Состав Длина Ширина Высота В наличии
Шоколад Алёнка 500 Россия Какао 0 0 0 1Шоколада нет в наличии, но он всё равно публикуется.
-
Шоколада нет в наличии, но он всё равно публикуется.
Как у вас определяется, что его нет в наличии? Если про Алёнку, то наличие вижу - 1.
Параметр
$cf_config['imp_before_change']
работает для товаров, которых НЕТ В ПРАЙС-ЛИСТЕ. Об этом написано в комментарии.//Изменить значения поля для всех вложенных товаров до начала импорта. //Например можно отменить публикацию для всех товаров и публиковать только те, которые есть в новом прайс-листе. //первый массив - какие поля и на какие значения менять, второй массив - условия которые нужно проверять (можно сделать пустым)
Поэтому нужно это симулировать, проверять наличие в функции и возвращать
null
. Но у вас в конфиге этого почему-то нет. -
@andchir
0 в наличии, 1 - нет в наличии'[{"published":0},{"tv.available":"1"}]'
не публиковать, если available 1. Не так работает? Если их нет в прайс листе, то что с чем сравнивает этот параметр?
Участник @andchir написал в Catalogfil не импортировать если нет в наличии:
Поэтому нужно это симулировать, проверять наличие в функции и возвращать
null
. Но у вас в конфиге этого почему-то нет.Потому что, я так понимаю, это необходимо написать самостоятельно, т.к. готового решения нет?
-
Если их нет в прайс листе, то что с чем сравнивает этот параметр?
Вы же дали скриншот и написали, что там есть товары, которых нет в наличии.
Потому что, я так понимаю, это необходимо написать самостоятельно, т.к. готового решения нет?
Да, вам надо писать самостоятельно, раз вы ничего не понимаете, что я пишу.
-
Участник @andchir написал в Catalogfil не импортировать если нет в наличии:
Если их нет в прайс листе, то что с чем сравнивает этот параметр?
Вы же дали скриншот и написали, что там есть товары, которых нет в наличии.
Ну и почему он товары с 1 (tv.available:1)(нет в наличии) не делает published":0 - не опубликовано.
Участник @andchir написал в Catalogfil не импортировать если нет в наличии:
Да, вам надо писать самостоятельно, раз вы ничего не понимаете, что я пишу.
function filter_import($value_arr){ $output_arr = $value_arr; if(empty($output_arr['tv'][10])) { return null; } return $output_arr; }
Вот это у меня не работает, я объяснил ведь, что он должен проверять на значение 1 или 0. Вы так объясняете, что легко запутаться. Я уж не говорю, что я не могу выгрузку сделать 3 день, пока мы тут общаемся, даже интересно сколько это продлиться. А вообще скачал книгу по php, что бы разобраться. Я так понимаю вам же это нужно, что бы я сам разобрался, ну ок.
-
Попробуйте такой конфиг.
<?php //Название класса таблицы товаров в БД $cf_config['className'] = 'shopContent'; //Название пакета таблицы товаров в БД $cf_config['packageName'] = 'shop'; //Название поля ID родителя $cf_config['parent_field'] = 'resource_id'; //разбивка по столбцам при импорте и экспорте (content|tv|category) $cf_config['content_row'] = array( array('Артикул',array('articul','content')), array('Наименование',array('pagetitle','content')), array('Цена',array('price','content')), array('Страна',array('country','content')), array('Состав',array('consist','content')), array('Длина',array('size','content')), array('Ширина',array('width','content')), array('Высота',array('height','content')), array('В наличии',array('available','content')), array('Вес',array('weight','content')) ); //значения по умолчанию при импорте или проверка при экспорте $cf_config['imp_content_default'] = array( 'content' => array( 'deleted' => 0, 'published' => 1, 'template' => 808 //'createdon' => strtotime("now") //'publishedon' => strtotime("now") //'pub_date' => strtotime("now") //'editedby' => 1 //'editedon' => strtotime("now") ), 'tv' => array( //7 => 0 ) ); //первая строка - названия полей $cf_config['include_captions'] = true; //число товаров импортируемых за один раз (загрузка по группам). 0 - не ограничивать. $cf_config['batch_import'] = 300; //разбивать по категориям $cf_config['include_categories'] = false; //удалять дочерние категории при очистке и обновлении каталога $cf_config['delete_subcategories'] = true; //по какому полю проверять соответствие товара при обновлении. false - не проверять (очистка категории при обновлении). $cf_config['imp_chk_field'] = 'pagetitle'; //проверять соответствие товара при обновлении по значению TV. Указать ID TV. false - не проверять (очистка категории при обновлении). $cf_config['imp_chk_tvid_val'] = false; //Добавлять товары, которые не найдены при обновлении по TV (imp_chk_tvid_val) или полю (imp_chk_field) $cf_config['imp_if_not_exist'] = true; //удалять HTML-теги при экспорте $cf_config['exp_strip_tags'] = false; //автоматически генерировать псевдоним (alias) при импорте //false - выключено; true - генерировать с переводом в транслит; 'notranslit' - генерировать без перевода в транслит. $cf_config['imp_autoalias'] = true; //Изменить значения поля для всех вложенных товаров до начала импорта. //Например можно отменить публикацию для всех товаров и публиковать только те, которые есть в новом прайс-листе. //первый массив - какие поля и на какие значения менять, второй массив - условия которые нужно проверять (можно сделать пустым) $cf_config['imp_before_change'] = '[{"published":0},{"available":"1"}]'; //'[{"published":1},{"tv.available":0}]';//'[{"tv.inventory":0},{}]';//'[{"published":0},{"tv.pricename":"Поставщик1"}]';//false - для отмены //удалить файл после экспорта (скачивания) $cf_config['exp_delete_file'] = false; //кодировка CSV-файла при экспорте $cf_config['exp_csv_charset'] = 'UTF-8'; //'windows-1251' //Импортировать (обновлять) пустые значения $cf_config['imp_empty'] = true; //Имя файла процессора, который использовать для импорта. Если пусто, используется стандартный процессор "import". $cf_config['imp_custom_processor'] = ''; //путь (xpath) в XML структуре до товаров $cf_config['imp_xml_itemsparent_path'] = '';//'/catalog/shop/offers'; //Структура XML файла для импорта $cf_config['imp_xml_structure'] = ''; //тестирование конфигурации (без записи в БД). Отчёты -> Журнал ошибок. $cf_config['imp_testmode'] = false; //функция для фильтрации значений при ЭКСПОРТЕ function filter_import($value_arr){ $output_arr = $value_arr; // Импортируем, если наличие = 0 (0 = есть в наличии) if(!empty($output_arr['content']['available'])) { return null; } return $output_arr; } //функция для фильтрации значений при ЭКСПОРТЕ function filter_export($value_arr,$doc_id=0){ $output_arr = $value_arr; //var_dump($value_arr,$output_arr); //exit; /* if(isset($output_arr['price'])) $output_arr[1] = floatval($output_arr[1]) - 200; */ return $output_arr; }