用于将产品导出到每个商店的XML的PHP​​脚本?

时间:2015-01-07 11:39:13

标签: php magento

所以,我有一个每日cron作业运行一个文件,该文件调用另一个文件,它将我们的产品列表组合导出到XML文件。这是两个文件。

arrayxml.php

<?php
class ArrayXml {

    private $xml;

    public function __construct($root='store') {
        $this->xml = new SimpleXMLElement("<$root></$root>");
    }

    private function iterate($element, $xmlNode) {
        foreach($element as $name=>$value) {
            if(is_string($value) || is_numeric($value)) {
                $xmlNode->$name = $value;
            } 
            else {
                $xmlNode->$name = null;
                $this->iterate($value, $xmlNode->$name);
            }
        }
    }
    public function toXML($array) {
        $this->iterate($array, $this->xml);
        return $this->xml->asXML();
    }
}
?>

和export.php

<?php
    header('Content-Type: text/xml');
    include '../app/Mage.php';
    include 'arrayxml.php';

    Mage::app();

    $_products = Mage::getModel('catalog/product')->getCollection();

    $_result = array();

    foreach($_products as $_product) {
        $_product = $_product->load();

        $categoryIds = $_product->getCategoryIds();
        if (isset($categoryIds[0])){
            $category = Mage::getModel('catalog/category')->setStoreId(Mage::app()->getStore()->getId())->load($categoryIds[0]);
            $categoryName = $category->getName();
        }

        $_result['products']['product'][] = array(
            'productId' => $_product->getSku(),
            'title' => $_product->getName(),
            'description' => $_product->getDescription(),
            'price' => $_product->getFinalPrice(),
            'image' => 'http://dissios.com/media/catalog/product'.$_product->getImage(),
            'url' => 'http://dissios.com/'.$_product->getUrlPath(),
            'instock' => 'Y',
            'availability' => 'Διαθέσιμο',
            'category_id' => $categoryIds[0],
            'category_name' => $categoryName
        );
    }
    $_converter = new ArrayXML();
    echo $_converter->toXML($_result);
    $f = fopen("bestprice.xml", "w");
    fwrite($f, $_converter->toXML($_result));
    fclose($f);
?>

从那时起,我将网站拆分为单独的商店/视图,因此有两个域我希望产品具有URL,而不是父商店(上面代码中的dissios.com)。

我希望此代码能够检查商店代码并相应地调整网址,因此我需要http://eclock.gr/media/catalog/product'。$ _ product-&gt; getImage()作为一个和{{3} }'。$ _ product-&gt; getImage()为另一个。

谢谢!

编辑:解决了!

这是我改变的代码:

// Get the product's store IDs
    $storeCode = $_product->getStoreIds();

    if ($storeCode[2] == '5') {

       $_result['products']['product'][] = array(
                'productId' => $_product->getSku(),
                'title' => $_product->getName(),
                'description' => $_product->getDescription(),
                'price' => $_product->getFinalPrice(),
                'image' => 'http://lourakiahirsch.gr/media/catalog/product'.$_product->getImage(),
                'url' => 'http://lourakiahirsch.gr/'.$_product->getUrlPath(),
                'instock' => 'Y',
                'availability' => 'Διαθέσιμο',
                'category_id' => $categoryIds[0],
                'category_name' => $categoryName
            );
    }
    else if ($storeCode[2] == '6') {

        $_result['products']['product'][] = array(
           'productId' => $_product->getSku(),
           'title' => $_product->getName(),
           'description' => $_product->getDescription(),
           'price' => $_product->getFinalPrice(),
           'image' => 'http://eclock.gr/media/catalog/product'.$_product->getImage(),
           'url' => 'http://eclock.gr/'.$_product->getUrlPath(),
           'instock' => 'Y',
           'availability' => 'Διαθέσιμο',
           'category_id' => $categoryIds[0],
           'category_name' => $categoryName
            );
    }
    else {
        $_result['products']['product'][] = array(
            'productId' => $_product->getSku(),
                'title' => $_product->getName(),
                'description' => $_product->getDescription(),
                'price' => $_product->getFinalPrice(),
                'image' => 'http://dissios.com/media/catalog/product'.$_product->getImage(),
                'url' => 'http://dissios.com/'.$_product->getUrlPath(),
                'instock' => 'Y',
                'availability' => 'Διαθέσιμο',
                'category_id' => $categoryIds[0],
                'category_name' => $categoryName
            );
    }

1 个答案:

答案 0 :(得分:0)

作为一种可能的方法,您可以存储您的商店&#39; ID(您可以在Magento Admin面板中找到它们)在一个数组中,然后使用以下内容循环它们:

foreach($arrayOfStores as $storeId) {
       $store = Mage::app()->getStore($storeId);

然后你加载你的收藏:

$collection = Mage::getModel('catalog/product')
                ->getCollection()
                ->setStoreId( $storeId )
                ->addAttributeToSelect('*');