Viết lại bộ điều khiển magento


12

Tôi cần ghi đè lên hành động được gọi là _initAction từ Trình điều khiển:

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

vào mô-đun và bộ điều khiển của riêng tôi:

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

Tôi đã thử các cách khác nhau để giải quyết nó: Phương pháp đầu tiên trong đó <from><to>tôi đã thử các kết hợp khác nhau (Không tìm thấy trang 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>

Phương pháp thứ hai (Trang hiển thị mà bỏ qua quy tắc của tôi):

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

Trong bộ điều khiển của tôi, tôi đặt die ("ok"); Nhưng nó không hiển thị. Có lẽ ai đó có thể giúp đỡ? Cảm ơn.


Bạn có nhớ để xóa bộ nhớ cache? Riêng bộ đệm cấu hình?
Benubird

"Bộ điều khiển phần thưởng"? Cái gì vậy
Butussy Butkus

Có, bộ nhớ cache của tôi nếu tắt.
Dừng

Ghi đè là ok? xin lỗi vì tiếng anh của tôi =)
Dừng

Các bạn hãy trả lời chủ đề của tôi- magento.stackexchange.com/questions/98758/NH
Anup Chaudhary

Câu trả lời:


15

Sử dụng phương pháp thứ hai nhưng một chút sửa đổi. XML của bạn sẽ trông như thế này:

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

Bây giờ tạo tập tin Qbikz/ToolTip/controllers/Adminhtml/Catalog/Product/AttributeController.phpvới nội dung này:

<?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 những gì tốt hơn để yêu cầu một tệp, theo cách của bạn hoặc request_once (Mage :: getModuleDir ('controls', 'Mage_Adminhtml'). DS.'Catalog'.DS.'Sản phẩm'.DS.'AttributionControll.php '); Ngoài ra, tôi muốn biết liệu chúng ta có thể viết lại khối và bộ điều khiển trong một mô-đun không hoặc chúng ta phải viết các mô-đun riêng biệt để viết khối và hơn bộ điều khiển.
Ad Nam

Cả hai cách đều có kết quả như nhau. Nhưng nếu bạn muốn chính xác 100%, hãy sử dụng phương pháp bạn đã đề cập. Ngoài ra, bạn có thể sử dụng cùng một mô-đun để viết lại các khối và bộ điều khiển.
Marius

Điều này dường như không hoạt động khi cố gắng ghi đè indexAction () của Mage_Checkout :: CartControll.php.
Tối đa

Trong 1.9.4.2, điều này gây ra lỗi cho tôi. Bộ điều khiển ném 404. Có lẽ có một cách khác để làm điều đó bây giờ? Nó đang xảy ra với tôi khi ghi đè bộ điều khiển thanh toán
gabtzi

0

Trong phần mở rộng onestepcheckout của tôi, tệp cấu hình: 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>

Tôi đã thêm một bộ điều khiển

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

để ghi đè bộ điều khiển lõi Onepage

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

Đây là mã nguồn cơ bản của bộ điều khiển ghi đè đó:

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

class Gurutheme_Onestepcheckout_OnepageController extends Mage_Checkout_OnepageController {

}

Điều chính là khi viết lại bộ điều khiển magento, chúng ta nên bao gồm bộ điều khiển gốc và mở rộng từ nó, nó giúp tất cả các hành vi gốc trước đó để tất cả các tính năng được xây dựng trước sẽ hoạt động.


Chỉ khi bạn dựa vào các phương thức bổ sung (được bảo vệ) của lớp gốc trong các hành động được ghi đè của bạn. Tất cả các hành động bị thiếu trong bộ điều khiển của bạn sẽ được xử lý bởi bộ điều khiển gốc. Lưu ý rằng về mặt kỹ thuật, bạn không viết lại bộ điều khiển mà thêm nó vào danh sách các trình xử lý cho một tên trước
Fabian Schmengler

Hoàn toàn đồng ý, chúng tôi thực sự định tuyến lại nó nhưng nên mở rộng mã gốc để kế thừa bất kỳ mã hiện có nào
phanvugiap

-1

Tôi viết lại bộ điều khiển danh sách mong muốn doanh nghiệp.

trong tôi 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>

Và trong IndexControllerdòng Thêm bên dưới của tôi :

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

//before

class Namespace_Modulename_IndexController extends Enterprise_Wishlist_IndexController{}

Bạn cũng có thể viết lại trình trợ giúp như thế này: /magento//a/91474/33509

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.