고객 계정 대시 보드 링크를 제거하는 방법


39

고객 계정 대시 보드 왼쪽 패널에서 다음 링크를 제거하고 싶습니까?

  • 내 응용 프로그램
  • 선물 등록
  • 보상 점수
  • 기프트 카드 링크

Magento 1.7 Community Edition에서 일하고 있습니다. 도움을 주시면 감사하겠습니다.


이 무료 및 쉬운 '플러그 앤 플레이'확장명을 사용할 수도 있습니다. magentocommerce.com/magento-connect/…
Gerard de Visser

마 젠토 (Magento), 그렇게 쉬운 것처럼 보이는 것이 불필요하게 어려운 것으로 바뀐다.
Joshua34

답변:


52

1 단계 : (yourPackage / YourTemplate / customer / account / 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을 사용하여 무언가를 고칠 수 있다면 이와 같은 하드 코딩 된 솔루션을 사용하는 것이 좋습니다. @Marius 그의 대답은 훨씬 더 깨끗합니다.
Sander Mangel

1
@SanderMangel, 무슨 말이야 If you can't??
Pratik

2
아니, 그는 "나는 조언을 것이다 의미 에 대해 "
파비안 Schmengler

이 답변으로 제거하려는 시스템의 기본 기능에 액세스 할 수 있습니다. 면책 조항을 답변에 추가해야합니다. 올바른 경로를 방문하거나 curl을 사용하면 완벽한 액세스가 가능합니다.
Luke A. Leber 2016 년

아니, 그는 '나는 것 의미 에 대해 조언 '
Xenocide8998

28

여기에 두 가지 옵션이 있습니다.

가장 쉽고 쉬운 방법 :이 메뉴 항목을 추가하고 해당 코드를 주석으로 처리하는 레이아웃 파일을 찾으십시오.
예를 들어이 XML 조각을 통해 My applications추가 app/design/frontend/{interface}/{theme}/layout/oauth.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>제거하려는 각 링크마다 하나의 태그 를 추가해야합니다 .

세 번째 옵션도 있습니다. 모듈을 전혀 사용하지 않는 경우 비활성화하십시오. 이것은 또한 성능을 향상시킬 수 있습니다.
이를 위해 다음 app/etc/modules/Zzzz.xml내용 으로이 파일을 작성하십시오 .

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

사용하지 않으려는 모듈에 따라 사용하려는 다른 모듈이 있습니다.


답변에 @Marius에게 감사드립니다. 글쎄, 나는 질문을하기 전에 제안한 두 번째 옵션 (removeLinkByUrl)을 시도했습니다. 그러나 그것은 나를 위해 작동하지 않은 것 같습니다.
오샨

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>

local.xml 재정의에서 PHP 로의 몇 가지 기술로 혼란 스러워서이 오픈 소스 솔루션이 가장 좋아합니다.
Michael Thompson

5

내가 찾은 가장 간단한 솔루션 (구현 및 사용)을 대체하는 것입니다 Mage_Customer_Block_Account_Navigation에서 app/code/locala와 추가 removeLinkByName것과 같은 수행 방법, Oshan의 대답은 하지 않습니다,하지만 레이아웃 파일에서 사용할 수 있습니다. 보다 전통적인 클래스 재 작성도 작동하지만 플러그인과 충돌을 일으킬 수 있습니다.

경고! 테스트되지 않았습니다!

더 복잡한 해결책은 Block확장 Mage_Customer_Block_Account_Navigation하고 removeLinkByName메소드를 포함하는 자체 모듈을 작성 하는 것입니다. 이 기능을 사용하려면 customer_account_navigation블록 을 제거 / 설정 해제하고 새 모듈 의 블록으로 교체해야합니다. 그때부터 언제든지 customer_account_navigation레이아웃에서 참조되며을 사용하여 인스턴스를 얻습니다 removeLinkByName.


나는 두 번째 옵션을 수행했습니다. 그것은 상당한 양의 작업이지만 작동합니다. 2 시간 정도 걸렸고 전임 Magento 컨설턴트 및 PHP / Linux 개발자로 일하고 있습니다. 누구든지 세부 정보가 필요하면 PM.
siliconrockstar

가장 간단한 솔루션은 많은 깔끔한 솔루션이있을 때 Core 클래스를 재정의하는 것입니까?
Ria Weyprecht

5

결제 계약, 되풀이 프로필, 내 응용 프로그램 및 내 다운로드 가능한 제품을 포함하여 내 주문 아래의 모든 내 계정 목록 항목을 제거하는 빠른 솔루션입니다. 또한 Magento 1.9에서 테스트 한 사이트 전체에서 내 위시리스트 및 내 뉴스 레터 링크를 제거합니다.

app / design / frontend / default / YOURTHEME / layout / wishlist.xml에서 31-66 행을 주석 처리하십시오 (없는 경우 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-->

app / design / frontend / default / YOURTHEME / layout / newsletter.xml에서 47-65 행을 주석 처리하십시오 (없는 경우 app / design / frontend / rwd / default / layout / 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

링크를 제거하지 않으려면 $ _index 변수를 기반으로 ID 값을 할당하는 것이 좋으므로 CSS를 통해 링크를 숨길 수 있습니다.

내가 한 일은 다음과 같습니다.

yourPackage / YourTemplate / customer / account / 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 2016 년

그것은 충분히 공평하며 나는 당신이 어디에서 왔는지 완전히 이해합니다. 이 기능을 엄격하게 제거하고 싶지는 않았지만 클라이언트가 고객과 혼동 될 수 있다고 생각했기 때문에 숨기고 싶었습니다. 각자 자신의 것 같아요!
토마스 하딩

5

더 나은 해결책은 블록을 다시 작성하는 것이라고 생각했습니다. 이것은 위에서 언급되었지만 예는 없습니다.

전역 섹션에서 config.xml에 다시 쓰기를 추가하십시오.

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

Mage_Customer_Block_Account_Navigation에서 addLink를 대체하십시오.

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

제외 된 링크 를 하드 코딩 하지 않으려면 exclude_links 배열을 구성 설정에서 가져올 수 있습니다.


3

이것은 내가 이것에 대해 google 한 것입니다 : http://magebase.com/magento-tutorials/5-useful-tricks-for-your-magento-local-xml/

표준 Magento 레이아웃의 거의 모든 레이아웃 측면을 변경할 수 있지만이 방법이 실패하는 경우가 있습니다. 특히, 이것은 top.links 블록을 수정하려는 순간에 나타납니다. 이 블록의 항목은 addLink 작업 방법을 사용하여 추가되므로 기본 집합에서 일부 링크를 제거하는 방법이 궁금하다면 대답 할 수 없습니다! 불행히도 page / 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 상태 코드를 조건부로 반환하는 경로를 사용합니다. 관찰 할 경로를 찾으려면 관련 컨트롤러 파일을 열고 더 이상 사용할 수없는 각 프런트 엔드 작업을 찾으십시오. 다음으로, 해당 기능을 소프트 비활성화하기위한 시스템 구성 필드를 정의하는 모듈을 만듭니다. 이러한 시스템 구성 필드를 사용하여 프런트 엔드 레이아웃 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>

마 젠토 1.7.0.2에서 테스트


Magento 1.8.1.0에서는 경고 : Mage_Customer_Block_Account_Navigation :: addLink ()에 대한 인수 2가 누락되었습니다.
Anthony
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.