เขียนวีโอไอพีควบคุมซ้ำ


12

ฉันต้องการเขียนทับการกระทำที่เรียกว่า _initAction จาก Controller:

/app/code/core/Mage/Adminhtml/controllers/Catalog/Product/AttributeController.php

เป็นโมดูลและคอนโทรลเลอร์ของฉันเอง:

/app/code/local/Qbikz/ToolTip/controllers/Adminhtml/Catalog/Product/AttributeController.php

ฉันลองวิธีต่างๆในการแก้ไขแล้ว: วิธีแรกที่<from>และ<to>ฉันลองชุดค่าผสมที่แตกต่างกัน (ไม่พบหน้า 404):

 <rewrite>
     <qbikz_tooltip_adminhtml_catalog_product_attribute>
         <from><![CDATA[#^/adminpanel/catalog_product_attribute/edit/#]]></from>
         <to>/tooltip/adminhtml_catalog_product_attribute/init/</to>
     </qbikz_tooltip_adminhtml_catalog_product_attribute>
</rewrite>

+

 <frontend>
        <routers>
            <qbikz_tooltip>
                <use>admin</use>
                <args>
                    <module>Qbikz_ToolTip</module>
                    <frontName>catalog_product_attribute</frontName>
                </args>
            </qbikz_tooltip>
        </routers>
    </frontend>

วิธีที่สอง (หน้าที่แสดงโดยไม่สนใจกฎของฉัน):

<admin>
        <routers>
            <adminhtml>
                <args>
                    <modules>
                        <Qbikz before="Mage_Adminhtml_Catalog_Product">Qbikz_ToolTip_Adminhtml_Catalog_Product</Qbikz>
                    </modules>
                </args>
            </adminhtml>
        </routers>
    </admin>

ในตัวควบคุมของฉันฉันใส่ตาย ("ตกลง"); แต่มันไม่ปรากฏขึ้น บางทีบางคนอาจช่วยได้? ขอบคุณ


คุณจำไม่ได้ที่จะล้างแคช? แคชการกำหนดค่าโดยเฉพาะอย่างยิ่ง?
Benubird

"คอนโทรลเลอร์ Rewtire"? นั่นอะไร?
Buttle Butkus

ใช่แคชของฉันถ้าปิด
อุด

เขียนทับก็โอเค? ขอโทษสำหรับภาษาอังกฤษของฉัน =)
Stopper

พวกกรุณาตอบคำถามของฉัน
Anup Chaudhary

คำตอบ:


15

ใช้วิธีที่สอง แต่แก้ไขเล็กน้อย XML ของคุณควรมีลักษณะดังนี้:

<admin>
    <routers>
        <adminhtml>
            <args>
                <modules>
                    <Qbikz_ToolTip before="Mage_Adminhtml">Qbikz_ToolTip_Adminhtml</Qbikz_ToolTip>
                </modules>
            </args>
        </adminhtml>
    </routers>
</admin>

ตอนนี้สร้างไฟล์Qbikz/ToolTip/controllers/Adminhtml/Catalog/Product/AttributeController.phpด้วยเนื้อหานี้:

<?php 
require_once 'Mage/Adminhtml/controllers/Catalog/Product/AttributeController.php';
class Qbikz_ToolTip_Adminhtml_Catalog_Product_AttributeController extends Mage_Adminhtml_Catalog_Product_AttributeController {
   protected function _initAction(){
       //your magic here
   }
}

@Marius สิ่งที่ดีกว่าคือต้องการไฟล์วิธีการของคุณหรือ require_once (Mage :: getModuleDir ('ตัวควบคุม', 'Mage_Adminhtml') DS.'Catalog'.DS.'Product'.DS.'AttributeController.php '); นอกจากนี้ฉันต้องการทราบว่าเราสามารถเขียนบล็อกและคอนโทรลเลอร์ในโมดูลเดียวหรือไม่หรือเราต้องเขียนโมดูลแยกต่างหากเพื่อเขียนบล็อกและควบคุม
Adnan

ทั้งสองวิธีมีผลลัพธ์เหมือนกัน แต่ถ้าคุณต้องการถูกต้องทางการเมือง 100% ใช้วิธีการที่คุณกล่าวถึง นอกจากนี้คุณสามารถใช้โมดูลเดียวกันเพื่อเขียนบล็อกและตัวควบคุม
Marius

ดูเหมือนว่าจะไม่ทำงานเมื่อพยายามแทนที่ indexAction () ของ Mage_Checkout :: CartController.php
Max

ใน 1.9.4.2 นี่กำลังส่งข้อผิดพลาดให้ฉัน ตัวควบคุมโยน 404 บางทีมันอาจจะมีวิธีที่แตกต่างออกไปในตอนนี้? มันเกิดขึ้นกับฉันเมื่อเอาชนะผู้ควบคุมการชำระเงิน
gabtzi

0

ในส่วนขยาย onestepcheckout ของฉันไฟล์กำหนดค่า: app / code / local / Gurutheme / Onestepcheckout / etc / config.xml

<frontend>
        <routers>
             <checkout>
                <args>
                    <modules>
                        <Gurutheme_Onestepcheckout before="Mage_Checkout">Gurutheme_Onestepcheckout</Gurutheme_Onestepcheckout>
                    </modules>
                </args>
            </checkout>
        </routers>
</frontend>

ฉันเพิ่มตัวควบคุม

app/code/local/Gurutheme/Onestepcheckout/controllers/OnepageController.php

สำหรับแทนที่ Onepage core controller

app/code/core/Mage/Checkout/controllers/OnepageController.php

นี่คือซอร์สโค้ดพื้นฐานของคอนโทรลเลอร์ที่เอาชนะ:

require_once("Mage/Checkout/controllers/OnepageController.php");

class Gurutheme_Onestepcheckout_OnepageController extends Mage_Checkout_OnepageController {

}

สิ่งสำคัญที่เมื่อเขียนตัวควบคุมวีโอไอพีใหม่เราควรรวมตัวดั้งเดิมและขยายออกจากมันมันช่วยพฤติกรรมพื้นเมืองทั้งหมดก่อนเพื่อให้คุณสมบัติทั้งหมดที่สร้างไว้ล่วงหน้าจะทำงาน


เฉพาะในกรณีที่คุณใช้วิธีการป้องกันเพิ่มเติมของชั้นเรียนเดิมในการดำเนินการแทนที่ของคุณ การกระทำทั้งหมดที่ขาดหายไปในคอนโทรลเลอร์ของคุณจะได้รับการจัดการโดยคอนโทรลเลอร์ดั้งเดิม โปรดทราบว่าในทางเทคนิคคุณไม่ได้เขียนคอนโทรลเลอร์ใหม่ แต่เพิ่มลงในรายการตัวจัดการสำหรับชื่อหน้า
Fabian Schmengler

ทั้งหมดเห็นเราจริงอีกเส้นทาง แต่ควรขยายต้นฉบับหนึ่งสำหรับการสืบทอดที่มีอยู่รหัส
phanvugiap

-1

ฉันเขียนตัวควบคุมสิ่งที่อยากได้ขององค์กรอีกครั้ง

ในตัวฉัน config.xml

<frontend>
    <routers>
        <wishlist>
            <args>
                <modules>
                    <namespace_modulename before="Enterprise_Wishlist">Namespace_Modulename</namespace_modulename>
                </modules>
                <module>Namespace_Modulename</module>
                <frontName>shoppinglist</frontName>
            </args>
        </wishlist>
    </routers>
</frontend>

และในIndexControllerบรรทัดเพิ่มด้านล่างของฉัน:

require_once 'Enterprise/Wishlist/controllers/IndexController.php';

//before

class Namespace_Modulename_IndexController extends Enterprise_Wishlist_IndexController{}

คุณสามารถเขียนผู้ช่วยได้อีกครั้งเช่นนี้: /magento//a/91474/33509

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.