2012-05-01 6 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/설정을 다음과 같이 내 설정이다 .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/설정 제어 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 /에 넣은 다음 수정했습니다. 내 요구 사항에 맞게. 나는이 과정에서 특히 유용하다고

자원이 어떤 점에서 다른 사람을 도움 구글, 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에 대해 읽는 것을 권장합니다.

첫번째로는, 내 모듈 디렉토리는 다음과 같이 (디렉토리에 모자 주) 밖으로 설정됩니다 :

+0

오버라이드가 작동 중입니다. 즉, indexcontroller가 오류를 발생시키는 것입니다. 이것이 내가 도움이 필요한 것입니다. 또는 무시 무시하게 설정 했습니까? –