-2

在我们的 Magento 1.5.0.1 上,我编写了一个 PHP 脚本来更新我们所有的产品元标题,使其基于每个产品的名称和 SKU。该脚本通过 SSH 调用 PHP 来运行。

运行脚本后,我在 M2E Pro(eBay 同步模块)中注意到每个产品似乎都已被禁用。

Magento 截图

查看它们没有被禁用的实际产品,因此看来我的脚本以某种方式伪造了事件。

然而,在我们的 3,000 多种产品中,其中一种被禁用,随后 M2E Pro 从 eBay 上删除了该列表。

这是我的脚本:

<?php
set_time_limit(0);
define('MAGENTO', "/home/discount/public_html");
require_once MAGENTO . '/app/Mage.php';
error_reporting(E_ALL);
ini_set('display_errors', '1');
umask(0);
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
$storeId = Mage::app()->getStore('default')->getId();

$products = Mage::getModel('catalog/product')
    ->getCollection()
    ->addAttributeToSelect('sku')
    ->addAttributeToSelect('name')
    ->addAttributeToSelect('meta_title');

$total = count($products);
$count = 1;

foreach ($products as $product)
{
    $mt = sprintf("%s [%s]", $product->getName(), $product->getSku());
    $sku = $product->getSku();
    if ($product->getMetaTitle() != $mt)
    {
        $percent = $count / $total;
        echo $sku." ".$percent."\n";
        $product->setMetaTitle($mt);
        $product->save();
    }
}
?>

我想知道我需要对我的脚本做些什么才能使其正确更新元标题而不引起奇怪的事件?

4

2 回答 2

2

在这里暗中刺探,但 M2E 扩展很有可能为模型/产品保存设置了事件侦听器,并且在该事件侦听器中,根据产品状态执行操作。

这本身不是问题,但是当您通过其集合加载 EAV 模型时,它会加载最少的属性。由于您没有通过addAttributeToSelect此显式加载产品状态,因此可能会混淆 M2E 扩展。尝试添加状态属性。如果这不起作用,请尝试addAttributeToSelect('*')——M2E 可能还会检查其他属性以决定何时拉取东西。

最后,当您通过集合加载 EAV 模型时,它们afterLoad不会被调用。M2E 扩展可能(天真地)假设发生的事情afterLoad将会发生,因此您可能希望为每个产品显式调用它。

$product->afterLoad();

除此之外,您需要对 M2E 进行逆向工程,使其在代码中高于日志记录的位置,并确定它认为需要禁用产品的原因。由于这是一个商业扩展,我会联系开发人员。如果您为某事付费,那么您应该得到某种程度的支持。

于 2012-07-20T06:57:59.860 回答
0
<?php
//increase the max execution time
@ini_set('max_execution_time', -1);
//memory_limit
@ini_set('memory_limit', -1);

error_reporting(E_ALL);
ini_set('display_errors', '1');

// Start Despaly All Product Meta Title And Description
require_once('app/Mage.php'); //Path to Magento
umask(0);
Mage::app();

$categories = Mage::getModel('catalog/category')
                         ->getCollection()
                         // magic is prepared here..
                         ->addAttributeToSelect('*')
                         // then the magic happens here:
                         ->addAttributeToFilter('level', array('eq'=>4))
                         ->load();
    if (count($categories) > 0):

        foreach($categories as $category):

            $catId = $category->getId();
            $category = Mage::getModel('catalog/category')->load($catId);
            $resource = Mage::getResourceModel('catalog/category');
            //if($catId==1465):  //If Update Specific category Value by Id
                $CategoryName = $category->getName(); 
                $metaTitle = "Buy ".$CategoryName." Test Title";
                $metaDescription = "Shop your favourite ".$CategoryName." Test Description";

                $category->setData('meta_title', $metaTitle);
                $resource->saveAttribute($category, 'meta_title');
                $category->setData('meta_description', $metaDescription);
                $resource->saveAttribute($category, 'meta_description');

                $check = $category->getMetaTitle();
                echo "<pre>";
                print_r($catId);
                echo "<pre>";
                print_r($check);
                echo "\n";
            //endif; 

        endforeach;
     else: echo "No Results";
    endif;

?>
于 2018-07-16T11:34:23.363 回答