私も同様の問題を抱えていました。ただし、私の場合、ニュースレター フォームに「国」と「性別」フィールドを追加することになっています。それで、コアを何時間も掘り下げて、私はこれを理解しました. 以下に説明を示します。
app/design/frontend//default/template/newsletter/subscribe.phtmlでは、フォームのアクション フィールドに getFormActionUrl() ?> があります。これは app/code/core/Mage/Newsletter/Block/Subscribe.php を指します
subscirbe.phtml ファイルで使用される $this オブジェクトはこのクラス (Mage_Newsletter_Block_Subscribe) を参照するため、subscribe.phtml ファイルの$this->getFormActionUrl( )はこのクラスの関数getFormActionUrl()を参照します。
さて、この getFormActionUrl() は、親の Mage_Core_Block_Template (メソッド getURL()) に属するメソッド $this->getUrl('newsletter/subscriber/new', array('_secure' => true)) を返しています。この部分は私たちにとって重要ではありません。
最初の部分「ニュースレター」はモジュール名 (app/code/code/Mage/ newsletter )で
あり、2 番目の部分「サブスクライバー」はコントローラー名 ( app/code/code/Mage/newsletter/controllers/SubscriberController) であり、3 番目の部分「new」は、コントローラー SubscriberController のメソッド newAction です。
コントローラー名には Controller という接尾辞が付き、関数名にはActionという接尾辞が付きます。(これを理解するのに役立つ Phalcon フレームワークに感謝します)
newAction() メソッドでは、デフォルトでメールのみが
$email = (string) $this->getRequest()->getPost('email');として投稿されていることがわかります。
私がしたことは、custom-newsletter.phtml という名前で subscribe.phtml テンプレートを複製し、「country」と「gender」という名前の 2 つのフィールドを追加することでした。次に、newAction() に次の行を追加しました。
$country = (string) $this->getRequest()->getPost('country');
$gender = (string) $this->getRequest()->getPost('gender');
SubscriberController の 67 行目 (newAction() メソッド内) に次のコードがあります。
$status = Mage::getModel('newsletter/subscriber')->subscribe($email);
この行は app/code/code/Mage/newsletter/Model/Subscriber.php のsubscribeメソッドを呼び出しており、ニュースレター フォームから投稿された $email をそれに渡しています。次のように行を変更しました。
$status = Mage::getModel('newsletter/subscriber')->subscribe($email,$country,$gender);
ここで、app/code/code/Mage/newsletter/Model/Subscriber.php を編集する必要があります。
モデルについて話すとき、モデルが参照するデータベース テーブルについて話しています。モデル名は Subscriber で、モジュール Newsletter に属しているため、このモデルが影響を与えるデータベース テーブルはnewsletter_subscriberです。
この部分から、@Hassan Ali Sshahzad の質問に回答します。
そこに、subscriber_country とsubscriber_gender という名前の 2 つの新しい列を追加しました。現在、Magento のシステムは、これらの列に対して次の名前の getter および setter 関数を自動的に使用できるようにします。
関数 getSubscriberCountry(){} 関数 setSubscriberCountry($country_name){}
したがって、私がモデルでしなければならなかったのは、次のことだけでした。
- メソッド subscribe($email) を subscribe($email,$country,$gender) に編集します
次のように、try ステートメントの直前に subscribe($email,$country,$gender) 関数に次のコードを追加します。
$this->setSubscriberCountry($country);
$this->setSubscriberGender($gender);
try{ $this->save()
Hassan の方法は、Magento の MVC を理解する上で重要な役割を果たしたので、私の側から戻ってきました。