0

Magento の登録フォームに 2 番目の姓フィールドを追加し、メソッド getName from を変更しMage_Customer_Model_Customerて、名前が印刷されるすべての場所に 2 番目の名前が含まれるようにしました。フィールドセットが の config.xml から読み取られる管理顧客リストを除いて、どこでも機能しますMage_Customer。私の質問は、カスタム モジュールからそのフィールドセットを「オーバーライド」するにはどうすればよいですか?

fieldset記録のために、私はすでにconfig.xml 内にタグを入れようとしましたが、うまくいきませんでした。

4

2 に答える 2

0

デビッド、グリッド app\code\core\Mage\Adminhtml\Block\Customer\Grid.php をオーバーライド/変更し、_prepareCollection を変更してコレクションにフィールドを含め、addColumn メソッドを使用して 2 番目の姓を表示できます。

于 2013-10-28T13:47:39.303 に答える
0

解決しました!Mage_Customer_Model_Resource_Customer_Collection 実際に名前全体を連結するという名前のメソッド(プレフィックス、ファースト、ミドル、ラストネーム、サフィックス)がある場所まですべてをトレースしたaddNameToSelect()ので、私がやったことは、この特定のメソッドをオーバーライドし、そこに2番目のラストネームを追加することでした。

コードは次のとおりです。

/**
 * Add Name to select
 *
 * @return Mage_Customer_Model_Resource_Customer_Collection
 */
public function addNameToSelect()
{
    $fields = array();
    $customerAccount = Mage::getConfig()->getFieldset('customer_account');
    foreach ($customerAccount as $code => $node) {
        if ($node->is('name')) {
            $fields[$code] = $code;
        }
    }

    $adapter = $this->getConnection();
    $concatenate = array();
    if (isset($fields['prefix'])) {
        $concatenate[] = $adapter->getCheckSql(
            '{{prefix}} IS NOT NULL AND {{prefix}} != \'\'',
            $adapter->getConcatSql(array('LTRIM(RTRIM({{prefix}}))', '\' \'')),
            '\'\'');
    }
    $concatenate[] = 'LTRIM(RTRIM({{firstname}}))';
    $concatenate[] = '\' \'';
    if (isset($fields['middlename'])) {
        $concatenate[] = $adapter->getCheckSql(
            '{{middlename}} IS NOT NULL AND {{middlename}} != \'\'',
            $adapter->getConcatSql(array('LTRIM(RTRIM({{middlename}}))', '\' \'')),
            '\'\'');
    }
    $concatenate[] = 'LTRIM(RTRIM({{lastname}}))';

    //HERE I ADDED THE SECOND LAST NAME
    if (isset($fields['lastname2'])) {
        $concatenate[] = $adapter->getCheckSql(
            '{{lastname2}} IS NOT NULL AND {{lastname2}} != \'\'',
            $adapter->getConcatSql(array('\' \'','LTRIM(RTRIM({{lastname2}}))', '\' \'')),
            '\'\'');
    }


    if (isset($fields['suffix'])) {
        $concatenate[] = $adapter
                ->getCheckSql('{{suffix}} IS NOT NULL AND {{suffix}} != \'\'',
            $adapter->getConcatSql(array('\' \'', 'LTRIM(RTRIM({{suffix}}))')),
            '\'\'');
    }

    $nameExpr = $adapter->getConcatSql($concatenate);

    $this->addExpressionAttributeToSelect('name', $nameExpr, $fields);

    return $this;
}
于 2013-11-01T05:17:57.357 に答える