Cách thực hành tốt nhất để chỉnh sửa các liên kết hàng đầu của Magento


22

Giả sử chúng tôi muốn thêm biểu tượng giỏ hàng ngay trước liên kết "Giỏ hàng của tôi" trên các liên kết hàng đầu của Magento (xem các liên kết hàng đầu bên dưới).

nhập mô tả hình ảnh ở đây

Cách tốt nhất để làm việc này là gì?

  1. Làm gì đó để toplinks.php?
  2. Làm gì đó để links.phtml?
  3. Một tập tin xml?
  4. Còn lựa chọn nào khác không?

Tôi hiểu rằng điều này có thể được thực hiện bằng CSS, nhưng khi nhu cầu tùy biến của tôi tăng lên, tôi muốn biết làm thế nào điều này có thể được thực hiện mà không cần CSS để tôi có thể tùy chỉnh những điều khó khăn hơn.

Câu trả lời:


12

Trong mọi trường hợp không chỉnh sửa tệp mẫu ( links.phtml). Điều này phục vụ như một khuôn mẫu chung cho tất cả các danh sách liên kết. Ví dụ, nó cũng được sử dụng cho các liên kết ở chân trang.
Với toplinks.phpbạn có thể làm bất cứ điều gì bạn muốn vì không được chấp nhận kể từ CE v1.4.0.1.
Tôi khuyên bạn nên sử dụng các tệp xml thêm các liên kết vào vùng chứa trên cùng để đạt được những gì bạn cần.
Các addLinkphương pháp đó được gọi khi thêm một liên kết mới hỗ trợ một số thông số cho phép bạn thêm các lớp và các thuộc tính khác trên liathẻ trong các liên kết và một số văn bản trước khi liên kết và sau khi liên kết.

public function addLink($label, $url='', $title='', $prepare=false, $urlParams=array(),
        $position=null, $liParams=null, $aParams=null, $beforeText='', $afterText='')
    { ... }

Nếu bạn muốn thêm một biểu tượng vào menu tài khoản của tôi bạn có thể đặt $beforeTextđể <span class="icon"></span>và thêm một số phong cách trên lớp biểu tượng.
Đối với các liên kết giỏ hàng và thanh toán, nó phức tạp hơn một chút vì chúng được thêm vào thông qua một đối tượng khối không trực tiếp từ tệp bố cục.
Nếu bạn cần một cái gì đó khác biệt cho giỏ hàng hoặc thanh toán, tất cả những gì bạn phải làm là ghi đè lên các phương thức Mage_Checkout_Block_Links::addCartLink()hoặc Mage_Checkout_Block_Links::addCheckoutLink(). 2 cuộc gọi này giống nhau addLink()và bạn có thể truyền các tham số khác nhau cho nó.


1
Đây chính xác là loại giải thích tôi đang tìm kiếm. Tôi chắc chắn có rất nhiều học hỏi trước mặt, nhưng bây giờ tôi có một ý tưởng về nơi bắt đầu. Tôi sẽ cố gắng thêm biểu tượng của mình (từ bootstrap) với văn bản sau $ beforeText = '<i class = "icon-shopping-cart"> </ i>' - Cảm ơn bạn!
Raphael Rafatpanah

Tôi sẽ sử dụng tệp XML nào cho việc này?
Raphael Rafatpanah

Tôi đã giải thích rằng đối với các liên kết giỏ hàng và thanh toán, bạn không thể thực hiện việc này từ tệp bố cục. Bạn cần ghi đè phương thứcMage_Checkout_Block_Links::addCartLink()
Marius

1
Được. Tôi giả sử ghi đè phương thức tôi cần thêm một tệp vào các tệp chủ đề tùy chỉnh của mình và gọi phương thức ở đó, sẽ ghi đè lên thể hiện trước đó. Bạn có phiền chỉ cho tôi đi đúng hướng, ví dụ, tập tin nào sẽ chứa phương thức Mage_Checkout_Block_Links. Có phải là links.php không?
Raphael Rafatpanah

Nếu bạn đi theo tuyến đường XML (mà bạn chắc chắn nên) lưu ý, rằng để sử dụng <span class="icon"></span>như trướcText, bạn phải kèm theo nó như vậy <![CDATA[<span class="icon"></span>]]>. Trình phân tích cú pháp XML cũng chọn các dòng mới, vì vậy bạn phải đặt nó ngay sau thẻ mở:<beforeText><![CDATA[<span class="icon"></span>]]></beforeText>
jmk

9

Trong trường hợp bạn chỉ cần áp dụng mẫu tùy chỉnh cho Liên kết hàng đầu, bạn có thể làm điều đó như thế này trong tệp localDB của chủ đề:

<default>
    <reference name="top.links">

        <action method="setTemplate">
            <template>page/template/my_links.phtml</template>
        </action>

    </reference>
<default>

Sau đó sao chép trang / template / links.phtml và đổi tên nó thành page / template / my_links.phtml và làm bất cứ điều gì bạn cần trong tệp mẫu mới đó.

Để thêm một liên kết tùy chỉnh vào Liên kết hàng đầu thông qua local.xml:

<reference name="top.links">
    <action method="addLink" translate="label title">
        <label>My Link</label>
        <url>path/to/page</url>
        <title>My link tooltip</title>
        <prepare>true</prepare>
        <urlParams/>
        <position>150</position>
        <liParams>id="my-custom-id"</liParams>
    </action>
</reference>

Cũng xem trang này: http://www.classyllama.com/development/magento-development/editing-magentos-top-links-the-better-way


Sử dụng phương pháp này, tôi có thể thêm html giữa mỗi liên kết không?
Raphael Rafatpanah

@RaphaelRafatpanah Có, trong links.phtml có một vòng lặp <?php foreach($_links as $_link): ?>. Bạn có thể thêm bất kỳ HTML nào trong vòng lặp đó.
zitix

Nhưng sau đó nó sẽ được thêm vào mỗi liên kết, đúng không? Tôi đang tìm cách thêm html tùy chỉnh giữa mỗi liên kết. Ngoài ra, tôi tin rằng vòng lặp foreach được sử dụng cho các liên kết chân trang cũng như các liên kết tiêu đề vì vậy nếu tôi thêm html giữa các liên kết, chúng cũng sẽ được áp dụng cho các liên kết chân trang.
Raphael Rafatpanah

1
Đó là lừa: sau khi bạn tạo trang / template / my_links.phtml (mà là một bản sao của ban links.phtml ) và sau khi bạn thêm đoạn code tôi đăng lên trang local.xml , mẫu mà sẽ được sử dụng chỉ để render trên Links. Không phải liên kết chân trang hoặc bất kỳ liên kết khác.
zitix


0

Vui lòng tìm đường dẫn này để thay đổi các liên kết hàng đầu:

/app/design/frontend/base/default/layout/customer.xml  

và tìm kiếm: Đăng nhập (Trong trường hợp của tôi).

Bây giờ thay đổi tiêu đề và nhãn với văn bản mong muốn của bạn.


Bạn không nên chỉnh sửa các tập tin cốt lõi!
Đen

-1

Bạn cần chỉnh sửa 2 tập tin sau.

app/design/frontend/default/default/layout/checkout.xml

app/design/frontend/default/default/layout/customer.xml

Trong các tập tin này, các liên kết được thêm vào name="top.links". Chỉ cần nhận xét chúng ra.


2
Chào mừng đến với Magento SE. Trong khi câu trả lời này hoạt động, câu hỏi rõ ràng về thực tiễn tốt nhất và chỉnh sửa các tệp cốt lõi là bất cứ điều gì ngoại trừ thực tiễn tốt nhất trong Magento.
Fabian Schmengler
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.