2011-01-16 18 views
5

Tôi muốn tạo liên kết trên trang Tài khoản của tôi chỉ nhận được hiển thị trong các điều kiện nhất định.Thêm liên kết đến Trang Tài khoản của tôi Magento's Conditionally

Ngay bây giờ tôi có màn hình hiển thị liên kết tất cả các thời gian bằng cách thêm các mục sau đây vào tập tin XML layout của tôi:

<customer_account> 
    <reference name="customer_account_navigation"> 
     <action method="addLink" translate="label" module="nie"><name>nie</name><path>nie</path><label>NIE Admin</label></action> 
    </reference> 
</customer_account> 

Tôi giả sử có một cách để mã này để nó chỉ hiển thị trong điều kiện nhất định .

Trả lời

7

Giỏ hàng & liên kết thanh toán đã thực hiện điều gì đó tương tự sao cho phương pháp của họ có thể được sao chép.

  1. Tạo một khối. Nó sẽ không được hiển thị trực tiếp để có thể xuất phát từ nhàm chán Mage_Core_Block_Abstract.
  2. Cung cấp cho nó phương thức mà logic điều kiện sẽ đi.

    public function addNieLink() 
    { 
        if (($parentBlock = $this->getParentBlock()) && (CONDITION-GOES-HERE)) { 
         $parentBlock->addLink($this->_('NIE Admin'), 'nie', $this->_('NIE Admin'), true, array(), 50, null, 'class="top-link-cart"'); 
         // see Mage_Page_Block_Template_Links::addLink() 
        } 
    } 
    
    protected function _prepareLayout() 
    { 
        // Add the special link automatically 
        $this->addNieLink(); 
        return parent::_prepareLayout(); 
    } 
    

    Đặt séc của bạn thay cho CONDITION-GOES-HERE.

  3. Thêm khối của bạn vào khối liên kết.

    <customer_account> 
        <reference name="customer_account_navigation"> 
         <block type="yourmodule/link" name="yourmodule.link" /> 
        </reference> 
    </customer_account> 
    

    (Đúng kiểu khối đây để khối liên kết mới tạo của bạn)

Các bit quan trọng là nó gọi getParentBlock() để tìm hiểu nơi liên kết là để đi.

+0

Giải pháp của bạn gần như đã hiệu quả. Nó thách thức dẫn tôi đi đúng hướng. Tôi đã có khối mở rộng Mage_Core_Block_Template thay vì Tóm tắt. Trong khối tôi không cần hàm _prepareLayout(). Tôi cũng phải thay đổi parentBlock-> addLink thành: $ parentBlock-> addLink ("NIE Admin", 'nie/index', "NIE Admin", true, array(), 50, null); Dù bằng cách nào thì các giải pháp của bạn đã giúp tôi vô cùng. Cảm ơn nhiều! –

Các vấn đề liên quan