1

Magento Webストアの名前フィールドに会計ソフトウェアを入力しています。問題は30文字の制限があり、名前は常にSEOやUIよりも社内業務を対象としている傾向があることです。

一部のMagento製品の「代替名」を作成する最善の方法を考えていますが、それが存在する場合に限り、それ以外の場合は通常の名前フィールドにフォールバックします。

これを行うための最良の方法は、新しい製品属性(alternate_name)を作成し、フロントエンドでif elseステートメントを呼び出すことですか?

<?php if($_product->getAttributeText(’alternate_name’)) { 
 echo $_product->getAttributeText(’alternate_name’) 
 } else {
 echo $_product->getName(); 
 } ?>

次に、レイアウトフォルダのいくつかの場所で変更する必要がありますか?または、このメソッドを一度オーバーライドして、$ product-> getName()が呼び出されるたびに機能させる簡単な場所はありますか?

4

1 に答える 1

1

フロントエンドでの読み取り/表示にのみこれが必要な場合getName()は、コアモデルのメソッドをオーバーライドして次のMage_Catalog_Model_Productようにすることができます。

public function getName()
{
    if (Mage::app()->getStore()->isAdmin()) {
        return $this->getData('name');
    }
    return (
        ($this->getData('alternate_name')
        ? $this->getData('alternate_name')
        : $this->getData('name')
    );

}

getName()このようにすると、どこから来たかに関係なく、すべての製品コールに対応する単一の変更ポイントが得られます。

nameこれを行うと、属性の編集/保存に関して問題が発生する可能性があることに注意してください。

これは、たとえばMagentoバックエンドもyourgetName()を使用nameして商品編集のフィールドに入力する<form>ため、このフィールドに到達する値は、または属性<input>のいずれかである可能性があります。alternate_namename

変更を保存するalternate_nameと、属性に値が保存される可能性がnameありますが、これはおそらく望ましくありません。

nameこれを回避するために、上記のメソッドは、呼び出しが管理領域内から発信されている場合に常に属性の値を返します。これは、管理者編集フォームをキャッチするのに十分なはずですが、もちろん、呼び出しgetName()をフィードするために使用される他の考えられるケースをキャッチすることはできません。setName()->save()

于 2012-06-28T16:42:10.720 に答える