วิธีลบลิงค์แผงควบคุมบัญชีลูกค้า


39

ฉันต้องการลบลิงค์ต่อไปนี้ในแผงควบคุมบัญชีลูกค้าด้านซ้ายหรือไม่

  • แอปพลิเคชันของฉัน
  • ของขวัญรีจิสทรี
  • คะแนนสะสม
  • ลิงค์บัตรของขวัญ

ฉันทำงานใน Magento 1.7 Community Edition ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชม.


นอกจากนี้คุณยังสามารถใช้ส่วนขยาย 'plug and play' ฟรีและใช้งานง่าย: magentocommerce.com/magento-connect/ …
Gerard de Visser

วีโอไอพีที่บางสิ่งบางอย่างที่ดูเหมือนง่ายกลายเป็นสิ่งที่ยากเกินความจำเป็น
Joshua34

คำตอบ:


52

ขั้นตอนที่ 1:ไปที่ (yourPackage / YourTemplate / ลูกค้า / บัญชี / navigation.phtml)

ขั้นตอนที่ 2:แทนที่บรรทัดด้านล่าง

<?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 */
?>

ข้อมูลโค้ดด้านบนมีวิธีการลบลิงก์การนำทางทั้งหมด หวังว่าจะช่วยได้ทั้งหมด

ลิงค์อ้างอิง: https://github.com/Aproducktion/Magento-Remove-Dashboard-Links


5
หากคุณสามารถแก้ไขบางสิ่งบางอย่างโดยใช้ XML ของเค้าโครงฉันจะแนะนำให้ใช้โซลูชัน hardcoded เช่นนี้ @Marius คำตอบของเขาสะอาดขึ้นมาก
Sander Mangel

1
@SanderMangel คุณหมายถึงอะไรIf you can't??
Pratik

2
ไม่มีเขาหมายความว่า "ฉันจะให้คำแนะนำกับ "
เฟเบียน Schmengler

คำตอบนี้ไม่ได้ป้องกันการเข้าถึงฟังก์ชันการทำงานพื้นฐานของระบบที่พยายามลบ - ควรเพิ่มคำปฏิเสธไปยังคำตอบ การเยี่ยมชมเส้นทางที่ถูกต้องหรือการใช้ curl จะช่วยให้สามารถเข้าถึงได้อย่างเต็มรูปแบบ
Luke A. Leber

ไม่เขาหมายถึง 'ฉันอยากจะแนะนำ '
Xenocide8998

28

ฉันเห็น 2 ตัวเลือกที่นี่

สิ่งแรกและง่ายที่สุด: เพียงค้นหาไฟล์เลย์เอาต์ที่เพิ่มรายการเมนูเหล่านี้และใส่รหัสสำหรับพวกเขา
ตัวอย่างเช่นMy applicationsเพิ่มapp/design/frontend/{interface}/{theme}/layout/oauth.xmlผ่านชิ้นส่วนของ 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>

วิธีที่สองที่ฉันไม่แน่ใจ 100% ว่าจะใช้งานได้คือการเพิ่ม xml นี้ในlocal.xmlไฟล์เลย์เอาต์ของธีมของคุณ:

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

คุณต้องเพิ่มหนึ่ง<action>แท็กสำหรับแต่ละลิงก์ที่คุณต้องการลบ

นอกจากนี้ยังมีตัวเลือกที่ 3 หากคุณไม่ได้ใช้งานโมดูลเลยเพียงแค่ปิดการใช้งาน สิ่งนี้สามารถเพิ่มประสิทธิภาพได้
สำหรับสิ่งนี้สร้างไฟล์นี้: app/etc/modules/Zzzz.xmlด้วยเนื้อหานี้:

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

คุณอาจมีปัญหาบางอย่างที่นี่คือโมดูลอื่น ๆ ที่คุณต้องการใช้ขึ้นอยู่กับโมดูลที่คุณต้องการปิดการใช้งาน


ขอบคุณ @Marius สำหรับคำตอบ ฉันลองตัวเลือกที่สอง (removeLinkByUrl) ที่คุณแนะนำก่อนถามคำถาม แต่ดูเหมือนว่ามันจะไม่ได้ผลสำหรับฉัน
Oshan

4
ตัวเลือกที่สองไม่สามารถทำงานได้เนื่องจากไม่ได้รับมรดกจากMage_Customer_Block_Account_Navigation Mage_Page_Block_Template_Links
mpw

26

มีนามสกุล FOSSซึ่งเพิ่มตัวเลือกแบ็กเอนด์ไปยังลิงก์บัญชีระยะไกล

มีโมดูลที่สอง (เช่น FOSS) ซึ่งจะเพิ่มremoveLinkวิธีการเพื่อให้คุณสามารถใช้สิ่งต่อไปนี้ในของคุณlocal.xml

ข้อจำกัดความรับผิดชอบ: ฉันเป็นผู้พัฒนาส่วนขยายที่สอง

<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>

มี messed รอบด้วยเทคนิคต่าง ๆ จาก local.xml แทนที่ไปยัง PHP โซลูชั่นโอเพนซอร์สเหล่านี้เป็นที่ชื่นชอบ
Michael Thompson

5

ทางออกที่ง่ายที่สุด (การดำเนินงานและการใช้งาน) ที่ฉันได้พบคือการเปลี่ยนMage_Customer_Block_Account_Navigationในapp/code/localและเพิ่มremoveLinkByNameวิธีการซึ่งไม่เหมือนกันกับสิ่งที่คำตอบของ Oshanไม่ แต่สามารถใช้งานได้จากไฟล์รูปแบบ การเขียนคลาสแบบดั้งเดิมมากขึ้นก็สามารถใช้ได้เช่นกัน แต่อาจทำให้เกิดข้อขัดแย้งกับปลั๊กอินได้

คำเตือน! ยังไม่ทดลอง!

วิธีแก้ปัญหาที่ซับซ้อนมากขึ้นก็คือการเขียนโมดูลของคุณเองด้วยการBlockขยายMage_Customer_Block_Account_NavigationและรวมถึงremoveLinkByNameวิธีการ เพื่อให้สามารถใช้งานได้คุณจะต้องลบ / ปลดcustomer_account_navigationบล็อกและแทนที่ด้วยบล็อกสำหรับโมดูลใหม่ของคุณ จากนั้นในเวลาใด ๆ ที่ถูกอ้างถึงในรูปแบบที่คุณจะได้รับตัวอย่างด้วยcustomer_account_navigationremoveLinkByName


ฉันได้ตัวเลือกที่สองมันเป็นปริมาณงานที่พอใช้ แต่ก็ใช้งานได้ ใช้เวลาประมาณสองชั่วโมงและทำงานเป็นที่ปรึกษา Magento เต็มเวลาและผู้พัฒนา PHP / Linux หากใครต้องการรายละเอียด PM ฉัน
siliconrockstar

วิธีที่ง่ายที่สุดคือการแทนที่คลาส Core เมื่อมีโซลูชัน neater มากมาย?
Ria Weyprecht

5

วิธีแก้ปัญหาอย่างรวดเร็วเพื่อลบรายการในบัญชีของฉันทั้งหมดด้านล่างคำสั่งซื้อของฉันรวมถึงข้อตกลงการเรียกเก็บเงินโปรไฟล์ที่เกิดขึ้นประจำแอปพลิเคชันของฉันและผลิตภัณฑ์ที่ดาวน์โหลดได้ของฉัน จะลบลิงก์รายการสิ่งที่ฉันปรารถนาและจดหมายข่าวของฉันทั่วทั้งไซต์ทดสอบใน Magento 1.9:

แสดงความคิดเห็นบรรทัดที่ 31 - 66 จากแอพ / ออกแบบ / ส่วนหน้า / ค่าเริ่มต้น / YOURTHEME / เลย์เอาต์ / Favorites.xml (หากไม่มีให้คัดลอกจากแอพ / ออกแบบ / ส่วนหน้า / rwd / ค่าเริ่มต้น / โครงร่าง / Favorites.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-->

แสดงความคิดเห็นบรรทัดที่ 47 - 65 จากแอพ / ออกแบบ / ส่วนหน้า / ค่าเริ่มต้น / YOURTHEME / เลย์เอาต์ / newsletter.xml (หากไม่มีให้คัดลอกจากแอพ / ออกแบบ / ส่วนหน้า / rwd / ค่าเริ่มต้น / โครงร่าง / newsletter.xml)

จดหมายข่าว </name> จดหมายข่าว / จัดการ / </path> การสมัครรับจดหมายข่าว </label> </action> </reference> </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 (ปรับตามความต้องการของคุณ)

.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

เพื่อหลีกเลี่ยงการลบลิงก์ฉันขอแนะนำให้กำหนดค่า ID ตามตัวแปร $ _index ดังนั้นคุณสามารถซ่อนลิงก์ผ่าน CSS

นี่คือสิ่งที่ฉันทำ:

จาก yourPackage / YourTemplate / ลูกค้า / บัญชี / 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; ?>

เห็นได้ชัดว่าคุณสามารถไปได้

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

ไม่มีวิธีใดที่จะทำให้แมวเป็นแมว แต่นี่เป็นตัวเลือกที่ง่ายและรวดเร็วโดยไม่กระทบต่อการทำงานใด ๆ


1
ควรทราบไว้อย่างชัดเจนว่าการดำเนินการนี้จะไม่หยุดไม่ให้ผู้ใช้เข้าถึงฟังก์ชันการทำงานที่อยู่เบื้องหลังคุณลักษณะที่เป็นปัญหา การเข้าถึงแบบเต็มอาจเป็นการแก้ไข CSS หรือการแก้ไขแถบที่อยู่อย่างรวดเร็ว ... ดังนั้นอย่าพึ่งพาคนที่ไม่ได้ใช้คุณสมบัตินี้
Luke A. Leber

มันยุติธรรมพอและฉันก็เข้าใจว่าคุณมาจากไหน ฉันไม่ต้องการลบฟังก์ชั่นนี้อย่างเด็ดขาด แต่ฉันต้องการซ่อนเพราะลูกค้ารู้สึกว่านี่อาจทำให้ลูกค้าสับสน แต่ละอย่างของตัวเองฉันเดา!
โทมัสฮาร์ดิง

5

ฉันคิดว่าทางออกที่ดีกว่าคือการเขียนบล็อกใหม่ สิ่งนี้ถูกกล่าวถึงข้างต้น แต่ไม่มีตัวอย่าง:

เพิ่มการเขียนซ้ำลงใน config.xml ของคุณในส่วนส่วนกลาง:

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

แทนที่ addLink ใน Mage_Customer_Block_Account_Navigation:

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);
        }
    }
}

อาร์เรย์ excluse_links สามารถดึงมาจากการตั้งค่าหากคุณไม่ต้องการให้โค้ดที่ถูกแยกออกไปเชื่อมโยงอย่างหนัก


3

นี่คือสิ่งที่ฉัน googled เกี่ยวกับเรื่องนี้: http://magebase.com/magento-tutorials/5-useful-tricks-for-your-magento-local-xml/

เราสามารถเปลี่ยนเลย์เอาต์เกือบทั้งหมดของเลย์เอาต์ Magento มาตรฐานได้อย่างไรก็ตามมีบางสถานการณ์ที่วิธีการนี้ล้มเหลว โดยเฉพาะอย่างยิ่งสิ่งนี้แสดงให้เห็นถึงนาทีที่คุณต้องการแก้ไขบล็อก top.links รายการในบล็อกนี้จะถูกเพิ่มโดยใช้วิธีการกระทำของ addLink ดังนั้นหากคุณสงสัยว่าจะลบลิงค์บางส่วนออกจากชุดเริ่มต้นคำตอบคือคุณไม่สามารถ! ขออภัยคลาสบล็อกหน้า / template_links ไม่ได้ใช้วิธีการดำเนินการ 'removeLink' ดังนั้นทางรีสอร์ทจึงทำการลบทั้งบล็อกโดยใช้วิธี unsetChild และเพิ่มลิงค์บล็อกกลับด้วยลิงก์ของเราเองที่เพิ่มเข้าไปใน local.xml


2

ฉันต้องการให้คุณบอกก่อนว่ามีวิธีการที่แตกต่างกันในการแก้ปัญหาของคุณ

  1. มันเป็นวิธีที่ง่ายที่สุดที่จะค้นหารหัสใน layout.xmlไฟล์ด้านในฐานที่คุณต้องการลบเช่น: ถ้าฉันต้องการลบ "แท็กของฉัน" จากนั้นเพียงแค่แสดงความคิดเห็นในส่วน

    <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>

    แต่คุณรู้ว่าเราไม่ควรแก้ไขไฟล์พื้นฐานดังนั้นอีกวิธีการถัดไปที่สามารถทำได้คือ

  2. การยกเลิกการลิงก์ในไฟล์เทมเพลตสำหรับการคัดลอกnavigation.phtmlไฟล์ของคุณไปยังธีมของคุณ (หมายเหตุ: โครงสร้างโฟลเดอร์ควรเหมือนกัน) จากbase\default\template\customer\account\navigation.phtmlจาก ซึ่งแสดงในคำตอบข้างต้น

  3. งานที่น่าเบื่ออีกอย่างคือการเขียนโมดูลหลักของคุณใหม่และสร้างวิธีการ "RemoveLinkByName"


2

โซลูชันเต็มรูปแบบในการลบคุณลักษณะแผงควบคุมบัญชีรวมถึงการปรับเปลี่ยนฝั่งไคลเอ็นต์และฝั่งเซิร์ฟเวอร์ หากมีเพียงลูกค้าฝั่งที่ถูกลบและ / หรือซ่อนอยู่ก็ไม่มีอะไรที่จะหยุดผู้ใช้ที่มีความชำนาญด้านเทคโนโลยีจากยังคงเข้าถึงคุณลักษณะโดยการกำหนดเส้นทางในเบราว์เซอร์ของตนเองหรือโดยใช้ "การโจมตี" CURL ที่ซับซ้อนยิ่งขึ้น โทเค็น CSRF และสลิปผ่าน)

ฝั่งไคลเอ็นต์สามารถทำได้อย่างง่ายดายผ่านการอัปเดต XML ตามที่ระบุโดยคำตอบมากมายที่ให้ไว้แล้ว

ฝั่งเซิร์ฟเวอร์มีความซับซ้อนกว่าเล็กน้อยและต้องการความเข้าใจในการใช้งานที่ถูกลบออกไป

โดยส่วนตัวแล้วฉันจะไปที่เส้นทางของการใช้ผู้สังเกตการณ์เพื่อส่งคืนรหัสสถานะ HTTP ที่ต้องห้ามตามเงื่อนไขในแต่ละเส้นทางของคุณลักษณะที่จะถูกลบออก ในการค้นหาเส้นทางที่ต้องสังเกตุให้เปิดไฟล์คอนโทรลเลอร์ที่เกี่ยวข้องและค้นหาการกระทำส่วนหน้าแต่ละอันที่ไม่ควรใช้อีกต่อไป จากนั้นสร้างโมดูลที่กำหนดฟิลด์การกำหนดค่าระบบสำหรับคุณสมบัติที่กล่าวถึงการปิดใช้งาน soft การใช้ฟิลด์การกำหนดค่าระบบเหล่านี้อัพเดต XML โครงร่างของส่วนหน้าและส่งคืนรหัสตอบกลับ HTTP ที่เหมาะสมสำหรับแต่ละเส้นทางที่สังเกตเห็น

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


1

เพิ่มไปยังไฟล์ local.xml รหัสนี้

<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>

ทดสอบใน Magento 1.7.0.2


ใน Magento 1.8.1.0 ผลลัพธ์นี้ในการเตือน: ไม่มีการโต้แย้ง 2 สำหรับ Mage_Customer_Block_Account_Navigation :: addLink ()
Anthony
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.