Перейти к содержимому


Фотография
- - - - -

Не выгружается цена при импорте.

импорт csv

Лучший Ответ SmetDenis , 15 July 2013 - 10:44

Советую вам дождаться новой версии (2.0) там будет полноценный импорт и экспорт.
Это произойдет на этой неделе ( знаю по секрету =) )

Сейчас стандартный экспорт нуждается в костылях, патчах и прочих доработках. Перейти к сообщению


  • Закрытая тема Тема закрыта
Сообщений в теме: 3

#1 Василий

Василий

Отправлено 11 July 2013 - 16:19

Здравствуйте!

 

Установил хак для импорта, но при его осуществлении не выгружается прайс, хотя в хаке есть: 

                // Joomla-book.ru hack
                $types = array('text', 'textarea', 'link', 'email', 'image', 'gallery', 'download', 'date',
                    'googlemaps', 'country', 'select', 'radio', 'checkbox',
                    'jbprice', 'jbimage', 'jbselectcascade','jbslidernivo','jbgallery'
                );

Выгружаются только поля:

Id,Name,Alias,"Author Alias","Created Date",Category,Tag,Подзаголовок,"Краткое описание",Описание,Производитель

Перечень полей прилагаю в скриншоте. 

 

Заметил что при наличии css в оформлении описания, выгружаются данные не совсем корректно: не в одной ячейке находится описание ...

 

А почему при наличии поля jbprice не выгружается прайс?

 


Сообщение отредактировал Василий: 11 July 2013 - 16:26

  • 0

#2 Василий

Василий

Отправлено 14 July 2013 - 07:57

Может быть с 11 июля служба поддержки обратит внимание на этот вопрос ... ?


  • 0

#3 Василий

Василий

Отправлено 15 July 2013 - 10:04



Может быть с 11 июля служба поддержки обратит внимание на этот вопрос ... ?

Уважаемая служба поддержки, у меня лимит сообщений в основном уходит не на создание тем, а на обращения внимания на них. Данная тема висит без внимания с 11 июля. Ну можно же сказать что-то?! 

Прилагаю файл импорта с хаком установленного сейчас:

<?php
/**
 * @package   com_zoo
 * @author    YOOtheme http://www.yootheme.com
 * @copyright Copyright (C) YOOtheme GmbH
 * @license   http://www.gnu.org/licenses/gpl.html GNU/GPL
 */

/**
 * Import helper class.
 *
 * @package Component.Helpers
 * @since 2.0
 */
class ImportHelper extends AppHelper
{

    /**
     * Import from JSON file.
     *
     * @param string $json_file The JSON file path
     * @param boolean $import_frontpage if true, frontpage will be imported
     * @param boolean $import_categories Import with categories
     * @param array $element_assignment The element assignment array
     * @param array $types The selected types array
     *
     * @return boolean true on success
     * @throws ImportHelperException
     *
     * @since 2.0
     */
    public function import($json_file, $import_frontpage = true, $import_categories = true, $element_assignment = array(), $types = array())
    {

        // set_time_limit doesn't work in safe mode
        if (!ini_get('safe_mode')) {
            @set_time_limit(0);
        }

        if (!(JFile::exists($json_file) && $data = $this->app->data->create(file_get_contents($json_file)))) {
            throw new ImportHelperException('No valid json file.');
        }

        // get application
        if (!$application = $this->app->zoo->getApplication()) {
            throw new ImportHelperException('No application to import too.');
        }

        // import frontpage
        if (isset($data['categories'], $data['categories']['_root']) && $import_frontpage) {
            $this->_importFrontpage($application, $data['categories']['_root']);
        }

        // import categories
        $categories = array();
        if (isset($data['categories']) && count($data['categories']) && $import_categories) {
            $categories_to_import = $data['categories'];
            unset($categories_to_import['_root']);
            $categories = $this->_importCategories($application, $categories_to_import);
        }

        // import items
        if (isset($data['items'])) {
            $this->_importItems($application, $data['items'], $element_assignment, $types, $categories);
        }

        return true;

    }

    /**
     * Import the frontpage settings
     *
     * @param Application $application The Application object
     * @param array $frontpage the frontpage settings
     *
     * @since 2.0
     */
    private function _importFrontpage(Application $application, $frontpage)
    {

        $application->description = $frontpage['description'];

        // set frontpage content params
        if (isset($frontpage['content'])) {
            $application->getParams()->set('content.', $frontpage['content']);
        }

        // set frontpage metadata params
        if (isset($frontpage['metadata'])) {
            $application->getParams()->set('metadata.', $frontpage['metadata']);
        }

        // save application
        try {

            $this->app->table->application->save($application);

        } catch (AppException $e) {
            $this->app->error->raiseNotice(0, JText::_('Error Importing Frontpage') . ' (' . $e . ')');
        }
    }

    /**
     * Import the categories
     *
     * @param Application $application The Application object
     * @param array $categories the categories data
     *
     * @since 2.0
     */
    private function _importCategories(Application $application, $categories = array())
    {

        // init vars
        $db            = $this->app->database;
        $table         = $this->app->table->category;
        $category_vars = array_keys(get_class_vars('Category'));

        // first iteration: save category vars
        $category_objects = array();
        foreach ($categories as $alias => $category) {

            $category_obj        = $this->app->object->create('Category');
            $category_obj->alias = $this->app->string->sluggify($alias);

            // set a valid category alias
            $category_obj->alias = $this->app->alias->category->getUniqueAlias(0, $category_obj->alias);

            // set category values
            foreach ($category as $property => $value) {
                if (in_array($property, $category_vars)) {
                    $category_obj->$property = $value;
                }
            }
            $category_obj->parent         = 0;
            $category_obj->application_id = $application->id;

            // set category content params
            if (isset($category['content'])) {
                $category_obj->getParams()->set('content.', $category['content']);
            }

            // set category metadata params
            if (isset($category['metadata'])) {
                $category_obj->getParams()->set('metadata.', $category['metadata']);
            }

            $db->query('INSERT INTO ' . ZOO_TABLE_CATEGORY . '(alias) VALUES (' . $db->quote($category_obj->alias) . ')');
            $category_obj->id = $db->insertid();

            // store category for second iteration
            $category_objects[$alias] = $category_obj;
        }

        // second iteration: set parent relationship
        foreach ($categories as $alias => $category) {

            // only save if parent is set
            if (isset($category_objects[$alias])) {
                if (!empty($category['parent']) && $category['parent'] != '_root') {
                    $category_objects[$alias]->parent = $category_objects[$category['parent']]->id;
                }
            }

            // save the category
            try {

                $table->save($category_objects[$alias]);

            } catch (AppException $e) {
                $this->app->error->raiseNotice(0, JText::_('Error Importing Category') . ' (' . $e . ')');
            }
        }

        return $category_objects;
    }

    /**
     * Imports the items
     *
     * @param Application $application The Application object
     * @param array $items the items to import
     * @param array $element_assignment The element assignment array
     * @param array $types The selected types array
     * @param array $categories The category objects
     *
     * @since 2.0
     */
    private function _importItems(Application $application, $items = array(), $element_assignment = array(), $types = array(), $categories = array())
    {

        // init vars
        $db            = $this->app->database;
        $table         = $this->app->table->item;
        $comment_table = $this->app->table->comment;
        $item_vars     = array_keys(get_class_vars('Item'));
        $comment_vars  = array_keys(get_class_vars('Comment'));
        $user_id       = $this->app->user->get()->get('id');
        $app_types     = $application->getTypes();
        $authors       = $this->app->data->create($db->queryObjectList('SELECT id, username, name FROM #__users', 'id'));

        // disconnect from comment save event
        $this->app->event->dispatcher->disconnect('comment:saved', array('CommentEvent', 'saved'));

        $item_objects = array();
        foreach ($items as $alias => $item) {

            if (isset($item['group'], $types[$item['group']]) && !empty($types[$item['group']]) && $type = $app_types[$types[$item['group']]]) {

                $item_obj        = $this->app->object->create('Item');
                $item_obj->alias = $this->app->string->sluggify($alias);
                $item_obj->type  = $type->id;

                // set a valid category alias
                $item_obj->alias = $this->app->alias->item->getUniqueAlias(0, $item_obj->alias);

                $db->query('INSERT INTO ' . $table->name . '(alias) VALUES (' . $db->quote($item_obj->alias) . ')');
                $item_obj->id = $db->insertid();

                // set item values
                foreach ($item as $property => $value) {
                    if (in_array($property, $item_vars)) {
                        $item_obj->$property = $value;
                    }
                }

                // fix access if j16
                if ($this->app->joomla->version->isCompatible('1.6') && $item_obj->access == 0) {
                    $item_obj->access = $this->app->joomla->getDefaultAccess();
                }

                // store application id
                $item_obj->application_id = $application->id;

                // store tags
                if (isset($item['tags'])) {
                    $item_obj->setTags($item['tags']);
                }

                // store author
                $item_obj->created_by_alias = "";
                if (isset($item['author'])) {
                    if ($key = $authors->searchRecursive($item['author'])) {
                        $item_obj->created_by = (int)$authors[$key]->id;
                    } else {
                        $item_obj->created_by_alias = $item['author'];
                    }
                }
                // if author is unknown set current user as author
                if (!$item_obj->created_by) {
                    $item_obj->created_by = $user_id;
                }

                // store modified_by
                $item_obj->modified_by = $user_id;

                // store element_data
                $item_obj->elements = $this->app->data->create();
                if (isset($item['elements'])) {
                    foreach ($item['elements'] as $old_element_alias => $element) {
                        if (isset($element['data'])
                            && isset($element_assignment[$item['group']][$old_element_alias][$type->id])
                            && ($element_alias = $element_assignment[$item['group']][$old_element_alias][$type->id])
                            && ($element_obj = $item_obj->getElement($element_alias))
                        ) {

                            $element_obj->bindData($element['data']);
                        }
                    }
                }

                // set metadata, content, config params
                $item_obj->getParams()->set('metadata.', @$item['metadata']);
                $item_obj->getParams()->set('content.', @$item['content']);
                $item_obj->getParams()->set('config.', @$item['config']);

                $item_objects[$alias] = $item_obj;

                // save item -> category relationship
                if (isset($item['categories'])) {

                    if (isset($item['config']['primary_category'], $categories[$item['config']['primary_category']])) {
                        $item_obj->getParams()->set('config.primary_category', $categories[$item['config']['primary_category']]->id);
                    } else if (isset($item['config']['primary_category']) && $id = $this->app->alias->category->translateAliasToID($item['config']['primary_category'])) {
                        $item_obj->getParams()->set('config.primary_category', $id);
                    }

                    $item_categories = array();
                    foreach ($item['categories'] as $category_alias) {
                        if (isset($categories[$category_alias]) || $category_alias == '_root') {
                            $item_categories[] = $category_alias == '_root' ? 0 : (int)$categories[$category_alias]->id;
                        } else if ($id = $this->app->alias->category->translateAliasToID($category_alias)) {
                            $item_categories[] = $id;
                        }
                    }

                    if (!empty($item_categories)) {
                        $this->app->category->saveCategoryItemRelations($item_obj, $item_categories);
                    }
                }

                // save comments
                if (isset($item['comments']) && is_array($item['comments'])) {
                    $comments = array();
                    foreach ($item['comments'] as $key => $comment) {
                        $comment_obj          = $this->app->object->create('comment');
                        $comment_obj->item_id = $item_obj->id;

                        // set item values
                        foreach ($comment as $property => $value) {
                            if (in_array($property, $comment_vars)) {
                                $comment_obj->$property = $value;
                            }
                        }

                        if (isset($comment_obj->user_type) && $comment_obj->user_type == 'joomla') {
                            if (isset($comment['username']) && ($key = $authors->searchRecursive($comment['username']))) {
                                $comment_obj->user_id = (int)$authors[$key]->id;
                                $comment_obj->author  = (string)$authors[$key]->name;
                            } else {
                                $comment_obj->user_id = $comment_obj->user_type = '';
                            }
                        }
                        $comment_table->save($comment_obj);
                        $comments[$key] = $comment_obj;
                    }
                    // sanatize parent ids
                    foreach ($comments as $key => $comment) {
                        if ($comment->parent_id && isset($comments[$comment->parent_id])) {
                            $comment->parent_id = $comments[$comment->parent_id]->id;
                            $comment_table->save($comment);
                        }
                    }
                }
            }
        }

        foreach ($item_objects as $item) {

            foreach ($item->getElements() as $element) {

                // sanatize relateditems elements
                if ($element->getElementType() == 'relateditems') {
                    $relateditems      = $element->get('item', array());
                    $new_related_items = array();
                    foreach ($relateditems as $relateditem) {
                        if (isset($items[$relateditem])) {
                            $new_related_items[] = $item_objects[$relateditem]->id;
                        }
                    }
                    $element->set('item', $new_related_items);

                    // sanitize relatedcategories elements aliases
                } else if ($element->getElementType() == 'relatedcategories') {
                    $relatedcategories      = $element->get('category', array());
                    $new_related_categories = array();
                    foreach ($relatedcategories as $relatedcategory) {
                        if (isset($categories[$relatedcategory])) {
                            $new_related_categories[] = $categories[$relatedcategory]->id;
                        } else if ($id = $this->app->alias->category->translateAliasToID($relatedcategory)) {
                            $new_related_categories[] = $id;
                        }
                    }
                    $element->set('category', $new_related_categories);
                }
            }

            try {

                $table->save($item);

            } catch (AppException $e) {
                $this->app->error->raiseNotice(0, JText::_('Error Importing Item') . ' (' . $e . ')');
            }
        }

        return $item_objects;
    }

    /**
     * Builds the assign element info from JSON.
     *
     * @param AppData $data the export data
     *
     * @return array Assign element info
     */
    public function getImportInfo(AppData $data)
    {

        $info = array();

        $application = $this->app->zoo->getApplication();

        // get frontpage count
        $info['frontpage_count'] = (bool)$data->find('categories._root');

        // get category count
        $info['category_count'] = max(array(count($data->get('categories', array())) - ((int)$info['frontpage_count']), 0));

        // get types
        $type_elements = array();
        foreach ($application->getTypes() as $type) {
            foreach ($type->getElements() as $element) {
                $type_elements[$type->id][$element->getElementType()][] = $element;
            }
        }

        // get item types
        $info['items'] = array();
        foreach ($data->get('items', array()) as $alias => $item) {
            $group = $item['group'];
            if (!isset($info['items'][$group])) {
                $info['items'][$group]['item_count'] = 0;
                $info['items'][$group]['elements']   = array();
                if (isset($item['elements'])) {
                    foreach ($item['elements'] as $alias => $element) {
                        if (!isset($info['items'][$group]['elements'][$alias])) {

                            // add element type
                            $info['items'][$group]['elements'][$alias]['type'] = ucfirst($element['type']);

                            // add element name
                            $info['items'][$group]['elements'][$alias]['name'] = $element['name'];

                            // add elements to assign too
                            $info['items'][$group]['elements'][$alias]['assign'] = array();
                            foreach ($type_elements as $type => $assign_elements) {
                                if (isset($assign_elements[$element['type']])) {
                                    $info['items'][$group]['elements'][$alias]['assign'][$type] = $assign_elements[$element['type']];
                                }
                            }
                        }
                    }
                }
            }
            $info['items'][$group]['item_count'] += 1;
        }

        return $info;
    }

    /**
     * Import from JSON file.
     *
     * @param string $file The csv file
     * @param string $type The type to import to
     * @param boolean $contains_headers does the csv file contain a header row
     * @param string $field_separator the field separator
     * @param string $field_enclosure the field enclosure
     * @param string $element_assignment the element assignment
     *
     * @return boolean true on success
     * @throws ImportHelperException
     * @since 2.0
     */
    public function importCSV($file, $type = '', $contains_headers = false, $field_separator = ',', $field_enclosure = '"', $element_assignment = array())
    {

        // set_time_limit doesn't work in safe mode
        if (!ini_get('safe_mode')) {
            @set_time_limit(0);
        }

        // get application
        if (!$application = $this->app->zoo->getApplication()) {
            throw new ImportHelperException('No application to import too.');
        }

        if (!$type_obj = $application->getType($type)) {
            throw new ImportHelperException('Could not find type.');
        }

        $assignments = array();
        foreach ($element_assignment as $column => $value) {
            if (!empty($value[$type])) {
                $assignments[$value[$type]][] = $column;
            }
        }

        if (!isset($assignments['_name'])) {
            throw new ImportHelperException('No item name was assigned.');
        }

        // make sure the line endings are recognized irrespective of the OS
        ini_set('auto_detect_line_endings', true);

        if (($handle = fopen($file, "r")) === false) {
            throw new ImportHelperException('Could not open csv file.');
        }

        $item_table         = $this->app->table->item;
        $category_table     = $this->app->table->category;
        $user_id            = $this->app->user->get()->get('id');
        $now                = $this->app->date->create()->toSQL();
        $access             = $this->app->joomla->getDefaultAccess();
        $app_categories     = $application->getCategories();
        $app_category_names = array_map(create_function('$cat', 'return $cat->name;'), $app_categories);
        $app_category_alias = array_map(create_function('$cat', 'return $cat->alias;'), $app_categories);
        $alias_matches      = array();

        while (($data = fgetcsv($handle, 0, $field_separator, $field_enclosure)) !== false) {
            if ($contains_headers) {
                $contains_headers = false;
                continue;
            }

            $item = false;

            // First check: is there an _id specified? if so, try to load the item
            if (isset($assignments['_id']) && is_array($assignments['_id'])) {
                $column = current($assignments['_id']);
                if ($id = (int)@$data[$column]) {
                    $item = $item_table->get($id);
                    if ($item->application_id != $application->id) {
                        $item = false;
                    }
                }
            }

            if (!$item) {
                $item                 = $this->app->object->create('Item');
                $item->application_id = $application->id;
                $item->type           = $type;

                // set access
                $item->access = $access;

                // Joomla-book.ru hack
                $item->state = 1;

                // store created by
                $item->created_by = $user_id;

                // set created, modified
                $item->created = $item->modified = $now;

                // store modified_by
                $item->modified_by = $user_id;
            }

            // store element_data and item name
            $item_categories = array();
            $tags            = array();
            $elements        = $item->getElements();
            foreach ($assignments as $assignment => $columns) {
                $column = current($columns);
                switch ($assignment) {
                    case '_name':
                        $item->name = trim(@$data[$column]);
                        break;
                    case '_alias':
                        $item->alias = $this->app->string->sluggify(@$data[$column]);
                        break;
                    case '_created_by_alias':
                        $item->created_by_alias = @$data[$column];
                        break;
                    case '_created':
                        if (!empty($data[$column])) {
                            $item->created = $data[$column];
                        }
                        break;
                    default:
                        if (substr($assignment, 0, 9) == '_category') {
                            foreach ($columns as $column) {
                                $item_categories[] = @$data[$column];
                            }
                        } else if (substr($assignment, 0, 4) == '_tag') {
                            foreach ($columns as $column) {
                                $tags[] = @$data[$column];
                            }
                        } else if (isset($elements[$assignment])) {
                            switch ($elements[$assignment]->getElementType()) {
                                case 'text':
                                case 'textarea':
                                case 'link':
                                case 'email':
                                case 'date':
                                    $element_data = array();
                                    foreach ($columns as $column) {
                                        if (is_numeric($data[$column]) || !empty($data[$column])) {
                                            $element_data[$column] = array('value' => $data[$column]);
                                        }
                                    }
                                    $elements[$assignment]->bindData($element_data);
                                    break;

                                case 'country':
                                    $element_data = array();
                                    foreach ($columns as $column) {
                                        if (!empty($data[$column])) {
                                            $element_data['country'][] = $data[$column];
                                        }
                                    }
                                    $elements[$assignment]->bindData($element_data);
                                    break;

                                case 'select':
                                case 'radio':
                                case 'checkbox':
                                    $element_data = array();
                                    foreach ($columns as $column) {
                                        if (is_numeric($data[$column]) || !empty($data[$column])) {
                                            $element_data['option'][] = $data[$column];
                                        }
                                    }
                                    $elements[$assignment]->bindData($element_data);
                                    break;

                                case 'gallery':
                                    $data[$column] = trim(@$data[$column], '/\\');
                                    $elements[$assignment]->bindData(array('value' => $data[$column]));
                                    break;

                                case 'image':
                                case 'download':
                                    $elements[$assignment]->bindData(array('file' => @$data[$column]));
                                    break;

                                case 'googlemaps':
                                    $elements[$assignment]->bindData(array('location' => @$data[$column]));
                                    break;

                                // Joomla-book.ru hack
                                case 'jbprice':
                                    $element_data = array();
                                    foreach ($columns as $column) {
                                        if (!empty($data[$column])) {
                                            $priceData = explode("|||", $data[$column]);
                                            if (count($priceData) == 4) {
                                                $element_data[$column] = array(
                                                    'sku'         => $priceData[0],
                                                    'in_stock'    => $priceData[1],
                                                    'value'       => $priceData[2],
                                                    'description' => $priceData[3],
                                                );

                                            } else if (count($priceData) == 3) {
                                                $element_data[$column] = array(
                                                    'sku'         => $priceData[0],
                                                    'value'       => $priceData[1],
                                                    'description' => $priceData[2]
                                                );

                                            } else if (count($priceData) == 2) {
                                                $element_data[$column] = array(
                                                    'value'       => $priceData[0],
                                                    'description' => $priceData[1]
                                                );

                                            } else {
                                                $element_data[$column] = array(
                                                    'value' => $priceData[0],
                                                );
                                            }
                                        }
                                    }
                                    $elements[$assignment]->bindData($element_data);
                                    break;

                                case 'jbimage':
                                    $element_data = array();
                                    foreach ($columns as $column) {
                                        if (!empty($data[$column])) {
                                            $element_data[$column] = array('file' => @$data[$column]);
                                        }
                                    }
                                    $elements[$assignment]->bindData($element_data);
                                    break;

                                case 'jbselectcascade':
                                    $element_data = array();
                                    foreach ($columns as $column) {
                                        if (!empty($data[$column])) {
                                            $cascadeData  = @explode("|||", @$data[$column]);
                                            if (!empty($cascadeData)) {
                                                foreach ($cascadeData as $i => $row) {
                                                    $element_data[$column]['list-' . $i] = $row;
                                                }
                                            }
                                        }
                                    }
                                    $elements[$assignment]->bindData($element_data);
                                    break;

                                case 'jbslidernivo':
                                    $data[$column] = trim(@$data[$column], '/\\');
                                    $elements[$assignment]->bindData(array('value' => $data[$column]));
                                    break;
                                    
                                case 'jbgallery':
                                    $elements[$assignment]->bindData(array('value' => $data[$column]));
                                    break;                                    
                            }
                        }
                        break;
                }
            }

            if (empty($item->name)) {
                continue;
            }

            $item->setTags($tags);

            // If not alias was set, use the name to generate it
            if (!strlen(trim($item->alias))) {
                $item->alias = $this->app->string->sluggify($item->name);
            }

            if (empty($item->alias)) {
                $item->alias = '42';
            }

            // set a valid category alias
            $item->alias = $this->app->alias->item->getUniqueAlias($item->id, $item->alias);

            try {

                $item_table->save($item);

                // store categories
                $related_categories = array();
                foreach ($item_categories as $category_name) {
                    $names       = array_filter(explode('///', $category_name));
                    $previous_id = 0;
                    $found       = true;

                    for ($i = 0; $i < count($names); $i++) {

                        list($name, $alias) = array_pad(explode('|||', $names[$i]), 2, false);

                        // did the alias change?
                        if ($alias && isset($alias_matches[$alias])) {
                            $alias = $alias_matches[$alias];
                        }

                        // try to find category through alias, if category is not found, try to match name
                        if (!($id = array_search($alias, $app_category_alias)) && !$alias) {
                            $id = array_search($name, $app_category_names);
                            foreach (array_keys($app_category_names, $name) as $key) {
                                if ($previous_id && isset($app_categories[$key]) && $app_categories[$key]->parent == $previous_id) {
                                    $id = $key;
                                }
                            }
                        }
                        if (!$found || !$id) {

                            $found = false;

                            $category                 = $this->app->object->create('Category');
                            $category->application_id = $application->id;
                            $category->name           = trim($name);
                            $category->parent         = $previous_id;

                            // set a valid category alias
                            $category->alias = $this->app->alias->category->getUniqueAlias(0, $this->app->string->sluggify($alias ? $alias : $name));

                            try {

                                $category_table->save($category);
                                $app_categories[$category->id]     = $category;
                                $app_category_names[$category->id] = $category->name;
                                $app_category_alias[$category->id] = $alias_matches[$alias] = $category->alias;
                                $id                                = $category->id;

                            } catch (CategoryTableException $e) {
                            }
                        }
                        if ($id && $i == count($names) - 1) {
                            $related_categories[] = $id;
                        } else {
                            $previous_id = $id;
                        }
                    }
                }

                // add category to item relations
                if (!empty($related_categories)) {

                    $this->app->category->saveCategoryItemRelations($item, $related_categories);

                    // make first category found primary category
                    if (!$item->getPrimaryCategoryId()) {
                        $item->getParams()->set('config.primary_category', $related_categories[0]);
                        $item_table->save($item);
                    }
                }

            } catch (ItemTableException $e) {
            }
        }
        fclose($handle);

        return true;

    }

    /**
     * Builds the assign element info from csv.
     *
     * @param string $file
     * @param boolean $contains_headers
     * @param string $field_separator
     * @param string $field_enclosure
     *
     * @return array Assign element info
     * @since 2.0
     */
    public function getImportInfoCSV($file, $contains_headers = false, $field_separator = ',', $field_enclosure = '"')
    {

        $info = array();

        $application = $this->app->zoo->getApplication();

        // get types
        $info['types'] = array();
        foreach ($application->getTypes() as $type) {
            $info['types'][$type->id] = array();
            foreach ($type->getElements() as $element) {
                // filter elements

                // Joomla-book.ru hack
                $types = array('text', 'textarea', 'link', 'email', 'image', 'gallery', 'download', 'date',
                    'googlemaps', 'country', 'select', 'radio', 'checkbox',
                    'jbprice', 'jbimage', 'jbselectcascade','jbslidernivo','jbgallery'
                );

                if (in_array($element->getElementType(), $types)) {
                    $info['types'][$type->id][$element->getElementType()][] = $element;
                }
            }
        }

        // get item types
        $info['item_count'] = 0;

        $info['columns'] = array();

        // make sure the line endings are recognized irrespective of the OS
        ini_set('auto_detect_line_endings', true);

        // get column names and row count
        $row = 0;
        if (($handle = fopen($file, "r")) !== false) {

            while (($data = fgetcsv($handle, 0, $field_separator, $field_enclosure)) !== false) {
                if ($row == 0) {
                    // get column names from header row
                    if ($contains_headers) {
                        $info['columns'] = $data;
                    } else {
                        $info['columns'] = array_fill(0, count($data), '');
                    }
                }

                // get max column count
                $row++;
            }

            // get item count
            $info['item_count'] = $contains_headers ? $row - 1 : $row;

            fclose($handle);
        }

        return $info;
    }

}

/**
 * ImportHelperException identifies an Exception in the ImportHelper class
 * @see ImportHelper
 */
class ImportHelperException extends AppException
{
}

Также я ознакомился с темой по вставке цены и фото в импорт - тыкс. Указанные в ней доплатки уже на мой взгляд учтены в хаке. 

Также я прошу обратить внимание на тот факт, что текст в описании при наличии стилей (css) в формате CSV выгружается не в одну ячейку, а разбивается на три и более ячеек. 

 

С уважением, 

Василий. 


  • 0

#4 SmetDenis

SmetDenis

Отправлено 15 July 2013 - 10:44   Лучший Ответ

Советую вам дождаться новой версии (2.0) там будет полноценный импорт и экспорт.
Это произойдет на этой неделе ( знаю по секрету =) )

Сейчас стандартный экспорт нуждается в костылях, патчах и прочих доработках.
  • 1
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.






Темы с аналогичным тегами импорт csv

Click to return to top of page in style!