Новости Joomla

0 Пользователей и 1 Гость просматривают эту тему.
  • 323 Ответов
  • 55869 Просмотров
*

nevigen

  • Moderator
  • 10436
  • 863 / 25
  • http://n*****n.com
Re: Усовершенствованный импорт Import UTF8
« Ответ #270 : 11.09.2017, 06:55:38 »
а что есть какие то данные ? ну хотябы кол-во товаров которое пытаетесь экпортировать ? объем памяти на хостинге ?
наличие свободного места в достаточном объеме ?

Профессиональные / Бесплатные решения для JoomShopping
Не лечи бесплатно, ибо тот, кто лечится бесплатно, рано или поздно перестает ценить свое здоровье,
а тот, кто лечит бесплатно, рано или поздно перестает ценить результаты своего труда/ (с) Гиппократ?
Не ищите ответов, ищите решение !
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Re: Усовершенствованный импорт Import UTF8
« Ответ #271 : 11.09.2017, 08:13:19 »
описание ошибки в конце концов :) хотя в 99% случаев такое при импорте говорит о нехватке памяти.
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

lifee

  • Новичок
  • 5
  • 0 / 0
Re: Усовершенствованный импорт Import UTF8
« Ответ #272 : 12.09.2017, 22:01:12 »
а что есть какие то данные ? ну хотябы кол-во товаров которое пытаетесь экпортировать ? объем памяти на хостинге ?
наличие свободного места в достаточном объеме ?



уточните пожалуйста что вы имели в виду под фразой "а что есть какие то данные ? " Количество товаров для вывода не такое уж и больше ~ 1200 позиций. Памяти на хостинге еще 1.5 гб если я правильно вас понял ( хотя мало вероятно что вы имели в виду просто свободное место на хостинге )


описание ошибки в конце концов :) хотя в 99% случаев такое при импорте говорит о нехватке памяти.

Если бы не хватало памяти,  то другие экспорты так же не работали бы наверное ? Где я могу уточнить описание ошибки ?
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Re: Усовершенствованный импорт Import UTF8
« Ответ #273 : 12.09.2017, 22:09:37 »
Если бы не хватало памяти,  то другие экспорты так же не работали бы наверное ?
если другие экспорты один в один как и этот - то да, не работали бы. арбузы есть на 3 кг, а есть на 10.
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

lifee

  • Новичок
  • 5
  • 0 / 0
Re: Усовершенствованный импорт Import UTF8
« Ответ #274 : 12.09.2017, 22:18:31 »
если другие экспорты один в один как и этот - то да, не работали бы. арбузы есть на 3 кг, а есть на 10.

Согласен , но все равно ,  база данных не более 100 мб весит ( это включая не только товары ).Если данный экспорт конечно не хочет спарсить все изображения с сайта ( в чем я конечно сомневаюсь ) то столбцов и и колонок там должно быть не более чем на ~30 мб. Ну да ладно. Как я могу помочь вам , помочь мне разобраться ?)) В консоле инспектора такая же " информативность" как и в окне браузера Failed to load resource: the server responded with a status of 500 () Так что остается мне уповать на Вас, более опытных товарищей  , пока не найду в какую сторону копать )
« Последнее редактирование: 12.09.2017, 22:23:21 от lifee »
*

nevigen

  • Moderator
  • 10436
  • 863 / 25
  • http://n*****n.com
Re: Усовершенствованный импорт Import UTF8
« Ответ #275 : 12.09.2017, 22:26:04 »
включить ошибки в жумле
Профессиональные / Бесплатные решения для JoomShopping
Не лечи бесплатно, ибо тот, кто лечится бесплатно, рано или поздно перестает ценить свое здоровье,
а тот, кто лечит бесплатно, рано или поздно перестает ценить результаты своего труда/ (с) Гиппократ?
Не ищите ответов, ищите решение !
*

lifee

  • Новичок
  • 5
  • 0 / 0
Re: Усовершенствованный импорт Import UTF8
« Ответ #276 : 12.09.2017, 23:00:51 »
включить ошибки в жумле

Fatal error: Call to undefined method JSFactory::getTable() in /home/a/avminatr/watchrussia24.ru/public_html/administrator/components/com_jshopping/importexport/nrexportutf8/nrexportutf8.php on line 11
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Re: Усовершенствованный импорт Import UTF8
« Ответ #277 : 12.09.2017, 23:06:56 »
старая версия JoomShopping
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

lifee

  • Новичок
  • 5
  • 0 / 0
Re: Усовершенствованный импорт Import UTF8
« Ответ #278 : 12.09.2017, 23:13:17 »
старая версия JoomShopping
[/quote

У меня версия 4.6.0 после обновления база мягко говоря перестала работать ) Понимаю что тема не для этой ветки , но как то можно адекватно обновить джумшоппинг ? ) Либо надо просто базу переносить на новую версию ?
« Последнее редактирование: 12.09.2017, 23:29:47 от lifee »
*

nevigen

  • Moderator
  • 10436
  • 863 / 25
  • http://n*****n.com
Re: Усовершенствованный импорт Import UTF8
« Ответ #279 : 13.09.2017, 08:21:57 »
как обновлять ЖШ есть куча тем.
ищите. непосредственно Дмитрий описывал и разжевывал пошагово.
последние версии от 4.16 обновляют уже как любой компоннет Жумла.
Профессиональные / Бесплатные решения для JoomShopping
Не лечи бесплатно, ибо тот, кто лечится бесплатно, рано или поздно перестает ценить свое здоровье,
а тот, кто лечит бесплатно, рано или поздно перестает ценить результаты своего труда/ (с) Гиппократ?
Не ищите ответов, ищите решение !
*

ajustlike

  • Новичок
  • 7
  • 1 / 0
Re: Усовершенствованный импорт Import UTF8
« Ответ #280 : 19.09.2017, 18:47:31 »
спасибо все получилось!
а как с этой ошибкой бороться?
1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

  получилось пофиксить? а то у меня тоже самое.
*

theflame

  • Осваиваюсь на форуме
  • 37
  • 1 / 0
Re: Усовершенствованный импорт Import UTF8
« Ответ #281 : 21.09.2017, 15:08:06 »
Ребят, помогите, пожалуйста.
Сейчас собираю новую сборку сайта из свежих версий джумлы и жумжоппинга.
Перечитал все посты в этой версии. Скачал, наверно, порядка 5 модификаций, в том числе те, которые у кого-то получилось завести на 3-й джумле с 4-м ЖШ. У меня сейчас J3.8.0 и JS4.16.2. Ни один экспорт-импорт не сработал. Вообще у меня главная задача - лишь удобное обновление цен, так как из-за курса валют и сезонности они слишком часто пляшут. Это основная потребность у клиентов к этой функции магазина. В общем, буду дико благодарен любой помощи. Единственное, оценивая свои силы, думаю, что, вряд ли, я смогу сам править код плагина экспорта/импорта. Открывал, смотрел и ничего не понимал.

А, наверно, самое главное. Все экспорты успешно работали. Вот абсолютно все. А вот импортировать так ни разу ничего не получилось. Может дело даже не в плагинах, может я что-то не так делаю. Но, вроде, там даже ошибиться негде. Как писали во всех инструкциях, сначала удалял все существующие плагины экспорта/импорта, потом через установщик ЖШ ставил новые. Экспортирую, открываю опенофисом, правлю, импортирую, но ничего на сайте не меняется. Разработку веду локально с компа под XAMPP-ом. Вроде, глюков не наблюдаю. Может будут у кого-то какие-то идеи?

Спасибо заранее.
*

theflame

  • Осваиваюсь на форуме
  • 37
  • 1 / 0
Re: Усовершенствованный импорт Import UTF8
« Ответ #282 : 21.09.2017, 15:47:10 »
Кстати, может это как-то быть связано с версией РНР? Я так понимаю, в XAMPP стоит 7-я версия. Джумле тоже, я так понимаю, чем выше версия, тем лучше. Остаются вопросы к ЖШ и плагинам. Может там быть какая-то ошибка?
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Re: Усовершенствованный импорт Import UTF8
« Ответ #283 : 21.09.2017, 18:30:43 »
а вы уверены что импорт поддерживает php7 ?
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

nevigen

  • Moderator
  • 10436
  • 863 / 25
  • http://n*****n.com
Re: Усовершенствованный импорт Import UTF8
« Ответ #284 : 21.09.2017, 18:30:55 »
импорт заносит только новые товары. существующие не обновляет.
для обновления прайса вроде использовали этот

и да, вопрос относительно версии РНР остается. но его легко проверить понизив до 5.6
Профессиональные / Бесплатные решения для JoomShopping
Не лечи бесплатно, ибо тот, кто лечится бесплатно, рано или поздно перестает ценить свое здоровье,
а тот, кто лечит бесплатно, рано или поздно перестает ценить результаты своего труда/ (с) Гиппократ?
Не ищите ответов, ищите решение !
*

vipiusss

  • Гуру
  • 5739
  • 344 / 11
  • Скайп: renor_
Re: Усовершенствованный импорт Import UTF8
« Ответ #285 : 21.09.2017, 19:54:14 »
существующие не обновляет.

Обновляет NR Export(IMPORT) UTF8. Могу админку дать проверить.
Миграция, установка, обновление версий Joomla  |  Создание сайтов "под ключ"  |  Эксклюзивные заглушки "offline"  |  Работа с "напильником" над шаблонами и расширениями
*

nevigen

  • Moderator
  • 10436
  • 863 / 25
  • http://n*****n.com
Re: Усовершенствованный импорт Import UTF8
« Ответ #286 : 21.09.2017, 20:01:20 »
о да ?
а ну да... просто в описании последним абзацом..
ну круто...
сорри ввел в заблуждение по своему незнанию :)
Профессиональные / Бесплатные решения для JoomShopping
Не лечи бесплатно, ибо тот, кто лечится бесплатно, рано или поздно перестает ценить свое здоровье,
а тот, кто лечит бесплатно, рано или поздно перестает ценить результаты своего труда/ (с) Гиппократ?
Не ищите ответов, ищите решение !
*

theflame

  • Осваиваюсь на форуме
  • 37
  • 1 / 0
Re: Усовершенствованный импорт Import UTF8
« Ответ #287 : 21.09.2017, 20:10:08 »
а вы уверены что импорт поддерживает php7 ?

Честно сказать, в этих вопросах я вообще ни в чём не уверен. Не на столько в этом разбираюсь. Странно то, что экспорт работает прекрасно на всех версиях в том же РНР7, получается. А чего ж импорт ни в одной версии никак не работает, не понимаю. И как проверить это? На сколько я понимаю, как правило, вся разница в версиях РНР, по сути, в незначительном изменении некоторых синтаксических выражений и изменении некоторых функциях. Но в небольшом скрипте, обычно малая вероятность, что его это коснётся. Но может тут чисто повезло. Ладно, с этим я понял. Может ещё у кого есть варианты для поиска?
*

theflame

  • Осваиваюсь на форуме
  • 37
  • 1 / 0
Re: Усовершенствованный импорт Import UTF8
« Ответ #288 : 21.09.2017, 20:12:31 »
Обновляет NR Export(IMPORT) UTF8. Могу админку дать проверить.

Вот и я думаю, что если в первой колонке ID товара совпадает с существующим, то должно заменять на новые данные. Иначе, зачем тогда это ID надо.
*

vipiusss

  • Гуру
  • 5739
  • 344 / 11
  • Скайп: renor_
Re: Усовершенствованный импорт Import UTF8
« Ответ #289 : 21.09.2017, 20:14:08 »
Он и заменяет, а если пустое ID и в строке совпадают категория и вроде всё, то добавляет.
Как минимум у меня так происходит.
Миграция, установка, обновление версий Joomla  |  Создание сайтов "под ключ"  |  Эксклюзивные заглушки "offline"  |  Работа с "напильником" над шаблонами и расширениями
*

theflame

  • Осваиваюсь на форуме
  • 37
  • 1 / 0
Re: Усовершенствованный импорт Import UTF8
« Ответ #290 : 21.09.2017, 20:19:09 »
импорт заносит только новые товары. существующие не обновляет.
для обновления прайса вроде использовали этот

и да, вопрос относительно версии РНР остается. но его легко проверить понизив до 5.6

Сейчас пока нет возможности потестить другую версию РНР. Буду разбираться, как это сделать, или искать варианты.

По поводу ссылки на другую тему сначала обрадовало, а потом понял, что это ж то же самое. Я это пробовал. Пробовал экспортировать штатным экспортом, заменить поля, а потом обратно импортировать уже этим прагином с УТФ8. Не сработало всё равно.

И так, как автор того топика, я, вряд ли, смогу перековырять существующий код. Пробовал, смотрел, но офигел и бросил пока попытки.

И там топику 5 лет. Ссылка на наработку уже не работает. Да и это ж всё равно под другие версии ЖШ и РНР. Но тоже гляну варианты в этом направлении. Спасибо.
*

theflame

  • Осваиваюсь на форуме
  • 37
  • 1 / 0
Re: Усовершенствованный импорт Import UTF8
« Ответ #291 : 21.09.2017, 20:22:03 »
Он и заменяет, а если пустое ID и в строке совпадают категория и вроде всё, то добавляет.
Как минимум у меня так происходит.
Ну, т. е. получается, что работать должно. Но не в моём случае, блин. Не, ну хорошо будет, если дело только в версия РНР.
*

theflame

  • Осваиваюсь на форуме
  • 37
  • 1 / 0
Re: Усовершенствованный импорт Import UTF8
« Ответ #292 : 21.09.2017, 21:37:32 »
для обновления прайса вроде использовали этот

Слушайте, не знаю, с чем связано, но решение в той ветке заработало. Как-то выглядит коряво. В конце работы импорта в админке ничего нет, кроме меню админки и фразы о том, сколько записей обновлено. Но результат даёт.

В целом благодарен. Это в любом случае зачётное решение. Но, как всегда, хочется каких-то своих индивидуальных доработок, которые почему-то у всех разные.

Во-первых, спасибо товарищу из этого поста Импорт товаров (Толко 2 поля), который продублировал нерабочий архив. Я так понимаю, это заархивированный вот этот скрипт Импорт товаров (Толко 2 поля) написанный автором темы. Кому будет полезно, то тут надо не по привычке через установщик ставить. Надо сначала установить штатный, скачанный с оф. сайта ЖШ импортUTF8 https://www.webdesigner-profi.de/joomla-webdesign/shop/import-export/simple-import-utf8.html?lang=en Потом надо заменить файл /administrator/components/com_jshopping/importexport/simpleimportutf8/simpleimportuft8.php на тот, который прописал автор того топика. И тогда всё работает, как я хотел. Я даже не через опенофис правил, а прямо в текстовом редакторе, так как там всего 2 значения через точку с запятой: ean (код товара) и цена.

Только вот какие на практике возникли нюансы, и что бы хотелось улучшить.

Во-первых, ean по умолчанию ЖШ не генерирует. А это муторно, если нужно добавить не один товар. А этот скрипт привязывается именно к этому коду, а не ID. Поставил плагин, написанный одним из пользователей этого форума, который автоматически прописывает эти коды товаров. Но всё равно как-то страёмно. Код может меняться, не факт, что при автоматическом добавлении кодов не появятся дубли кодов. ID как-то надёжнее.

Второй нюанс в старых ценах. Если цена увеличивалась, а у товара была старая цена, всегда завышенная, то после подъёма цены нужно потом всё равно руками пробегаться и обновлять ещё старую цену, скрипт этого не делает. Может кто шарит в этом лучше, подскажите, что в том скрипте нужно добавить/изменить, чтоб для обновления цены за основу брался ID, а не EAN, и чтоб вместе с ценой можно было редактировать "старую цену", в том числе, удалить её?

Вот код того файла, который заработал в моём случае:
Код
<?php
defined( '_JEXEC' ) or die( 'Restricted access' );
jimport('joomla.filesystem.folder');

class IeSimpleImportUtf8 extends IeController{
   
    function view(){
        $jshopConfig = &JSFactory::getConfig();
        $ie_id = JRequest::getInt("ie_id");
        $_importexport = &JTable::getInstance('ImportExport', 'jshop');
        $_importexport->load($ie_id);
        $name = $_importexport->get('name');                       
           
        JToolBarHelper::title(_JSHOP_IMPORT. ' "'.$name.'"', 'generic.png' );
        JToolBarHelper::custom("backtolistie", "back", 'browser.png', _JSHOP_BACK_TO.' "'._JSHOP_PANEL_IMPORT_EXPORT.'"', false );       
        JToolBarHelper::spacer();
        JToolBarHelper::save("save", _JSHOP_IMPORT);   
       
        include(dirname(__FILE__)."/form.php"); 
    }

    function save(){
        $mainframe =& JFactory::getApplication();
       
        $jshopConfig = &JSFactory::getConfig();       
        require_once(JPATH_COMPONENT_SITE.'/lib/uploadfile.class.php');
        require_once(JPATH_COMPONENT_SITE."/lib/csv.io.class.php");
       
        $ie_id = JRequest::getInt("ie_id");
        if (!$ie_id) $ie_id = $this->get('ie_id');       
       
        $lang = &JSFactory::getLang();
        $db = &JFactory::getDBO();
       
        $_importexport = &JTable::getInstance('ImportExport', 'jshop');
        $_importexport->load($ie_id);
        $alias = $_importexport->get('alias');
        $_importexport->set('endstart', time());
        $_importexport->store();
               
        //get list tax
        $query = "SELECT tax_id, tax_value FROM `#__jshopping_taxes`";
        $db->setQuery($query);       
        $rows = $db->loadObjectList();
        $listTax = array();
        foreach($rows as $row){
            $listTax[intval($row->tax_value)] = $row->tax_id;
        }
        //
       
        //get list category
        $query = "SELECT category_id as id, `".$lang->get("name")."` as name FROM `#__jshopping_categories`";
        $db->setQuery($query);       
        $rows = $db->loadObjectList();
        $listCat = array();
        foreach($rows as $row){
            $listCat[$row->name] = $row->id;
        }       
        //
       
       

        $dir = $jshopConfig->importexport_path.$alias."/";
       
        $upload = new UploadFile($_FILES['file']);
        $upload->setAllowFile(array('csv'));
        $upload->setDir($dir);
        if ($upload->upload()){
            $filename = $dir."/".$upload->getName();
            @chmod($filename, 0777);
            $csv = new csv();
            $data = $csv->read($filename);           
            if (is_array($data)){
$i = 1;
$Dubl = 1;
                foreach($data as $k=>$row){       
                    if (count($row)<2 || $k==0) continue;

// Присваиваем артикул и цену в читабельную переменную
$product_ean = $row[0];
$price = $row[1];

// Проверка Есть ли такая запись
$query = ' SELECT product_price '.
' FROM `#__jshopping_products` '.
' WHERE product_ean = "'. $product_ean .'"';
$db->setQuery($query);

// Возвращаем существующую запись
$know = $db->loadResult();

if ($know) {
$db->setQuery(' UPDATE `#__jshopping_products` '.
  ' SET product_price = "'. $price .
  '" , min_price = "'. $price .
  '" WHERE product_ean = "'. $product_ean .'"');
$db->query();
$db->stderr();
$Dubl++;
} else {
echo $i++;
echo "  -  ".$product_ean."<br />";
}

                }
echo $Dubl." - число обновенных записей.";
            }
        }else{           
            JError::raiseWarning("", _JSHOP_ERROR_UPLOADING);
        }
               
/*        if (!JRequest::getInt("noredirect")){
            $mainframe->redirect("index.php?option=com_jshopping&controller=importexport&task=view&ie_id=".$ie_id, _JSHOP_COMPLETED);
        }
*/
    }
   
}

?>

Спасибо.
« Последнее редактирование: 21.09.2017, 22:03:34 от theflame »
*

theflame

  • Осваиваюсь на форуме
  • 37
  • 1 / 0
Re: Усовершенствованный импорт Import UTF8
« Ответ #293 : 21.09.2017, 22:36:35 »
Кстати, в плане версий РНР.
Сравнил бегло оригинальный код того файла экспорта-импорта и код пользователя этого форума. Первый код у меня не работал, а второй часто содержит символ амперсанда (&) там, где его нет в оригинальном коде. А это, на сколько я знаю, появилось в каких-то версиях РНР. Может поэтому у меня это заработало.

Ещё одно неудобство нашел в экспорте/импорте в целом в плане изменения цен. Почему-то цена идёт с десятичными знаками и через точку. Т. е. 1234.0000 А опенофис точку не понимает из-за нашей локализации. А если нужно цены умножить по формуле с каким-то коэффициентом, то вот эти точки, блин, усложняют работу. Как минимум, надо делать дурную работу по автозамене точки на запятую. И если в настройках можно отрегулировать количество знаков после запятой с 2 до 0, т. е. получается, что после запятой ничего нет, то старой цены это не касается. Там всё равно целое число, точка и куча десятичных нулей.

Может можно как-то лучше это сделать?
*

theflame

  • Осваиваюсь на форуме
  • 37
  • 1 / 0
Re: Усовершенствованный импорт Import UTF8
« Ответ #294 : 21.09.2017, 23:22:46 »
Между делом копался и кое-что полезное нашел. Думаю, это точно кому-то пригодиться.
В штатном файле экспорта ЖШ, который находится по адресу /administrator/components/com_jshopping/importexport/simpleexport/simpleexport.php, есть 81-84-я строки:

            $row[] = utf8_decode($prod->cat_name);
            $row[] = utf8_decode($prod->name);
            $row[] = utf8_decode($prod->short_description);
            $row[] = utf8_decode($prod->description);

Т. е. там умышленно из UTF8 кодируют в iso-8859-1

Если это всё убрать, то экспортируемый файл штатным средством начинает красиво отображаться с нашими буквами.

            $row[] = $prod->cat_name;
            $row[] = $prod->name;
            $row[] = $prod->short_description;
            $row[] = $prod->description;

Точно также в шатном файле импорта есть 3 строчки, кодирующие UTF8 обратно в iso-8859-1. Но у меня, очевидно, из-за версии РНР импорт вообщи никакой не заработал. Такое чувство, что именно не ЖШ, а сами файлы импорта зависимы от версии РНР.

Я уже по аналогии с этим файлом:
Код
<?php
defined( '_JEXEC' ) or die( 'Restricted access' );
jimport('joomla.filesystem.folder');

class IeSimpleImportUtf8 extends IeController{
   
    function view(){
        $jshopConfig = &JSFactory::getConfig();
        $ie_id = JRequest::getInt("ie_id");
        $_importexport = &JTable::getInstance('ImportExport', 'jshop');
        $_importexport->load($ie_id);
        $name = $_importexport->get('name');                       
           
        JToolBarHelper::title(_JSHOP_IMPORT. ' "'.$name.'"', 'generic.png' );
        JToolBarHelper::custom("backtolistie", "back", 'browser.png', _JSHOP_BACK_TO.' "'._JSHOP_PANEL_IMPORT_EXPORT.'"', false );       
        JToolBarHelper::spacer();
        JToolBarHelper::save("save", _JSHOP_IMPORT);   
       
        include(dirname(__FILE__)."/form.php"); 
    }

    function save(){
        $mainframe =& JFactory::getApplication();
       
        $jshopConfig = &JSFactory::getConfig();       
        require_once(JPATH_COMPONENT_SITE.'/lib/uploadfile.class.php');
        require_once(JPATH_COMPONENT_SITE."/lib/csv.io.class.php");
       
        $ie_id = JRequest::getInt("ie_id");
        if (!$ie_id) $ie_id = $this->get('ie_id');       
       
        $lang = &JSFactory::getLang();
        $db = &JFactory::getDBO();
       
        $_importexport = &JTable::getInstance('ImportExport', 'jshop');
        $_importexport->load($ie_id);
        $alias = $_importexport->get('alias');
        $_importexport->set('endstart', time());
        $_importexport->store();
               
        //get list tax
        $query = "SELECT tax_id, tax_value FROM `#__jshopping_taxes`";
        $db->setQuery($query);       
        $rows = $db->loadObjectList();
        $listTax = array();
        foreach($rows as $row){
            $listTax[intval($row->tax_value)] = $row->tax_id;
        }
        //
       
        //get list category
        $query = "SELECT category_id as id, `".$lang->get("name")."` as name FROM `#__jshopping_categories`";
        $db->setQuery($query);       
        $rows = $db->loadObjectList();
        $listCat = array();
        foreach($rows as $row){
            $listCat[$row->name] = $row->id;
        }       
        //
       
       

        $dir = $jshopConfig->importexport_path.$alias."/";
       
        $upload = new UploadFile($_FILES['file']);
        $upload->setAllowFile(array('csv'));
        $upload->setDir($dir);
        if ($upload->upload()){
            $filename = $dir."/".$upload->getName();
            @chmod($filename, 0777);
            $csv = new csv();
            $data = $csv->read($filename);           
            if (is_array($data)){
$i = 1;
$Dubl = 1;
                foreach($data as $k=>$row){       
                    if (count($row)<3 || $k==0) continue;

// Присваиваем артикул и цену в читабельную переменную
$product_id = $row[0];
$price = $row[1];






                   

// Проверка Есть ли такая запись
$query = ' SELECT product_price '.
' FROM `#__jshopping_products` '.
' WHERE product_id = "'. $product_id .'"';
$db->setQuery($query);

// Возвращаем существующую запись
$know = $db->loadResult();

if ($know) {
$db->setQuery(' UPDATE `#__jshopping_products` '.
  ' SET product_price = "'. $price .
  '" , min_price = "'. $price .
  '" WHERE product_id = "'. $product_id .'"');
$db->query();
$db->stderr();
$Dubl++;
} else {
echo $i++;
echo "  -  ".$product_id."<br />";
}

                }
echo $Dubl." - число обновенных записей.";
            }
        }else{           
            JError::raiseWarning("", _JSHOP_ERROR_UPLOADING);
        }
               
/*        if (!JRequest::getInt("noredirect")){
            $mainframe->redirect("index.php?option=com_jshopping&controller=importexport&task=view&ie_id=".$ie_id, _JSHOP_COMPLETED);
        }
*/
    }
   
}

?>

в файле импорта добавил амперсанд & перед JFactory

Код
<?php
/**
* @version      4.13.0 13.08.2013
* @author       MAXXmarketing GmbH
* @package      Jshopping
* [member=126442]copyright[/member]    Copyright (C) 2010 webdesigner-profi.de. All rights reserved.
* @license      GNU/GPL
*/
defined('_JEXEC') or die();
jimport('joomla.filesystem.folder');

class IeSimpleImport extends IeController{
   
    function view(){
        $app = &JFactory::getApplication();
        $jshopConfig = &JSFactory::getConfig();
        $ie_id = $this->ie_id;
        $_importexport = &JSFactory::getTable('ImportExport', 'jshop');
        $_importexport->load($ie_id);
        $name = $_importexport->get('name');                       
           
        JToolBarHelper::title(_JSHOP_IMPORT. ' "'.$name.'"', 'generic.png' );
        JToolBarHelper::custom("backtolistie", "arrow-left", 'arrow-left', _JSHOP_BACK_TO.' "'._JSHOP_PANEL_IMPORT_EXPORT.'"', false );       
        JToolBarHelper::spacer();
        JToolBarHelper::save("save", _JSHOP_IMPORT);   
       
        include(dirname(__FILE__)."/form.php"); 
    }

    function save(){
        $app = &JFactory::getApplication();
        $jshopConfig = &JSFactory::getConfig();
        require_once(JPATH_COMPONENT_SITE.'/lib/uploadfile.class.php');
        require_once(JPATH_COMPONENT_SITE."/lib/csv.io.class.php");
       
        $ie_id = $app->input->getInt("ie_id");
        if (!$ie_id) $ie_id = $this->get('ie_id');
       
        $lang = &JSFactory::getLang();
        $db = &JFactory::getDBO();
       
        $_importexport = &JSFactory::getTable('ImportExport', 'jshop');
        $_importexport->load($ie_id);
        $alias = $_importexport->get('alias');
        $_importexport->set('endstart', time());
        $_importexport->store();
               
        //get list tax
        $query = "SELECT tax_id, tax_value FROM `#__jshopping_taxes`";
        $db->setQuery($query);       
        $rows = $db->loadObjectList();
        $listTax = array();
        foreach($rows as $row){
            $listTax[intval($row->tax_value)] = $row->tax_id;
        }
       
        //get list category
        $query = "SELECT category_id as id, `".$lang->get("name")."` as name FROM `#__jshopping_categories`";
        $db->setQuery($query);
        $rows = $db->loadObjectList();
        $listCat = array();
        foreach($rows as $row){
            $listCat[$row->name] = $row->id;
        }
       
        $_products = &JSFactory::getModel('products', 'JshoppingModel');               
       
        $dir = $jshopConfig->importexport_path.$alias."/";
       
        $upload = new UploadFile($_FILES['file']);
        $upload->setAllowFile(array('csv'));
        $upload->setDir($dir);
        if ($upload->upload()){
            $filename = $dir."/".$upload->getName();
            @chmod($filename, 0777);
            $csv = new csv();
            $data = $csv->read($filename);
            if (is_array($data)){               
                foreach($data as $k=>$row){                   
                    if (count($row)<2 || $k==0) continue;
                                       
                    $tax_value = intval($row[5]);                   
                    if (!isset($listTax[$tax_value])){
                        $tax = &JSFactory::getTable('tax', 'jshop');
                        $tax->set('tax_name', $tax_value);
                        $tax->set('tax_value', $tax_value);
                        $tax->store();
                        $listTax[$tax_value] = $tax->get("tax_id");                       
                    }
                   
                    $category_name = $row['6'];
                    if (!isset($listCat[$category_name]) && $category_name!=""){
                        $cat = &JSFactory::getTable("category","jshop");
                        $query = "SELECT max(ordering) FROM `#__jshopping_categories`";
                        $db->setQuery($query);       
                        $ordering = $db->loadResult() + 1;
                        $cat->set($lang->get("name"), $category_name);
                        $cat->set("products_page", $jshopConfig->count_products_to_page);
                        $cat->set("products_row", $jshopConfig->count_products_to_row);
                        $cat->set("category_publish", 0);
                        $cat->set("ordering", $ordering);                       
                        $cat->store();
                        $listCat[$category_name] = $cat->get("category_id");                       
                    }
                   
                   
                    $product = &JSFactory::getTable('product', 'jshop');
                    $product->set("product_ean", $row[1]);
                    $product->set("product_quantity", $row[2]);
                    $product->set("product_date_added", $row[3]);
                    $product->set("product_price", $row[4]);
                    $product->set("min_price", $row[4]);
                    $product->set("product_tax_id", $listTax[$tax_value]);                                       
                    $product->set("currency_id", $jshopConfig->mainCurrency);
                    $product->set($lang->get("name"), $row[7]);
                    $product->set($lang->get("short_description"), $row[8]);
                    $product->set($lang->get("description"), $row[9]);
                    $product->store();
                    $product_id = $product->get("product_id");
                    $category_id = $listCat[$category_name];
                    if ($category_name!="" && $category_id){
                        $_products->setCategoryToProduct($product_id, array($category_id));
                    }
                   
                    unset($product);
                }
            }
            @unlink($filename);
        }else{           
            JError::raiseWarning("", _JSHOP_ERROR_UPLOADING);
        }
               
        if (!$app->input->getInt("noredirect")){
            $app->redirect("index.php?option=com_jshopping&controller=importexport&task=view&ie_id=".$ie_id, _JSHOP_COMPLETED);
        }
    }
   
}

Но не работает.
Есть, видно, что-то ещё в этом файле, по сравнению с тем, который работает (первый).
Может кто-то ещё увидит разницу? Всё равно рано или поздно придётся всем на хостинге подниматься по версиям РНР. А так будет уже готовое решение.
« Последнее редактирование: 22.09.2017, 00:08:38 от theflame »
*

theflame

  • Осваиваюсь на форуме
  • 37
  • 1 / 0
Re: Усовершенствованный импорт Import UTF8
« Ответ #295 : 22.09.2017, 00:25:36 »
Ха. Стоп. А оно заработало. Только добавленные товары имели отметку как не опубликованные, потому я их не видел на сайте. Но в админке они появились. Т. е. вот как писал nevigen, они не затёрли старые данные, они добавили новые. И, возможно, потому стали неактивными, что при импорте EAN дублировался. Т. е. система видела, что есть 2 товара с одинаковым EAN и поэтому делала новый товар неактивным. Короче, часть пути пройдено. Но ещё не всё решение. Очень бы хотелось разобраться и пофиксить под себя штатный экспорт/импорт. Он наверняка должен правильнее работать, чем те, которые отдельно добавляются.
*

theflame

  • Осваиваюсь на форуме
  • 37
  • 1 / 0
Re: Усовершенствованный импорт Import UTF8
« Ответ #296 : 22.09.2017, 00:57:45 »
Так. Сам спросил, сам ответил. Поправил, где надо, штатный экспорт, чтоб вместо даты выводило старую цену. А потом поправил файлик импорта, который скачал с темы, которую подсказал nevigen. Теперь штатным экспортом экспортирую csv, удаляю всё, кроме ID, старой цены и новой. Правлю, как хочу, а потом импортирую. Вот части кода, которые поправил в этих файлах. Может кому пригодиться.

simpleexport.php
Код
        $query = "SELECT prod.product_id, prod.product_ean, prod.product_quantity, prod.product_old_price, prod.product_price, tax.tax_value as tax, prod.`".$lang->get('name')."` as name, prod.`".$lang->get('short_description')."` as short_description,  prod.`".$lang->get('description')."` as description, cat.`".$lang->get('name')."` as cat_name
                  FROM `#__jshopping_products` AS prod
                  LEFT JOIN `#__jshopping_products_to_categories` AS categ USING (product_id)
                  LEFT JOIN `#__jshopping_categories` as cat on cat.category_id=categ.category_id
                  LEFT JOIN `#__jshopping_taxes` AS tax ON tax.tax_id = prod.product_tax_id             
                  GROUP BY prod.product_id";
        $db->setQuery($query);
        $products = $db->loadObjectList();
       
        $data = array();
        $head = array("product_id","ean","qty","old_price","price","tax","category","name","short_description","description");
        $data[] = $head;
       
        foreach($products as $prod){
            $row = array();
            $row[] = $prod->product_id;
            $row[] = $prod->product_ean;
            $row[] = $prod->product_quantity;
            $row[] = $prod->product_old_price;
            $row[] = $prod->product_price;       
            $row[] = $prod->tax;
            $row[] = $prod->cat_name;
            $row[] = $prod->name;
            $row[] = $prod->short_description;
            $row[] = $prod->description;
            $data[] = $row;
        }

simpleimportuft8.php
Код
				$i = 1;
$Dubl = 1;
                foreach($data as $k=>$row){       




                    if (count($row)<3 || $k==0) continue;

// Присваиваем артикул и цену в читабельную переменную
$product_id = $row[0];
$old_price = $row[1];
                    $price = $row[2];




// Проверка Есть ли такая запись
$query = ' SELECT product_price '.
' FROM `#__jshopping_products` '.
' WHERE product_id = "'. $product_id .'"';
$db->setQuery($query);

// Возвращаем существующую запись
$know = $db->loadResult();

if ($know) {
$db->setQuery(' UPDATE `#__jshopping_products` '.
  ' SET product_old_price = "'. $old_price .
                                      '" , product_price = "'. $price .
  '" , min_price = "'. $price .
  '" WHERE product_id = "'. $product_id .'"');
$db->query();
$db->stderr();
$Dubl++;
} else {
echo $i++;
echo "  -  ".$product_id."<br />";
}


Ещё бы как-то сделать, чтоб при экспорте в старой и новой цене сразу точку менять на запятую.

Не работал в РНР с массивами. Только догадываюсь, что это где-то в этом месте можно поправить через функцию замены строк.

Код
        $query = "SELECT prod.product_id, prod.product_ean, prod.product_quantity, prod.product_old_price, prod.product_price, tax.tax_value as tax, prod.`".$lang->get('name')."` as name, prod.`".$lang->get('short_description')."` as short_description,  prod.`".$lang->get('description')."` as description, cat.`".$lang->get('name')."` as cat_name
                  FROM `#__jshopping_products` AS prod
                  LEFT JOIN `#__jshopping_products_to_categories` AS categ USING (product_id)
                  LEFT JOIN `#__jshopping_categories` as cat on cat.category_id=categ.category_id
                  LEFT JOIN `#__jshopping_taxes` AS tax ON tax.tax_id = prod.product_tax_id             
                  GROUP BY prod.product_id";
        $db->setQuery($query);
        $products = $db->loadObjectList();
       
        $data = array();
        $head = array("product_id","ean","qty","old_price","price","tax","category","name","short_description","description");
        $data[] = $head;
       
        foreach($products as $prod){
            $row = array();
            $row[] = $prod->product_id;
            $row[] = $prod->product_ean;
            $row[] = $prod->product_quantity;
            $row[] = $prod->product_old_price;
            $row[] = $prod->product_price;     
            $row[] = $prod->tax;
            $row[] = $prod->cat_name;
            $row[] = $prod->name;
            $row[] = $prod->short_description;
            $row[] = $prod->description;
            $data[] = $row;
        }

Есть переменные массива $prod->product_old_price и $prod->product_price. Я так понимаю, с индексом 3 и 4. Где-то там можно вставить какие-то такие строчки?

$prod->product_old_price = str_replace(".", ",", $prod->product_old_price);
$prod->product_price       = str_replace(".", ",", $prod->product_price);

« Последнее редактирование: 22.09.2017, 02:20:59 от theflame »
*

nevigen

  • Moderator
  • 10436
  • 863 / 25
  • http://n*****n.com
Re: Усовершенствованный импорт Import UTF8
« Ответ #297 : 22.09.2017, 08:28:34 »
Вы лучше собрите все правки и  выложите готовый вариант.
чтобы другим не идти тропой поисков и не делать ошибок.

только опишите что он делает и елси он отличается от того что в этой теме то создайте новую тему.
Профессиональные / Бесплатные решения для JoomShopping
Не лечи бесплатно, ибо тот, кто лечится бесплатно, рано или поздно перестает ценить свое здоровье,
а тот, кто лечит бесплатно, рано или поздно перестает ценить результаты своего труда/ (с) Гиппократ?
Не ищите ответов, ищите решение !
*

theflame

  • Осваиваюсь на форуме
  • 37
  • 1 / 0
Re: Усовершенствованный импорт Import UTF8
« Ответ #298 : 22.09.2017, 14:00:10 »
Вы лучше собрите все правки и  выложите готовый вариант.
чтобы другим не идти тропой поисков и не делать ошибок.

только опишите что он делает и елси он отличается от того что в этой теме то создайте новую тему.


Понял. Сорри. Пока делал, было не лень писать, а сейчас уже сделал и влом, но вот ниже, если коротко. Вы тогда удалите мои лишние дублирующие посты.

Была задача обновлять цены через экспорт/импорт. Вначале штатный не подходил из-за западноевропейской кодировки. А сторонние плагины не подошли, скорее всего, из-за несовместимости с версией РНР. В результате поправил родные скрипты импорта/экспорта, чтобы они работали с UTF8. Заменил колонку с датой на "старая цена". Импорт не заменяет цены, а добавляет товары по-новому. Т. е. подходит только для добавления новых товаров. Чтобы обновить цены у существующих товаров взял за основу модифицированный скрипт пользователя этого форума. Нужно с оф. сайта скачать плагин импорта в UTF8, а потом его заменить на поправленный скрипт. У того пользователя цены менялись по коду товара и только основная цена. Я поправил, что изменения вносятся по ID товара. Также кроме основной цены есть ещё старая цена.

Структура csv-файла для такого импорта такая:
product_id;old_price;price
1;0;500
2;0;900
3;1000;700
4;700;550
5;0;1100

Ниже скрипты, которые в моей версии сработали. Но нужно учитывать, что с обновлением ЖШ они могут не только не работать, но и что-то поломать. Поэтому лучше почитайте выше в моих постах логику простых действий, которую я делал, чтобы получить в штатном экспорте/импорте возможность работы с нашими буквами.


Файлы для замены:

/administrator/components/com_jshopping/importexport/simpleexport/simpleexport.php
Код
<?php
/**
* @version      4.13.0 13.08.2013
* @author       MAXXmarketing GmbH
* @package      Jshopping
* [member=126442]copyright[/member]    Copyright (C) 2010 webdesigner-profi.de. All rights reserved.
* @license      GNU/GPL
*/
defined('_JEXEC') or die();
jimport('joomla.filesystem.folder');

class IeSimpleExport extends IeController{
   
    function view(){
        $app = JFactory::getApplication();
        $jshopConfig = JSFactory::getConfig();
        $ie_id = $this->ie_id;
        $_importexport = JSFactory::getTable('ImportExport', 'jshop');
        $_importexport->load($ie_id);
        $name = $_importexport->get('name');
        $ie_params_str = $_importexport->get('params');
        $ie_params = parseParamsToArray($ie_params_str);
               
        $files = JFolder::files($jshopConfig->importexport_path.$_importexport->get('alias'), '.csv');   
        $count = count($files);
           
        JToolBarHelper::title(_JSHOP_EXPORT. ' "'.$name.'"', 'generic.png' );
        JToolBarHelper::custom("backtolistie", "arrow-left", 'arrow-left', _JSHOP_BACK_TO.' "'._JSHOP_PANEL_IMPORT_EXPORT.'"', false );
        JToolBarHelper::spacer();
        JToolBarHelper::save("save", _JSHOP_EXPORT);               
       
        include(dirname(__FILE__)."/list_csv.php"); 
    }

    function save(){
        $app = JFactory::getApplication();
       
        include_once(JPATH_COMPONENT_SITE."/lib/csv.io.class.php");
       
        $ie_id = $this->get('ie_id');
       
        $_importexport = JSFactory::getTable('ImportExport', 'jshop');
        $_importexport->load($ie_id);
        $alias = $_importexport->get('alias');
        $_importexport->set('endstart', time());       
        $params = $app->input->getVar("params");       
        if (is_array($params)){       
            $paramsstr = parseArrayToParams($params);
            $_importexport->set('params', $paramsstr);
        }               
        $_importexport->store();
       
        $ie_params_str = $_importexport->get('params');
        $ie_params = parseParamsToArray($ie_params_str);
       
        $jshopConfig = JSFactory::getConfig();
        $lang = JSFactory::getLang();
        $db = JFactory::getDBO();
       
        $query = "SELECT prod.product_id, prod.product_ean, prod.product_quantity, prod.product_old_price, prod.product_price, tax.tax_value as tax, prod.`".$lang->get('name')."` as name, prod.`".$lang->get('short_description')."` as short_description,  prod.`".$lang->get('description')."` as description, cat.`".$lang->get('name')."` as cat_name
                  FROM `#__jshopping_products` AS prod
                  LEFT JOIN `#__jshopping_products_to_categories` AS categ USING (product_id)
                  LEFT JOIN `#__jshopping_categories` as cat on cat.category_id=categ.category_id
                  LEFT JOIN `#__jshopping_taxes` AS tax ON tax.tax_id = prod.product_tax_id             
                  GROUP BY prod.product_id";
        $db->setQuery($query);
        $products = $db->loadObjectList();
       
        $data = array();
        $head = array("product_id","ean","qty","old_price","price","tax","category","name","short_description","description");
        $data[] = $head;
       
        foreach($products as $prod){
            $row = array();
            $row[] = $prod->product_id;
            $row[] = $prod->product_ean;
            $row[] = $prod->product_quantity;
            // $row[] = $prod->product_old_price;
            $row[] = str_replace(".", ",", $prod->product_old_price);
            // $row[] = $prod->product_price;       
            $row[] = str_replace(".", ",", $prod->product_price);       
            $row[] = $prod->tax;
            $row[] = $prod->cat_name;
            $row[] = $prod->name;
            $row[] = $prod->short_description;
            $row[] = $prod->description;
            $data[] = $row;
        }
       
       
        $filename = $jshopConfig->importexport_path.$alias."/".$ie_params['filename'].".csv";
       
        $csv = new csv();
        $csv->write($filename, $data);
               
        if (!$app->input->getInt("noredirect")){
            $app->redirect("index.php?option=com_jshopping&controller=importexport&task=view&ie_id=".$ie_id, _JSHOP_COMPLETED);
        }
    }

    function filedelete(){
        $app = JFactory::getApplication();
        $jshopConfig = JSFactory::getConfig();
        $ie_id = $app->input->getInt("ie_id");
        $_importexport = JSFactory::getTable('ImportExport', 'jshop');
        $_importexport->load($ie_id);
        $alias = $_importexport->get('alias');
        $file = $app->input->getVar("file");
        $filename = $jshopConfig->importexport_path.$alias."/".$file;
        @unlink($filename);
        $app->redirect("index.php?option=com_jshopping&controller=importexport&task=view&ie_id=".$ie_id);
    }
   
}


/administrator/components/com_jshopping/importexport/simpleexport/simpleimport.php
Код
<?php
/**
* @version      4.13.0 13.08.2013
* @author       MAXXmarketing GmbH
* @package      Jshopping
* [member=126442]copyright[/member]    Copyright (C) 2010 webdesigner-profi.de. All rights reserved.
* @license      GNU/GPL
*/
defined('_JEXEC') or die();
jimport('joomla.filesystem.folder');

class IeSimpleImport extends IeController{
   
    function view(){
        $app = JFactory::getApplication();
        $jshopConfig = JSFactory::getConfig();
        $ie_id = $this->ie_id;
        $_importexport = JSFactory::getTable('ImportExport', 'jshop');
        $_importexport->load($ie_id);
        $name = $_importexport->get('name');                       
           
        JToolBarHelper::title(_JSHOP_IMPORT. ' "'.$name.'"', 'generic.png' );
        JToolBarHelper::custom("backtolistie", "arrow-left", 'arrow-left', _JSHOP_BACK_TO.' "'._JSHOP_PANEL_IMPORT_EXPORT.'"', false );       
        JToolBarHelper::spacer();
        JToolBarHelper::save("save", _JSHOP_IMPORT);   
       
        include(dirname(__FILE__)."/form.php"); 
    }

    function save(){
        $app = JFactory::getApplication();
        $jshopConfig = JSFactory::getConfig();
        require_once(JPATH_COMPONENT_SITE.'/lib/uploadfile.class.php');
        require_once(JPATH_COMPONENT_SITE."/lib/csv.io.class.php");
       
        $ie_id = $app->input->getInt("ie_id");
        if (!$ie_id) $ie_id = $this->get('ie_id');
       
        $lang = JSFactory::getLang();
        $db = JFactory::getDBO();
       
        $_importexport = JSFactory::getTable('ImportExport', 'jshop');
        $_importexport->load($ie_id);
        $alias = $_importexport->get('alias');
        $_importexport->set('endstart', time());
        $_importexport->store();
               
        //get list tax
        $query = "SELECT tax_id, tax_value FROM `#__jshopping_taxes`";
        $db->setQuery($query);       
        $rows = $db->loadObjectList();
        $listTax = array();
        foreach($rows as $row){
            $listTax[intval($row->tax_value)] = $row->tax_id;
        }
       
        //get list category
        $query = "SELECT category_id as id, `".$lang->get("name")."` as name FROM `#__jshopping_categories`";
        $db->setQuery($query);
        $rows = $db->loadObjectList();
        $listCat = array();
        foreach($rows as $row){
            $listCat[$row->name] = $row->id;
        }
       
        $_products = JSFactory::getModel('products', 'JshoppingModel');               
       
        $dir = $jshopConfig->importexport_path.$alias."/";
       
        $upload = new UploadFile($_FILES['file']);
        $upload->setAllowFile(array('csv'));
        $upload->setDir($dir);
        if ($upload->upload()){
            $filename = $dir."/".$upload->getName();
            @chmod($filename, 0777);
            $csv = new csv();
            $data = $csv->read($filename);
            if (is_array($data)){               
                foreach($data as $k=>$row){                   
                    if (count($row)<2 || $k==0) continue;
                                       
                    $tax_value = intval($row[5]);                   
                    if (!isset($listTax[$tax_value])){
                        $tax = JSFactory::getTable('tax', 'jshop');
                        $tax->set('tax_name', $tax_value);
                        $tax->set('tax_value', $tax_value);
                        $tax->store();
                        $listTax[$tax_value] = $tax->get("tax_id");                       
                    }
                   
                    $category_name = $row['6'];
                    if (!isset($listCat[$category_name]) && $category_name!=""){
                        $cat = JSFactory::getTable("category","jshop");
                        $query = "SELECT max(ordering) FROM `#__jshopping_categories`";
                        $db->setQuery($query);       
                        $ordering = $db->loadResult() + 1;
                        $cat->set($lang->get("name"), $category_name);
                        $cat->set("products_page", $jshopConfig->count_products_to_page);
                        $cat->set("products_row", $jshopConfig->count_products_to_row);
                        $cat->set("category_publish", 0);
                        $cat->set("ordering", $ordering);                       
                        $cat->store();
                        $listCat[$category_name] = $cat->get("category_id");                       
                    }
                   
                   
                    $product = JSFactory::getTable('product', 'jshop');
                    $product->set("product_ean", $row[1]);
                    $product->set("product_quantity", $row[2]);
                    // $product->set("product_old_price", $row[3]);
                    $product->set("product_old_price", str_replace(",", ".", $row[3]));
                    // $product->set("product_price", $row[4]);
                    $product->set("product_price", str_replace(",", ".", $row[4]));
                    // $product->set("min_price", $row[4]);
                    $product->set("min_price", str_replace(",", ".", $row[4]));
                    $product->set("product_tax_id", $listTax[$tax_value]);                                       
                    $product->set("currency_id", $jshopConfig->mainCurrency);
                    $product->set($lang->get("name"), $row[7]);
                    $product->set($lang->get("short_description"), $row[8]);
                    $product->set($lang->get("description"), $row[9]);
                    $product->store();
                    $product_id = $product->get("product_id");
                    $category_id = $listCat[$category_name];
                    if ($category_name!="" && $category_id){
                        $_products->setCategoryToProduct($product_id, array($category_id));
                    }
                   
                    unset($product);
                }
            }
            @unlink($filename);
        }else{           
            JError::raiseWarning("", _JSHOP_ERROR_UPLOADING);
        }
               
        if (!$app->input->getInt("noredirect")){
            $app->redirect("index.php?option=com_jshopping&controller=importexport&task=view&ie_id=".$ie_id, _JSHOP_COMPLETED);
        }
    }
   
}


/administrator/components/com_jshopping/importexport/simpleimportutf8/simpleimportutf8.php
Код
<?php
defined( '_JEXEC' ) or die( 'Restricted access' );
jimport('joomla.filesystem.folder');

class IeSimpleImportUtf8 extends IeController{
   
    function view(){
        $jshopConfig = &JSFactory::getConfig();
        $ie_id = JRequest::getInt("ie_id");
        $_importexport = &JTable::getInstance('ImportExport', 'jshop');
        $_importexport->load($ie_id);
        $name = $_importexport->get('name');                       
           
        JToolBarHelper::title(_JSHOP_IMPORT. ' "'.$name.'"', 'generic.png' );
        JToolBarHelper::custom("backtolistie", "back", 'browser.png', _JSHOP_BACK_TO.' "'._JSHOP_PANEL_IMPORT_EXPORT.'"', false );       
        JToolBarHelper::spacer();
        JToolBarHelper::save("save", _JSHOP_IMPORT);   
       
        include(dirname(__FILE__)."/form.php"); 
    }

    function save(){
        $mainframe =& JFactory::getApplication();
       
        $jshopConfig = &JSFactory::getConfig();       
        require_once(JPATH_COMPONENT_SITE.'/lib/uploadfile.class.php');
        require_once(JPATH_COMPONENT_SITE."/lib/csv.io.class.php");
       
        $ie_id = JRequest::getInt("ie_id");
        if (!$ie_id) $ie_id = $this->get('ie_id');       
       
        $lang = &JSFactory::getLang();
        $db = &JFactory::getDBO();
       
        $_importexport = &JTable::getInstance('ImportExport', 'jshop');
        $_importexport->load($ie_id);
        $alias = $_importexport->get('alias');
        $_importexport->set('endstart', time());
        $_importexport->store();
               
        //get list tax
        $query = "SELECT tax_id, tax_value FROM `#__jshopping_taxes`";
        $db->setQuery($query);       
        $rows = $db->loadObjectList();
        $listTax = array();
        foreach($rows as $row){
            $listTax[intval($row->tax_value)] = $row->tax_id;
        }
        //
       
        //get list category
        $query = "SELECT category_id as id, `".$lang->get("name")."` as name FROM `#__jshopping_categories`";
        $db->setQuery($query);       
        $rows = $db->loadObjectList();
        $listCat = array();
        foreach($rows as $row){
            $listCat[$row->name] = $row->id;
        }       
        //
       
       

        $dir = $jshopConfig->importexport_path.$alias."/";
       
        $upload = new UploadFile($_FILES['file']);
        $upload->setAllowFile(array('csv'));
        $upload->setDir($dir);
        if ($upload->upload()){
            $filename = $dir."/".$upload->getName();
            @chmod($filename, 0777);
            $csv = new csv();
            $data = $csv->read($filename);           
            if (is_array($data)){
$i = 1;
$Dubl = 1;
                foreach($data as $k=>$row){       




                    if (count($row)<3 || $k==0) continue;

// Присваиваем артикул и цену в читабельную переменную
$product_id = $row[0];
$old_price = str_replace(",", ".", $row[1]);
                    $price = str_replace(",", ".", $row[2]);




// Проверка Есть ли такая запись
$query = ' SELECT product_price '.
' FROM `#__jshopping_products` '.
' WHERE product_id = "'. $product_id .'"';
$db->setQuery($query);

// Возвращаем существующую запись
$know = $db->loadResult();

if ($know) {
$db->setQuery(' UPDATE `#__jshopping_products` '.
  ' SET product_old_price = "'. $old_price .
                                      '" , product_price = "'. $price .
  '" , min_price = "'. $price .
  '" WHERE product_id = "'. $product_id .'"');
$db->query();
$db->stderr();
$Dubl++;
} else {
echo $i++;
echo "  -  ".$product_id."<br />";
}

                }
echo $Dubl." - число обновенных записей.";
            }
        }else{           
            JError::raiseWarning("", _JSHOP_ERROR_UPLOADING);
        }
               
/*        if (!JRequest::getInt("noredirect")){
            $mainframe->redirect("index.php?option=com_jshopping&controller=importexport&task=view&ie_id=".$ie_id, _JSHOP_COMPLETED);
        }
*/
    }
   
}

?>


Из бонусов, которые в то же время являются нюансами. Во всех оригинальных файлах изначально в ценах все десятичные числа идут через точку, а не запятую, как мы привыкли. А это потом при умножении цен создаёт лишнее телодвижение, которое клиентам лишний раз сложно объяснять. Я уже молчу, что если клиенту нужно только добавить товары, например, после экспорта из 1С. В общем, в моих скриптах экспорт делает замену точки на запятую, а импорты делают наоборот. Тем самым для нашей локали проблем не должно быть, но нужно учитывать этот нюанс, если вдруг случайно у клиента будет англоязычная локализация ОС.
« Последнее редактирование: 22.09.2017, 15:12:40 от theflame »
*

tigra-uki

  • Давно я тут
  • 560
  • 11 / 0
  • Joom'лiстка
Re: Усовершенствованный импорт Import UTF8
« Ответ #299 : 23.10.2017, 18:27:51 »
Делюсь доработкой. Добавил несколько колонок для экспорта / импорта (добавленные отмечены *)
Проверялось на версии J 3.3.6 и JS 4.7.0
Для обработки, изменения файлов (прайсов) пользуйтесь опен офис и будет вам счастье


Все установилось без проблем на
JS 4.16.3 + Joomla 3.8.1
Сделала импорт товаров, а вот экспорт проходит в видимой части процесса - "экспорт прошел успешно", а по факту ничего не происходит  - цены не меняются:(
Файл обрабатывала в LibreOffice
Возможно, есть советы и идеи по поводу того, что может послужить причиной.

p.s.:
1) Удалось сделать импорт файла, перед этом указав двоеточие при сохранении как разделитель.
2) Но, выяснилось, что еще при экспорте файла информация в колонках для товаров распределилась сама как ей показалось удобным - например, часть колонки "description" убежало в "product_publish", а в некоторых товарах в место описания только слово "default" (само описание не экспортировалось) и т.д.
3) Новый товар (который отсутствует в магазине и был добавлен вручную в файл) из файла тоже не импортировался...
Видимо, вариант для моих версий уже не подходит, увы.


« Последнее редактирование: 24.10.2017, 00:43:41 от tigra-uki »
Слишком сконцентрированное внимание необходимо разбавлять действием.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Simple import UTF-8

Автор rand

Ответов: 6
Просмотров: 1915
Последний ответ 16.02.2020, 21:12:51
от nevigen
NR Import UTF8. как залить один товар в несколько категорий

Автор d13v555

Ответов: 5
Просмотров: 2184
Последний ответ 27.11.2018, 14:22:42
от Silent_Breeze
Не работает NR Export(IMPORT) UTF8

Автор ilshat1978

Ответов: 8
Просмотров: 5467
Последний ответ 13.06.2017, 17:21:31
от nevigen
Вынос импорта/экспорта на морду сайта

Автор Rikh

Ответов: 0
Просмотров: 900
Последний ответ 07.02.2017, 11:57:43
от Rikh
Экспорт товаров в Вконтакте

Автор nevigen

Ответов: 4
Просмотров: 1348
Последний ответ 02.12.2016, 01:28:58
от dmitry_stas