Cara Menghapus Tautan Dasbor Akun Pelanggan

39

Saya ingin menghapus tautan berikut di panel kiri dasbor akun pelanggan?

  • aplikasi saya
  • Daftar Hadiah
  • Poin Hadiah
  • Tautan Kartu Hadiah

Saya bekerja di Magento 1.7 Community Edition. Bantuan apa pun akan dihargai.

Oshan
sumber
Anda juga dapat menggunakan ekstensi 'plug and play' gratis dan mudah ini: magentocommerce.com/magento-connect/…
Gerard de Visser
Magento, di mana sesuatu yang tampaknya mudah berubah menjadi sesuatu yang sangat sulit.
Joshua34

Jawaban:

52

Langkah 1: Buka (yourPackage / YourTemplate / customer / akun / navigation.phtml)

Langkah 2: Ganti baris di bawah ini

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

Cuplikan kode di atas berisi cara untuk menghapus semua tautan navigasi. Semoga ini bisa membantu semua.

Referensi Tautan: https://github.com/Aproducktion/Magento-Remove-Dashboard-Links

Oshan
sumber
5
Jika Anda dapat memperbaiki sesuatu menggunakan tata letak XML saya sarankan menggunakan solusi hardcoded seperti ini. @Marius jawabannya jauh lebih bersih.
Sander Mangel
1
@SanderMangel, maksudmu If you can't??
Pratik
2
Tidak, yang dia maksudkan adalah "Saya akan menyarankan terhadap "
Fabian Schmengler
Jawaban ini tidak mencegah akses ke fungsionalitas mendasar dari sistem yang dicoba untuk dihapus - penafian harus ditambahkan ke jawabannya. Mengunjungi rute yang benar atau menggunakan ikal akan memungkinkan akses penuh tanpa batas.
Luke A. Leber
Tidak, maksudnya 'Saya akan menyarankan agar '
Xenocide8998
28

Saya melihat 2 opsi di sini.

Pertama dan termudah: Cukup temukan file tata letak yang menambahkan item menu ini dan beri komentar kode untuknya.
Misalnya My applicationsditambahkan app/design/frontend/{interface}/{theme}/layout/oauth.xmlmelalui suatu bagian 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>

Metode kedua, bahwa saya tidak 100% yakin itu akan berhasil adalah menambahkan xml ini di dalam local.xmlfile layout tema Anda:

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

Anda perlu menambahkan satu <action>tag untuk setiap tautan yang ingin Anda hapus.

Ada juga opsi ke-3, jika Anda tidak menggunakan modul sama sekali, cukup nonaktifkan mereka. Ini juga dapat meningkatkan kinerja.
Untuk ini buat file ini: app/etc/modules/Zzzz.xmldengan konten ini:

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

Anda mungkin memiliki beberapa masalah di sini adalah beberapa modul lain yang ingin Anda gunakan, tergantung pada modul yang ingin Anda nonaktifkan.

Marius
sumber
Terima kasih @Marius untuk jawabannya. Yah saya mencoba opsi kedua (removeLinkByUrl) yang Anda sarankan sebelum mengajukan pertanyaan. Tapi sepertinya itu tidak berhasil untukku.
Oshan
4
Opsi kedua tidak dapat bekerja karena Mage_Customer_Block_Account_Navigationtidak diwarisi dari Mage_Page_Block_Template_Links.
mpw
26

Ada ekstensi FOSS yang menambahkan opsi backend ke tautan akun jarak jauh.

Ada modul kedua (juga FOSS) yang menambahkan removeLinkmetode sehingga Anda dapat menggunakan yang berikut dilocal.xml

Penafian: Saya adalah pengembang ekstensi kedua.

<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>
Alex
sumber
Setelah dipusingkan dengan beberapa teknik dari penggantian local.xml ke PHP, solusi open-source ini adalah favorit saya.
Michael Thompson
5

Solusi yang paling sederhana (pelaksanaan dan penggunaan) saya telah menemukan adalah untuk menggantikan Mage_Customer_Block_Account_Navigationdi app/code/localdan menambahkan removeLinkByNamemetode, yang tidak sama dengan apa jawaban Oshan ini tidak, tetapi dapat digunakan dari file layout. Penulisan ulang kelas yang lebih tradisional juga akan berfungsi, tetapi berpotensi menyebabkan konflik dengan plugin.

Peringatan! Belum dicoba!

Solusi yang lebih rumit adalah dengan menulis modul Anda sendiri dengan Blockyang meluas Mage_Customer_Block_Account_Navigationdan mencakup removeLinkByNamemetode. Agar ini berfungsi, Anda harus menghapus / membatalkan set customer_account_navigationblok dan menggantinya dengan yang untuk modul baru Anda. Sejak saat itu, setiap kali customer_account_navigationdireferensikan dalam tata letak, Anda akan mendapatkan instance dengan removeLinkByName.

mpw
sumber
Saya melakukan pilihan kedua, ini adalah jumlah pekerjaan yang wajar, tetapi berhasil. Butuh waktu sekitar dua jam dan saya bekerja sebagai konsultan Magento penuh waktu dan pengembang PHP / Linux. Jika ada yang membutuhkan detail, PM saya.
siliconrockstar
solusi paling sederhana untuk mengganti kelas Core ketika ada banyak solusi yang lebih rapi?
Ria Weyprecht
5

Solusi cepat, untuk menghapus semua item daftar Akun Saya di bawah Pesanan Saya, termasuk Perjanjian Penagihan, Profil Berulang, Aplikasi Saya dan Produk Saya Yang Dapat Diunduh. Juga akan menghapus tautan Wishlist saya & Newsletter Saya, di seluruh situs, diuji di Magento 1.9:

Mengomentari baris 31 - 66 dari aplikasi / desain / frontend / default / YOURTHEME / layout / wishlist.xml (jika tidak ada, salin dari aplikasi / desain / 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-->

Mengomentari baris 47 - 65 dari aplikasi / desain / frontend / default / YOURTHEME / layout / newsletter.xml (jika tidak ada, salinlah dari app / desain / frontend / rwd / default / layout / newsletter.xml)

buletin </name> buletin / kelola / </path> Berlangganan Newsletter </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 (sesuaikan sesuai kebutuhan Anda)

.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;
}
Yosua34
sumber
5

Untuk menghindari menghapus tautan, saya akan merekomendasikan menetapkan nilai ID berdasarkan variabel $ _index, sehingga Anda dapat menyembunyikan tautan melalui CSS.

Inilah yang saya lakukan:

Dari YourPackage / YourTemplate / customer / akun / 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; ?>

Jadi jelas Anda bisa pergi

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

Tidak ada cara untuk menguliti kucing, tetapi ini adalah pilihan yang cepat dan mudah tanpa benar-benar mengorbankan fungsionalitas apa pun.

Thomas Harding
sumber
1
Harus secara eksplisit mencatat bahwa ini tidak akan menghentikan pengguna dari mengakses fungsionalitas di balik fitur yang dimaksud. Akses penuh dapat dilakukan dengan mengedit CSS atau mengedit bilah alamat cepat ... jadi jangan mengandalkan orang yang tidak menggunakan fitur.
Luke A. Leber
Itu cukup adil dan saya benar-benar mengerti dari mana Anda berasal. Saya tidak benar-benar ingin menghapus fungsi ini, tetapi saya ingin menyembunyikannya karena klien secara khusus merasa ini mungkin membingungkan pelanggan mereka. Saya rasa masing-masing untuk mereka sendiri!
Thomas Harding
5

Saya pikir solusi yang lebih baik adalah dengan menulis ulang blok. Ini disebutkan di atas tetapi tidak ada contoh:

Tambahkan penulisan ulang ke config.xml Anda di bagian global:

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

Abaikan addLink di 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);
        }
    }
}

Array exclude_links dapat menarik dari pengaturan konfigurasi jika Anda tidak ingin membuat kode tautan yang dikecualikan.

N Lewis
sumber
3

inilah yang saya cari di Google tentang ini: http://magebase.com/magento-tutorials/5-useful-tricks-for-your-magento-local-xml/

Kami dapat mengubah hampir semua aspek tata letak dari tata letak Magento standar namun ada beberapa situasi ketika pendekatan ini gagal. Khususnya, ini memanifestasikan dirinya sendiri saat Anda ingin memodifikasi blok top.links. Item dalam blok ini ditambahkan menggunakan metode tindakan addLink jadi jika Anda bertanya-tanya bagaimana cara menghapus beberapa tautan dari set default, jawabannya adalah, Anda tidak bisa! Sayangnya, kelas blok halaman / template_links tidak menerapkan metode tindakan 'removeLink' sehingga resor ini akan menghapus seluruh blok menggunakan pendekatan unsetChild dan menambahkan blok tautan kembali dengan tautan kami sendiri ditambahkan ke dalamnya di local.xml.

melaxon
sumber
2

Pertama-tama saya ingin Anda memberi tahu bahwa ada berbagai cara untuk menyelesaikan masalah Anda.

  1. Ini adalah cara termudah yang menemukan kode dalam layout.xmlfile di dalam basis yang ingin Anda hapus misalnya: jika saya ingin menghapus "Tag saya" maka komentar saja bagiannya.

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

    Tapi Anda tahu bahwa kita tidak boleh memodifikasi file base, jadi metode sederhana berikutnya yang bisa dilakukan adalah

  2. Menghapus tautan di navigation.phtmlfile template Anda. Untuk itu salin file Anda ke tema Anda (Catatan: struktur folder harus sama) dari menu base\default\template\customer\account\navigation.phtml. yang ditunjukkan pada jawaban di atas.

  3. Tugas menjemukan lainnya adalah menulis ulang modul inti Anda dan membuat metode "RemoveLinkByName".

aton1004
sumber
2

Solusi lengkap untuk menghapus fitur dasbor akun mencakup modifikasi sisi klien dan sisi server. Jika hanya sisi klien yang dihapus dan / atau disembunyikan, maka tidak ada yang menghentikan pengguna yang mengerti teknologi untuk tetap mengakses fitur-fitur dengan membuat sendiri rute di browser mereka atau dengan menggunakan serangan "CURL" CURL yang lebih canggih (yang dapat mencakup Token CSRF dan lolos langsung).

Sisi klien mudah dicapai melalui pembaruan XML seperti yang ditunjukkan oleh sejumlah besar jawaban yang sudah diberikan.

Sisi server sedikit lebih kompleks dan membutuhkan pemahaman tentang fungsionalitas yang sedang dihapus.

Secara pribadi, saya akan menempuh rute menggunakan pengamat untuk mengembalikan kode status HTTP terlarang secara bersyarat pada setiap rute fitur yang dihapus. Untuk mengetahui rute mana yang harus diamati, buka file controller terkait dan temukan masing-masing tindakan front-end yang seharusnya tidak lagi tersedia. Selanjutnya, buat modul yang mendefinisikan bidang konfigurasi sistem untuk menonaktifkan fitur tersebut. Dengan menggunakan bidang konfigurasi sistem ini, perbarui XML tata letak ujung depan dengan persyaratan dan kembalikan juga kode respons HTTP yang sesuai untuk setiap rute yang diamati.

Contoh kode untuk setiap langkah di atas dapat ditemukan melalui mesin pencari favorit Anda.

Luke A. Leber
sumber
1

Tambahkan ke file local.xml kode ini

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

Diuji dalam Magento 1.7.0.2

lavb
sumber
Di Magento 1.8.1.0 hasil ini dalam Peringatan: Hilang argumen 2 untuk Mage_Customer_Block_Account_Navigation :: addLink ()
Anthony