cancel
Showing results for 
Search instead for 
Did you mean: 

Getting the categories out of Magento in an export file

Getting the categories out of Magento in an export file

Dear Magento  Community,

 

We are building an multi-language store on Magento. For the configuration with a third party we are looking for a way to get the categories, by name/title, out of Magento into an export file. We succeeded doing this with the script below. Right now we are additionally searching for a way to get the names of the categories in the right language out of Magento. 


Additionally we are searching for a way to get the script to do the right mark-up. So for example, we would love to have the parent category above the child category. 

 

We have been looking for an answer for this for a long while now. Anyone has any spare thoughts for us, or is even capable to help us out with this?

 

<?php
use Magento\Framework\App\Bootstrap;
require __DIR__ . '/app/bootstrap.php';

$bootstrap = Bootstrap::create(BP, $_SERVER);
$objectManager = $bootstrap->getObjectManager();

$state = $objectManager->get('Magento\Framework\App\State');
$state->setAreaCode("frontend");

//get category factory
$categoryCollectionFactory = $objectManager->create('\Magento\Catalog\Model\ResourceModel\Category\CollectionFactory');
$categoryCollection = $categoryCollectionFactory->create();
$categoryCollection->addAttributeToSelect('*');

$categoryArray = array();
foreach ($categoryCollection as $category) {
$split = explode("/",$category->getPath());
$sorter = $category->getPath();
foreach($split as $element)
$sorter.= $element + 10000;
$categoryArray[] = array($category->getPath(), $category->getLevel(), $category->getName(), $category->getId(),$sorter);
}

usort($categoryArray, "usortTest");

$handle = fopen("category_export.txt", "w");

foreach($categoryArray as $category)
{
$path = $category[0];
$level = $category[1];
$name = $category[2];
$catid = $category[3];

$tree = "";
if($level > 0){
for($i = 0; $i < $level - 1; ++$i)
$tree.= " ";
}

//echo $tree.$name."\n";
fwrite($handle,$tree.$name." - ". $catid."\n");
}

echo "found ".$categoryCollection->getSize()." categories\n";
fwrite($handle,"found ".$categoryCollection->getSize()." categories");
fclose($handle);

function usortTest($a, $b) {
return strcmp($a[3],$b[3]);
}

?>

 

 

1 REPLY

Re: Getting the categories out of Magento in an export file

Hi @jelmer_van der linden,

 

Is it possible for you to use the API?

For example, using something like:

 

<?php

$api_url = 'https://www.domain.com/rest/V1';
$userData = array("username" => "your_username", "password" => "your_password");

$curl = curl_init($api_url . "/integration/admin/token");

curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($userData));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-Type: application/json", "Content-Lenght: " . strlen(json_encode($userData))));

$token = curl_exec($curl);


$curl = curl_init($api_url . "/categories");


try {
    curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "GET");
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-Type: application/json", "Authorization: Bearer " . json_decode($token)));

    $result = curl_exec($curl);

    $http_code = curl_getinfo($curl, CURLINFO_HTTP_CODE);

    echo '<pre>';
    var_dump($http_code);

    echo '<br /><br /><br />';
    echo '--------------------------';
    echo '<br /><br /><br />';

    var_dump($result);

    echo '<br /><br /><br />';
    echo '--------------------------';
    echo '<br /><br /><br />';

    $decode = json_decode($result);

    print_r($decode);

    echo '</pre>';
} catch (Exception $e) {
    dump($e);
}

You'll get something like:

 

int(200)

--------------------------

string(382) "{"id":2,"parent_id":1,"name":"Default Category","is_active":true,"position":1,"level":1,"product_count":0,"children_data":[{"id":3,"parent_id":2,"name":"My sample category","is_active":true,"position":1,"level":2,"product_count":0,"children_data":[{"id":4,"parent_id":3,"name":"My sample subcategory","is_active":true,"position":1,"level":3,"product_count":0,"children_data":[]}]}]}"

--------------------------

stdClass Object
(
    [id] => 2
    [parent_id] => 1
    [name] => Default Category
    [is_active] => 1
    [position] => 1
    [level] => 1
    [product_count] => 0
    [children_data] => Array
        (
            [0] => stdClass Object
                (
                    [id] => 3
                    [parent_id] => 2
                    [name] => My sample category
                    [is_active] => 1
                    [position] => 1
                    [level] => 2
                    [product_count] => 0
                    [children_data] => Array
                        (
                            [0] => stdClass Object
                                (
                                    [id] => 4
                                    [parent_id] => 3
                                    [name] => My sample subcategory
                                    [is_active] => 1
                                    [position] => 1
                                    [level] => 3
                                    [product_count] => 0
                                    [children_data] => Array
                                        (
                                        )

                                )

                        )

                )

        )

)

 

There you can see:

 

  1. the http status code
  2. The json string
  3. The json string decoded
--
If you've found one of my answers useful, please give "Kudos" or "Accept as Solution"