5

実際には、セットアップスクリプトを使用してカテゴリを追加できますが、何らかの理由で一部のフィールドが正しく設定されていません。これが私のコードです

$this->startSetup();
Mage::register('isSecureArea', 1);

$category = Mage::getModel('catalog/category');
$category->setPath('1/2') // set parent to be root category
    ->setName('Category Name')
    ->setUrlKey('category-name')
    ->setIsActive(0)
    ->setIncludeInMenu(1)
    ->setInfinitescroll(1)
    ->setDisplayMode('PAGE')
    ->setLandingPage($idToCmsBlock)
    ->setPageLayout('anotherLayoutThanDefault')
    ->setCustomUseParentSettings(0)
    ->setCustomLayoutUpdate('<reference name="head"><action method="addCss"><stylesheet>css/somecss.css</stylesheet></action></reference>')
->save();
$this->endSetup();

このスクリプトを実行した後、EAVテーブルにすべての値を設定して作成されたカテゴリがあります。ただし、フラットテーブルのインデックスを再作成しても、フラットテーブルにはdisplayMode、landingPage、pageLayout、customLayoutUpdateがありません。

奇妙なことに、管理者に入ると、これらのフィールドがすべて適切に設定されているのがわかりますが、フロントエンドに入ると、これらのフィールドのほとんどが無視されます。管理者に行き、それらの値の設定を解除し、それぞれが正しく機能するようにリセットする必要があります。

また、setEnabled(1)を使用すると、私のカテゴリは管理者では「有効」になりますが、フロントエンドには表示されません。

PS:フラットカテゴリをアクティブにしました。無効にすると正常に機能するように見えますが、インデックスを再作成しても機能しません。

4

5 に答える 5

10

私はついにそれを見つけました。理由はわかりませんが、スクリプトが更新スクリプトで実行されているため、デフォルトのストア(storeId = 1)に挿入されたため、これらのフィールドが正しく表示されません。storeId0を使用する必要があります。

この情報を使用すると、解決策は次のようになると思います。

$this->startSetup();
Mage::register('isSecureArea', 1);

Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);

$category = Mage::getModel('catalog/category');
$category->setPath('1/2') // set parent to be root category
    ->setStoreId(Mage_Core_Model_App::ADMIN_STORE_ID)
    ->setName('Category Name')
    ...
    ->save();
$this->endSetup();

しかし、このコードも機能しません。実際、Mage :: app()(Mage_Core_Model_App Line 804)を調べた後、セットアップスクリプトを使用している場合は常にデフォルトストアを返すIF条件に気づきました。

秘訣は、セットアップスクリプトを使用していないことを偽造することです。私の実用的な解決策は、次のとおりです。

$this->startSetup();
Mage::register('isSecureArea', 1);

// Force the store to be admin
Mage::app()->setUpdateMode(false);
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);

$category = Mage::getModel('catalog/category');
$category->setPath('1/2') // set parent to be root category
    ->setStoreId(Mage_Core_Model_App::ADMIN_STORE_ID)
    ->setName('Category Name')
    ...
    ->save();
$this->endSetup();
于 2012-09-13T22:18:04.663 に答える
9

データインストールスクリプトを介してカテゴリを更新するときに、同じ問題が発生しました。受け入れられた回答で提供された解決策は、カテゴリを更新するために機能しましたが、次のように改善できます。

  • このソリューションでは、更新スクリプトをトリガーするユーザーが管理環境に強制されます。これは、現在のストアIDを保存し、スクリプトの最後に戻すことで解決できます。
  • isSecureAreaをレジストリに追加したり、更新モードを無効にしたりしても、(少なくともカテゴリを更新するユースケースでは)何の役にも立たないようです。

カテゴリを更新するための次のデータインストールスクリプトが作成されました(この例では、カテゴリは名前で読み込まれ、その後名前が更新されます)。

<?php
    $this->startSetup();

    //Switch to admin store (workaround to successfully save a category)
    $originalStoreId = Mage::app()->getStore()->getId();
    Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);

    //update category
    $category = Mage::getModel('catalog/category')
        ->loadByAttribute('name', 'OLD_CATEGORY_NAME');
    if ($category) {
        $category
            ->setStoreId(Mage_Core_Model_App::ADMIN_STORE_ID)
            ->setName('NEW_CATEGORY_NAME')
            ->save();
    }

    //Set store to original value
    Mage::app()->setCurrentStore($originalStoreId);

    $this->endSetup();
?>
于 2013-08-07T13:44:20.177 に答える
1

これを試して

<?php
require_once "../app/Mage.php";
umask(0);
Mage::app('default');
$proxy  = new SoapClient("http://127.0.0.1/magento/index.php/api/soap/?wsdl");
$sessionId  = $proxy->login($magento_webservices_username,  $magento_webservices_passwd);

$data = array('name'=>'Nokia',
            'description'=>'',
            'meta_description'=>'',
            'meta_keywords'=>'',
            'default_sort_by'=>'price',
            'available_sort_by'=>'price',
            'is_active'=>1
);
$newCategoryId = $proxy->call($sessionId, 'category.create', array(3, $data, 1));
echo "Category ID: ".$newCategoryId;

?>

また、Magentoの作成カテゴリもご覧ください

于 2012-09-13T07:34:56.580 に答える
-1

これを見てください。それがあなたを助けることを願っています。
http://inchoo.net/ecommerce/magento/how-to-add-new-custom-category-attribute-in-magento/

于 2012-09-12T01:18:33.297 に答える
-1

インストーラースクリプトを使用して複数のカテゴリを作成しました。

<?php
$installer = $this;
$installer->startSetup();

Mage::register('isSecureArea', 1);

$category = Mage::getModel('catalog/category');
$category->setPath('1/2/4') // set parent to be root category
->setName('CAT NAME') //Category Name
->setIsActive(1) // Category Status
->setIncludeInMenu(1) // Show in Menu
->setIsAnchor(1) // used for Layered navigation
->setDisplayMode('PAGE') //  Product Only
->setPageLayout('one_column') // Page layout
->save();

$installer->endSetup();
于 2016-05-30T05:52:52.527 に答える