2012-05-01 9 views
2

これで、連絡先コントローラーを無効にする新しいモジュールをセットアップしましたので、ニュースレターの購読オプションを追加できます。次のように私のセットアップは次のとおりです。Magento 1.6.2 - 連絡先コントローラーをオーバーライドする問題

/app/code/local/MyNamespace/ContactsPlus/controllers/Contacts/IndexController.php:

<?php 
# Controllers are not autoloaded so we will have to do it manually: 
require_once 'Mage/Contacts/controllers/IndexController.php'; 
class MyNameSpace_ContactsPlus_Contacts_IndexController extends Mage_Contacts_IndexController 
{ 
    # Overloaded indexAction 
    public function indexAction() { 
     # Just to make sure 
     error_log('Yes, I did it!'); 
     parent::indexAction(); 
    } 
} 

/アプリ/コード/ローカル/ MYNAMESPACE/ContactsPlusの/ etc/configに.xmlファイル:

<?xml version="1.0"?> 
<config> 
    <modules> 
     <mynamespace_ContactsPlus> 
      <version>0.1.0</version> 
     </mynamespace_ContactsPlus> 
    </modules> 
    <global> 
     <rewrite> 
      <mynamespace_contactsplus_contacts_index> 
       <from><![CDATA[#^/contacts/index/#]]></from> 
       <to>/contactsplus/contacts_index/</to> 
      </mynamespace_contactsplus_contacts_index> 
      <mynamespace_contactsplus_contacts_index> 
       <from><![CDATA[#^/contacts/#]]></from> 
       <to>/contactsplus/contacts_index/</to> 
      </mynamespace_contactsplus_contacts_index>    
     </rewrite> 
    </global> 
    <frontend> 
     <routers> 
      <mynamespace_contactsplus> 
       <use>standard</use> 
       <args> 
        <module>mynamespace_ContactsPlus</module> 
        <frontName>contactsplus</frontName> 
       </args> 
      </mynamespace_contactsplus> 
     </routers> 
    </frontend>  
</config> 

/app/etc/modules/MyNamespace_All.xml:

<?xml version="1.0"?> 
<config> 
<modules> 
    <MyNameSpace_ContactsPlus> 
     <active>true</active> 
     <codePool>local</codePool> 
    </MyNamespace_ContactsPlus> 
</modules> 
</config> 

モジュールがに表示されます。管理モジュールのリストと、それは私の/連絡先/ページに、次のエラーが発生しました:この行だ

Fatal error: Call to a member function setFormAction() on a non-object in /srv/www/foo.com/app/code/core/Mage/Contacts/controllers/IndexController.php on line 54 

 $this->getLayout()->getBlock('contactForm')->setFormAction(Mage::getUrl('*/*/post')); 

私もここから行くことがどこか分からないが、推測ではありますMage :: getUrl( '//post')から返されているものに対してフォームアクションを設定することはできませんが、私はストローtbhで握っています。

アドバイスをいただければ幸いです。

答えて

4

、助け、一般的な不満は、私はそれが働いて得た方法である:

まずは以下のように、私のモジュールディレクトリは(ディレクトリのキャップを注意してください)を設定されている:

/アプリケーション/コード/ローカル/ MYNAMESPACE/ContactsPlusの/ etc/

  • config.xmlの

/アプリケーション/コード/ローカル/ MYNAMESPACE/ContactsPlus/controll ERS/

  • IndexController.php

/アプリ/コード/ローカル/ MYNAMESPACE/ContactsPlus /ヘルパー/

  • Data.php設定ファイルのための今すぐ

/app/code/local/MyNamespace/ContactsPlus/etc/co nfig.xml:

<?xml version="1.0"?> 
<config> 
    <modules> 
     <MyNameSpace_ContactsPlus> 
      <version>0.1.0</version> 
     </MyNameSpace_ContactsPlus> 
    </modules> 
    <frontend> 
     <routers> 

     <!-- Creates route to my module via /contactsplus/ - I used this for testing --> 
      <contactsplus> 
       <use>standard</use> 
       <args> 
        <module>MyNameSpace_ContactsPlus</module> 
        <frontName>contactsplus</frontName> 
       </args> 
      </contactsplus> 

     <!-- Sets Mage_Contacts route to MyNameSpace_ContactsPlus -->    
      <contacts> 
       <args> 
        <modules> 
         <MyNameSpace_ContactsPlus before="Mage_Contacts">MyNameSpace_ContactsPlus</MyNameSpace_ContactsPlus> 
        </modules> 
       </args> 
      </contacts> 
     </routers> 
    <!-- Sets layout config file (essential for this to work) --> 
     <layout> 
      <updates> 
       <contactsplus> 
        <file>contactsplus.xml</file> 
       </contactsplus> 
      </updates> 
     </layout>   
    </frontend> 
    <global> 
    <!-- Sets a helper class for the module, when overriding contacts this is also essential. --> 
     <helpers> 
      <contactsplus> 
       <class>MyNameSpace_ContactsPlus_Helper</class> 
      </contactsplus> 
     </helpers>   
    </global> 
</config> 

/app/code/local/MyNamespace/ContactsPlus/controllers/Contacts/IndexController.php:

<?php 
# Controllers are not autoloaded so we will have to do it manually: 
require_once 'Mage/Contacts/controllers/IndexController.php'; 
class MyNameSpace_ContactsPlus_IndexController extends Mage_Contacts_IndexController 
{ 
    # Overloaded indexAction 
    public function indexAction() { 
     # Just to make sure 
     //die('Yes, I did it!'); 
     parent::indexAction(); 
    } 
} 

/アプリ/コード/ローカル/ MYNAMESPACE/ContactsPlus /ヘルパー/データ。PHP:

<?php 
class MyNameSpace_ContactsPlus_Helper_Data extends Mage_Core_Helper_Abstract 
{ 

} 

/app/etc/modules/MyNamespace_ContactsPlus.xml:

<?xml version="1.0"?> 
<config> 
    <modules> 
     <MyNameSpace_ContactsPlus> 
      <active>true</active> 
      <codePool>local</codePool> 
     </MyNameSpace_ContactsPlus> 
    </modules> 
</config> 

/app/design/frontend/mythemepackage/mytheme/layout/contacts.xml:

<?xml version="1.0"?> 
<layout version="0.1.0"> 
    <default> 
     <reference name="footer_links"> 
      <!-- <action method="addLink" translate="label title" module="contacts" ifconfig="contacts/contacts/enabled"><label>Contact Us</label><url>contacts</url><title>Contact Us</title><prepare>true</prepare></action> 
     --></reference> 
    </default> 
    <contacts_index_index translate="label"> 
    <!-- had to comment this out in order to prevent a duplicate form issue, if anyone has a better method for this then I'd love to here it :) 
     <label>Contact Us Form</label> 
     <reference name="head"> 
      <action method="setTitle" translate="title" module="contacts"><title>Contact Us</title></action> 
     </reference> 
     <reference name="root"> 
      <action method="setTemplate"><template>page/2columns-right.phtml</template></action> 
      <action method="setHeaderTitle" translate="title" module="contacts"><title>Contact Us</title></action> 
     </reference> 
     <reference name="content"> 
      <block type="core/template" name="contactForm" template="contacts/form.phtml"/> 
     </reference> 
    --> 
    </contacts_index_index> 

    <!-- added this to rewrite contacts handle to the new modules handle --> 
    <contacts_index_index> 
     <update handle="contactsplus_index_index"/> 
    </contacts_index_index> 
</layout> 

/app/design/frontend/mythemepackage/mytheme/layout/contactsplus.xml:

<?xml version="1.0"?> 
<layout version="0.1.0"> 
    <default> 
     <reference name="footer_links"> 
      <!-- <action method="addLink" translate="label title" module="contacts" ifconfig="contacts/contacts/enabled"><label>Contact Us</label><url>contacts</url><title>Contact Us</title><prepare>true</prepare></action> 
     --></reference> 
    </default> 
    <contactsplus_index_index translate="label"> 
     <label>Contact Us Form</label> 
     <reference name="head"> 
      <action method="setTitle" translate="title" module="contactsplus"><title>Contact Us</title></action> 
     </reference> 
     <reference name="root"> 
      <action method="setTemplate"><template>page/2columns-right.phtml</template></action> 
      <action method="setHeaderTitle" translate="title" module="contactsplus"><title>Contact Us</title></action> 
     </reference> 
     <reference name="content"> 
      <block type="core/template" name="contactForm" template="contactsplus/custom_form.phtml"/> 
     </reference> 
    </contactsplus_index_index> 

</layout> 

また、/app/design/frontend/mythemepackage/mytheme/template/contacts/form.phtmlのコピーを作成し、/ app/design/frontend/mythemepackage/mytheme/template/contactsplus /に配置し、それを私の要求に合っている。私はこのプロセスの間に特に有用であることが分かっ

リソースには、Google、IRCの#magentoと

http://www.magentocommerce.com/wiki/5_-_modules_and_development/0_-_module_development_in_magento/custom_module_with_custom_database_table

http://alanstorm.com

希望は、これはいくつかの点で他の誰かを助けました。

これで、新しいフォームにニュースレターのサインアップオプションが追加されました。

2

私はcontroller overriding in Magentoについてこの記事を読むことをお勧めします。ここでは多くの研究の後に[OK]を

+0

オーバーライドが機能しています。つまり、indexcontrollerが呼び出されてエラーが発生しています。これが私の助けになります。または、オーバーライドを間違って設定しましたか? –

関連する問題