VM версии 1.0.7Для автоматического импорта фирм-изготовителей требуется сделать следующее:
1. в админке VM в конфигурации импорта данных (управление VM -> Товары -> Использовать загрузку CSV, закладка “Конфигурация”) добавить новое поле:
• Название поля - “mf_name”
• Значение по-умолчанию – “” (пусто)
• Обязательное поле? - Нет
2. в файле “administrator\components\com_virtuemart\classes\ps_csv.php” в строке 30 есть список полей, которые не участвуют в запросах:
var $dont_use_in_query = Array( "product_sku", "product_name", "product_price", "category_path", "manufacturer_id", "attributes", "attribute_values" );
Добавляем в конец этого массива только что придуманное нами поле:
var $dont_use_in_query = Array( "product_sku", "product_name", "product_price", "category_path", "manufacturer_id", "attributes", "attribute_values", "mf_name" );
3. В этом-же файле перед строкой 154 (“// Check for Manufacturer ID and set to 1 if omitted”) добавляем следующий код:
// Проверяем, если нету производителя, то создаём его
if( !empty($data[$csv_fields["mf_name"]["ordering"]-1])) {
$q = "SELECT manufacturer_id FROM #__{vm}_manufacturer WHERE mf_name='".$data[$csv_fields["mf_name"]["ordering"]-1]."'";
$dbu->query( $q );
$dbu->next_record();
$data[$csv_fields["manufacturer_id"]["ordering"]-1] = 0;
$data[$csv_fields["manufacturer_id"]["ordering"]-1] = $dbu->f("manufacturer_id");
If ( $data[$csv_fields["manufacturer_id"]["ordering"]-1] == 0 ) {
$dbu->query( "INSERT INTO #__{vm}_manufacturer (mf_name, mf_email, mf_desc, mf_category_id, mf_url) VALUES ('".$data[$csv_fields["mf_name"]["ordering"]-1]."', '', '', 1, '' ) ");
$q = "SELECT manufacturer_id FROM #__{vm}_manufacturer WHERE mf_name='".$data[$csv_fields["mf_name"]["ordering"]-1]."'";
$dbu->query( $q );
$dbu->next_record();
$data[$csv_fields["manufacturer_id"]["ordering"]-1] = 0;
$data[$csv_fields["manufacturer_id"]["ordering"]-1] = $dbu->f("manufacturer_id");
If ( $data[$csv_fields["manufacturer_id"]["ordering"]-1] == 0 ) {
$d['message'] .= "Ошибка при импортировании в справочник производителей!<br />";
$this_error = "Ошибка при импортировании в справочник производителей!<br />";
};
};
};
Всё, теперь магазин работает как я хочу что-бы он работал (и на мой взгляд так на много правильнее). Теперь, если не пустое поле mf_name, у нас проверяется есть-ли такой производитель. Если такой производитель есть, то автоматом подставляется его идентификатор к товару, если-же нет его, то он добавляется в базу производителей и также его идентификатор подставляется к товару.
Подсказка по отладке магазина: Иногда полезно посмотреть чем там занимается VM и какие запросы выполняет, но при включенном режиме отладки в Joomla, запросы от VM не обрабатываются

Поэтому можно в файлике “administrator\components\com_virtuemart\classes\ps_database.php” в строке 68 добавить код:
echo $this->_sql.'<br />';
что-бы функция setQuery выглядела так:
function setQuery( $sql ) {
$vm_prefix = "{vm}";
$this->_sql = str_replace( $vm_prefix, VM_TABLEPREFIX, $sql );
echo $this->_sql.'<br />';
$this->_database->setQuery( $this->_sql );
$this->_query_set = true;
}
И теперь мы сможем лицезреть на экране какие запросы выполняются в VM.
Версии файлов:• @version $Id: ps_csv.php,v 1.7.2.3 2006/03/28 19:40:15 soeren_nb Exp $
• @version $Id: ps_database.php,v 1.9.2.4 2006/04/21 17:05:17 soeren_nb Exp $
----------------------------------------------------------------------------------
только вот проверка по названию мне не совсем понятна
насколько точно оно должно совпадать?
На 100% должно совпадать.
то есть если в VM прописано "Microsoft" а девушка манагер тебе выдала список и там "Майкрософт" то тогда что? добавит новго производителя?
Да именно так и будет. И вопрос тогда будет к девушке, какога фига она так написала, разве не так?
Единственное что можно предусмотреть, это например так называемые алиасы. Т.е. ты в базу алиасов добавляешь что Майкрософт = Microsoft, тогда при импорте можно будет проверить алиасы и добавить уже не как "Майкрософт" а как "Microsoft" и это будет впринципе круто, но заморачиваться мне с этим не охота.
Следующее с чем мне видимо придётся замарачиваться, дак это с удалением позиций, которые не были в загруженом CSV. И скорее всего придётся ещё придумать такую приблуду, как привязку позиции к файлу CSV, т.е. скорее всего придётся загружать позиции из разных источников, т.е. от фирмы 1, от фирмы 2 и т.д.
Что-бы в итоге получилось при загрузке CSV от фирмы 1 что-бы обновились/добавились все позиции из CSV а те позиции которые остались в базе старые, что-бы не висели мёртвым грузом. Но я думаю что там тоже делов на час-два. И может быть кто-нить видел такую штуку что-бы мне опять не писать этого?
---------------------------------------------------------
Да и файлик изменённый я прикрепляю здесь.
[вложение удалено Администратором]