1

顧客が購読した日付とその IP アドレスのニュースレター購読者用に 2 つのカスタム フィールドを追加したいと考えています。1) 「newsletter_subscriber」テーブルに 2 つの列を追加しました。これはどのように達成できますか?

ファイル app/code/core/Mage/Newsletter/Model/Subscriber.php で、次のような関数を見つけました。

$this->setSubscriberEmail($email);
$this->setStoreId(Mage::app()->getStore()->getId());
$this->setCustomerId(0); 

しかし、私はそのコードを見つけられませんでした。私もそのようにデータを保存すると思いますが、どうすれば可能になりますか?$this->seSubscriptionDate(); のような関数のコードを定義して宣言する必要があります。

そして、ニュースレター - >ニュースレター購読者の下の管理パネルに表示する方法は?

4

2 に答える 2

7

私は誰からも解決策や助けを見つけることができませんでした。私は頭を悩ませて解決策を見つけました。将来、この投稿によって時間を節約できる可能性があります。1)テーブル「newsletter_subscriber」に列を追加します。私の場合は「subscription_date」と「sub_ip_address」と言います。2)次の2行を追加します。ファイル内@2つの場所app\code \ core \ Mage \ Newsletter \ Model \ Subscriptionr.php

**$this->setSubscriptionDate(date("d-m-Y"));
**$this->setSubIpAddress($_SERVER['REMOTE_ADDR']);

1つの場所:関数内:public function subscribe($ email)前:$ this-> save(); 2番目の場所:関数内:public function subscribeCustomer($ customer)前:$ this-> save(); これで、データがテーブルに追加され、管理パネルに表示されます1)ファイルapp \ code \ core \ Mage \ Adminhtml \ Block \ Newsletter \ Subscriber \ Grid.phpを開きます。次のように、必要な2つの列を追加するだけです。

$this->addColumn('subscription_date', array(
            'header'    => Mage::helper('newsletter')->__('Subscription Date'),
            'index'     => 'subscription_date',
            'default'   =>    '----'
        ));

        $this->addColumn('sub_ip_address', array(
            'header'    => Mage::helper('newsletter')->__('IP Address'),
            'index'     => 'sub_ip_address',
            'default'   =>    '----'
        ));

終了します。**これは私が時間を費やしたポイントであり、最後にこの関数をヒットおよびトライアルベースで追加しましたが、機能します。Core magento team plzの誰かが、この{setSubscriptionDate()}関数が機能する理由を説明していますか?私はこの関数の誰も宣言していませんでした。テーブルフィールドを検出することはインテリセンスを示しているようですか?

于 2012-12-06T14:19:17.660 に答える
0

私も同様の問題を抱えていました。ただし、私の場合、ニュースレター フォームに「国」と「性別」フィールドを追加することになっています。それで、コアを何時間も掘り下げて、私はこれを理解しました. 以下に説明を示します。

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){}

したがって、私がモデルでしなければならなかったのは、次のことだけでした。

  1. メソッド subscribe($email) を subscribe($email,$country,$gender) に編集します
  2. 次のように、try ステートメントの直前に subscribe($email,$country,$gender) 関数に次のコードを追加します。

    $this->setSubscriberCountry($country);
    $this->setSubscriberGender($gender);
    

try{ $this->save()


Hassan の方法は、Magento の MVC を理解する上で重要な役割を果たしたので、私の側から戻ってきました。

于 2015-01-07T10:14:37.670 に答える