Cách xóa liên kết bảng điều khiển tài khoản khách hàng


39

Tôi muốn xóa các liên kết sau trong bảng điều khiển tài khoản khách hàng bên trái?

  • Đơn ứng tuyển của tôi
  • Sổ đăng ký quà tặng
  • Điểm thưởng
  • Liên kết thẻ quà tặng

Tôi đang làm việc trong Magento 1.7 Community Edition. Bất kỳ trợ giúp sẽ được đánh giá cao.


Bạn cũng có thể sử dụng tiện ích mở rộng 'plug and play' miễn phí và dễ dàng này: magentoc Commerce.com/magento-connect/ mẹo
Gerard de Visser

Magento, nơi một thứ dường như quá dễ dàng biến thành thứ gì đó quá khó khăn không cần thiết.
Joshua34

Câu trả lời:


52

Bước 1: Chuyển đến (yourPackage / YourTemplate / khách hàng / tài khoản / navigation.phtml)

Bước 2: Thay thế dòng dưới đây

<?php $count = count($links); ?>
        **With**
<?php $_count = count($_links); /* Add or Remove Account Left Navigation Links Here -*/
      unset($_links['account']); /* Account Info */     
      unset($_links['account_edit']); /* Account Info */            
      unset($_links['tags']); /* My Tags */
      unset($_links['invitations']); /* My Invitations */
      unset($_links['reviews']);  /* Reviews */
      unset($_links['wishlist']); /* Wishlist */
      unset($_links['newsletter']); /* Newsletter */
      unset($_links['orders']); /* My Orders */
      unset($_links['address_book']); /* Address */
      unset($_links['enterprise_customerbalance']); /* Store Credit */
      unset($_links['OAuth Customer Tokens']); /* My Applications */
      unset($_links['enterprise_reward']); /* Reward Points */
      unset($_links['giftregistry']); /* Gift Registry */
      unset($_links['downloadable_products']); /* My Downloadable Products */
      unset($_links['recurring_profiles']); /* Recurring Profiles */
      unset($_links['billing_agreements']); /* Billing Agreements */
      unset($_links['enterprise_giftcardaccount']); /* Gift Card Link */
?>

Đoạn mã trên có cách loại bỏ tất cả các liên kết điều hướng. Hy vọng điều này sẽ giúp tất cả.

Liên kết tham khảo: https://github.com/Aproducktion/Magento-Remove-Dashboard-Links


5
Nếu bạn có thể sửa một cái gì đó bằng cách sử dụng XML của bố cục, tôi sẽ khuyên bạn nên sử dụng giải pháp mã hóa cứng như thế này. @Marius câu trả lời của anh ấy sạch sẽ hơn rất nhiều.
Sander Mangel

1
@SanderMeach, ý bạn là sao If you can't??
Pratik

2
Không, anh ta có nghĩa là "Tôi sẽ khuyên chống lại "
Fabian Schmengler 16/07/2015

Câu trả lời này không ngăn chặn quyền truy cập vào chức năng cơ bản của các hệ thống mà nó cố gắng loại bỏ - từ chối trách nhiệm nên được thêm vào câu trả lời. Tham quan các tuyến đường chính xác hoặc sử dụng curl sẽ cho phép truy cập đầy đủ không bị cản trở.
Luke A. Leber

Không, anh ta có nghĩa là 'Tôi sẽ khuyên chống lại '
Xenocide8998

28

Tôi thấy 2 lựa chọn ở đây.

Đầu tiên và dễ nhất: Chỉ cần tìm các tệp bố cục thêm các mục menu này và nhận xét mã cho chúng.
Ví dụ My applicationsđược thêm vào app/design/frontend/{interface}/{theme}/layout/oauth.xmlthông qua phần này của XML

<customer_account>
    <reference name="customer_account_navigation">
        <action method="addLink" translate="label" module="oauth">
            <name>OAuth Customer Tokens</name>
            <path>oauth/customer_token</path>
            <label>My Applications</label>
        </action>
    </reference>
</customer_account>

Phương pháp thứ hai, tôi không chắc chắn 100% nó sẽ hoạt động là thêm xml này vào local.xmltệp bố cục của chủ đề của bạn:

<customer_account>
    <reference name="customer_account_navigation">
        <action method="removeLinkByUrl"><url>oauth/customer_token</url></action>
    </reference>
</customer_account>

Bạn cần thêm một <action>thẻ cho mỗi liên kết bạn muốn xóa.

Ngoài ra còn có tùy chọn thứ 3, nếu bạn hoàn toàn không sử dụng các mô-đun, chỉ cần vô hiệu hóa chúng. Điều này cũng có thể tăng hiệu suất.
Đối với điều này tạo tập tin này: app/etc/modules/Zzzz.xmlvới nội dung này:

<config>
    <modules>
        <Mage_Oauth>
             <active>false</active>
        </Mage_Oauth>
    </modules>
</config>

Bạn có thể gặp một số rắc rối ở đây là một số mô-đun khác mà bạn muốn sử dụng, tùy thuộc vào các mô-đun bạn muốn tắt.


Cảm ơn @Marius đã trả lời. Vâng, tôi đã thử tùy chọn thứ hai (removeLinkByUrl) mà bạn đề xuất trước khi đưa ra câu hỏi. Nhưng dường như nó không làm việc cho tôi.
O Sơn

4
Tùy chọn thứ hai không thể hoạt động vì Mage_Customer_Block_Account_Navigationkhông kế thừa từ Mage_Page_Block_Template_Links.
mpw

26

Có một tiện ích mở rộng FOSS bổ sung tùy chọn phụ trợ cho các liên kết tài khoản từ xa.

Có một mô-đun thứ hai (cũng là FOSS) bổ sung removeLinkphương thức để bạn có thể sử dụng cách sau tronglocal.xml

Tuyên bố miễn trừ trách nhiệm: Tôi là nhà phát triển của tiện ích mở rộng thứ hai.

<customer_account>
        <reference name="customer_account_navigation">
            <action method="removeLink"><name>OAuth Customer Tokens</name></action>
            <action method="removeLink"><name>billing_agreements</name></action>
            <action method="removeLink"><name>recurring_profiles</name></action>
        </reference>
 </customer_account>

Đã loay hoay với một số kỹ thuật từ local.xml ghi đè lên PHP, các giải pháp nguồn mở này là sở thích của tôi.
Michael Thompson

5

Giải pháp đơn giản nhất (thực hiện và sử dụng) Tôi đã tìm thấy là để thay thế Mage_Customer_Block_Account_Navigationtrong app/code/localvà thêm một removeLinkByNamephương pháp, mà không giống như những gì câu trả lời Oshan của có, nhưng là có thể sử dụng từ các tập tin bố trí. Một lớp viết lại truyền thống hơn cũng sẽ hoạt động, nhưng có khả năng gây ra xung đột với một plugin.

Cảnh báo! Chưa được kiểm chứng!

Một giải pháp phức tạp hơn sẽ là viết mô-đun của riêng bạn với phần Blockmở rộng Mage_Customer_Block_Account_Navigationvà bao gồm một removeLinkByNamephương thức. Để làm việc này, bạn sẽ phải xóa / bỏ đặt customer_account_navigationkhối và thay thế nó bằng khối cho mô-đun mới của bạn. Từ đó trở đi, bất cứ lúc nào customer_account_navigationđược tham chiếu trong bố cục, bạn sẽ có một ví dụ removeLinkByName.


Tôi đã làm tùy chọn thứ hai, đó là một lượng công việc khá lớn, nhưng nó hoạt động. Mất khoảng hai giờ và tôi làm việc như một nhà tư vấn Magento toàn thời gian và nhà phát triển PHP / Linux. Nếu ai cần chi tiết, PM cho tôi.
siliconrockstar

giải pháp đơn giản nhất để ghi đè lớp Core khi có nhiều giải pháp gọn gàng hơn?
Rịa Weyprecht

5

Một giải pháp nhanh chóng, để xóa tất cả các mục trong danh sách Tài khoản của tôi bên dưới Đơn hàng của tôi, bao gồm Thỏa thuận thanh toán, Hồ sơ định kỳ, Ứng dụng của tôi và Sản phẩm có thể tải xuống của tôi. Cũng sẽ xóa các liên kết My Wishlist & My Newsletter, trên trang web, được thử nghiệm trên Magento 1.9:

Nhận xét các dòng 31 - 66 từ app / design / frontend / default / YOUTHEME / layout / wishlist.xml (nếu không có bản sao từ app / design / frontend / rwd / default / layout / wishlist.xml)

<!--default>
    <reference name="top.links">
        <block type="wishlist/links" name="wishlist_link" />
        <action method="addLinkBlock"><blockName>wishlist_link</blockName></action>
    </reference>

    <!-- Mage_Wishlist -->
    <!--reference name="right">
        <block type="wishlist/customer_sidebar" name="wishlist_sidebar" as="wishlist" after="cart_sidebar" template="wishlist/sidebar.phtml" />
    </reference>
</default-->
<!--customer_account>
    <!-- Mage_Wishlist -->
    <!--reference name="customer_account_navigation">
        <action method="addLink" translate="label" module="wishlist" ifconfig="wishlist/general/active"><name>wishlist</name><path>wishlist/</path><label>My Wishlist</label></action>
    </reference-->
<!--/customer_account-->
<!--customer_account_index>
    <reference name="right">
        <action method="unsetChild"><name>wishlist</name></action>
    </reference>
</customer_account_index-->

Nhận xét các dòng 47 - 65 từ app / design / frontend / default / YOUTHEME / layout / newsletter.xml (nếu không có bản sao từ app / design / frontend / rwd / default / layout / newsletter.xml)

bản tin </ name> bản tin / quản lý / </ path> Đăng ký bản tin </ nhãn> </ hành động> </ tham khảo> </ customer_account ->

<!--newsletter_manage_index translate="label">
    <label>Customer My Account Newsletter Subscriptions</label>
    <update handle="customer_account"/>
    <reference name="my.account.wrapper">
        <block type="customer/newsletter" name="customer_newsletter">
            <block type="page/html_wrapper" name="customer.newsletter.form.before" as="form_before" translate="label">
                <label>Newsletter Subscription Form Before</label>
            </block>
        </block>
    </reference>
</newsletter_manage_index!-->

CSS (điều chỉnh theo yêu cầu của bạn)

.block-account .block-content ul li:nth-last-child(1),  .block-account .block-content ul li:nth-last-child(2),  .block-account .block-content ul li:nth-last-child(3),  .block-account .block-content ul li:nth-last-child(4) {
display: none;
}

.cart-table .cart-links > li:last-child {
display:none;
}

5

Để tránh xóa các liên kết, tôi khuyên bạn nên gán các giá trị ID dựa trên biến $ _index, để bạn có thể ẩn các liên kết qua CSS.

Đây là những gì tôi đã làm:

Từ gói của bạn / YourTemplate / khách hàng / tài khoản / navigation.phtml

        <?php foreach ($_links as $_link): ?>
            <?php $_last = ($_index++ >= $_count); ?>
            <?php if ($this->isActive($_link)): ?>
                <li class="current<?php echo ($_last ? ' last' : '') ?>" id="account-link-<?php echo $_index;?>"><strong><?php echo $_link->getLabel() ?></strong></li>
            <?php else: ?>
                <li<?php echo ($_last ? ' class="last"' : '') ?> id="account-link-<?php echo $_index;?>"><a href="<?php echo $_link->getUrl() ?>"><?php echo $_link->getLabel() ?></a></li>
            <?php endif; ?>
        <?php endforeach; ?>

Vì vậy, rõ ràng sau đó bạn có thể đi

        #account-link-1 {
            display:none;
        }

Không có cách nào để lột da một con mèo, nhưng đây là một lựa chọn nhanh chóng và dễ dàng mà không thực sự ảnh hưởng đến bất kỳ chức năng nào.


1
Cần lưu ý rõ ràng rằng điều này sẽ không ngăn người dùng truy cập các chức năng đằng sau các tính năng được đề cập. Toàn quyền truy cập là chỉnh sửa CSS hoặc thanh địa chỉ nhanh chỉnh sửa ... vì vậy đừng phụ thuộc vào những người không sử dụng các tính năng.
Luke A. Leber

Điều đó đủ công bằng và tôi hoàn toàn hiểu bạn đến từ đâu. Tôi hoàn toàn không muốn loại bỏ chức năng này, nhưng tôi muốn ẩn nó vì khách hàng đặc biệt cảm thấy điều này có thể gây nhầm lẫn cho khách hàng của họ. Tôi đoán mỗi người!
Thomas Harding

5

Tôi nghĩ rằng một giải pháp tốt hơn sẽ là viết lại khối. Điều này đã được đề cập ở trên nhưng không có ví dụ:

Thêm ghi lại vào tệp config.xml của bạn trong phần toàn cầu:

<blocks>
    <customer>
        <rewrite>
            <account_navigation>Your_Module_Block_Customer_Account_Navigation</account_navigation>
        </rewrite>
    </customer>
</blocks>

Ghi đè addLink trong Mage_Customer_Block_Account_Navulation:

class Your_Module_Block_Customer_Account_Navigation extends Mage_Customer_Block_Account_Navigation
{
    private $exclude_links = null;

    public function addLink($name, $path, $label, $urlParams=array())
    {
        if (!$this->exclude_links) {
            $this->exclude_links = array(
                'OAuth Customer Tokens', /* My Applications */
                'downloadable_products', /* My Downloadable Products */
                'recurring_profiles', /* Recurring Profiles */
                'billing_agreements' /* Billing Agreements */
            );
        }

        if (!in_array($name, $this->exclude_links)) {
            return parent::addLink($name, $path, $label, $urlParams);
        }
    }
}

Mảng Elim_links có thể lấy từ cài đặt cấu hình nếu bạn không muốn mã hóa các liên kết bị loại trừ.


3

đây là những gì tôi đã nói về điều này: http://magebase.com/magento-tutorials/5-usiously-tricks-for-your-magento-local-xml/

Chúng ta có thể thay đổi gần như tất cả các khía cạnh bố cục của bố cục Magento tiêu chuẩn tuy nhiên có một số tình huống khi phương pháp này thất bại. Đáng chú ý, điều này thể hiện ngay khi bạn muốn sửa đổi khối top.links. Các mục trong khối này được thêm bằng phương thức hành động addLink, vì vậy nếu bạn đang tự hỏi làm thế nào để xóa một số liên kết khỏi bộ mặc định, câu trả lời là, bạn không thể! Thật không may, lớp khối page / template_links không triển khai phương thức hành động 'removeLink', do đó, khu nghỉ mát phải xóa toàn bộ khối bằng cách sử dụng phương pháp unsetChild và thêm khối liên kết trở lại với các liên kết của chúng ta được thêm vào local.xml.


2

Trước tiên tôi muốn bạn nói rằng có nhiều cách khác nhau để giải quyết vấn đề của bạn.

  1. Đó là cách dễ nhất để tìm mã trong layout.xmltệp bên trong cơ sở mà bạn muốn xóa, ví dụ: nếu tôi muốn xóa "Thẻ của tôi" thì chỉ cần nhận xét phần.

    <customer_account>
        <!-- Mage_Tag -->
        <reference name="customer_account_navigation">
            <action method="addLink" translate="label" module="tag"><name>tags</name><path>tag/customer/</path><label>My Tags</label></action>
        </reference>
    </customer_account>

    Nhưng bạn biết rằng chúng ta không nên sửa đổi tệp cơ sở, vì vậy một phương pháp đơn giản tiếp theo khác có thể được thực hiện là

  2. Bỏ cài đặt liên kết trong tệp mẫu của bạn. Để sao chép navigation.phtmltệp của bạn vào chủ đề của bạn (Lưu ý: cấu trúc thư mục phải giống nhau) từ base\default\template\customer\account\navigation.phtml. được thể hiện trong câu trả lời ở trên.

  3. Một nhiệm vụ tẻ nhạt khác là viết lại mô-đun lõi của bạn và tạo một phương thức "RemoveLinkByName".


2

Một giải pháp đầy đủ để loại bỏ các tính năng bảng điều khiển tài khoản bao gồm cả sửa đổi phía máy khách và phía máy chủ. Nếu chỉ có phía máy khách bị xóa và / hoặc bị ẩn, thì không có gì ngăn người dùng am hiểu công nghệ vẫn truy cập các tính năng bằng cách tạo thủ công các tuyến đường trong trình duyệt của họ hoặc bằng cách sử dụng "tấn công" CURL tinh vi hơn (có thể bao gồm cả sự phù hợp Mã thông báo CSRF và trượt qua).

Phía khách hàng có thể dễ dàng đạt được thông qua các bản cập nhật XML như được chỉ ra bởi rất nhiều câu trả lời đã được đưa ra.

Phía máy chủ phức tạp hơn một chút và đòi hỏi sự hiểu biết về chức năng đang bị loại bỏ.

Cá nhân, tôi sẽ đi theo con đường sử dụng các trình quan sát để trả lại một cách có điều kiện các mã trạng thái HTTP bị cấm trên mỗi tuyến đường của tính năng bị xóa. Để tìm ra tuyến đường nào cần quan sát, hãy mở tệp trình điều khiển được liên kết và tìm từng hành động phía trước không còn khả dụng. Tiếp theo, tạo một mô-đun xác định các trường cấu hình hệ thống cho tính năng vô hiệu hóa mềm. Sử dụng các trường cấu hình hệ thống này, cập nhật có điều kiện XML bố cục lối vào và tương tự trả về các mã phản hồi HTTP phù hợp cho từng tuyến được quan sát.

Ví dụ mã cho từng bước trên có thể được tìm thấy thông qua công cụ tìm kiếm yêu thích của bạn.


1

Thêm vào tệp local.xml mã này

<customer_account>
    <reference name="customer_account_navigation">
           <action method="addLink"><name>tags</name></action>
           <action method="addLink"><name>recurring_profiles</name></action>
           <action method="addLink"><name>newsletter</name></action>
           <action method="addLink"><name>billing_agreements</name></action>
           <action method="addLink"><name>OAuth Customer Tokens</name></action>
           <action method="addLink"><name>downloadable_products</name></action>
   </reference>   
</customer_account>

Đã thử nghiệm trong Magento 1.7.0.2


Trong Magento 1.8.1.0, kết quả này trong Cảnh báo: Thiếu đối số 2 cho Mage_Customer_Block_Account_Navestion :: addLink ()
Anthony
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.