-2

Magento 1.5.0.1で、各製品の名前とSKUに基づいてすべての製品メタタイトルを更新するPHPスクリプトを作成しました。スクリプトは、SSH経由でPHPを呼び出すことによって実行されます。

スクリプトを実行した後、M2E Pro(eBay同期モジュール)で、すべての製品が無効になっているように見えることに気付きました。

Magentoのスクリーンショット

実際の製品を見ると、それらは無効にされていないので、私のスクリプトはどういうわけかイベントを偽造しているようです。

ただし、3,000以上の製品のうち、1つが無効になり、その後M2EProが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 に答える