Magento - удаление ссылки из списка желаний в 1.4.2? - PullRequest
1 голос
/ 12 декабря 2010

Ранее в Magento ссылка на список желаний была добавлена ​​с использованием следующего (в wishlist.xml):

<action method="addWishlistLink"></action>

И вы можете переопределить это и удалить его с помощью следующего (в вашем local.xml):

<remove name="wishlist_link"/>

Однако в новейшей версии Magento, 1.4.2, они изменили способ добавления ссылки в список желаний:

<action method="addLinkBlock"><blockName>wishlist_link</blockName></action>

Кто-нибудь знает, как удалить ссылку на список желаний, теперь они изменили способ ее добавления?

Ответы [ 5 ]

9 голосов
/ 13 декабря 2010

Похоже, что нет общедоступного способа надежного удаления ссылки списка желаний block из макета. (вы можете пропустить до конца для обходного пути)

addLinkBlock предполагает наличие пропущенного блока, поэтому использование удаления в том виде, как вы описываете, приводит к фатальной ошибке

Fatal error: Call to a member function getPosition() on a non-object in /Users/alanstorm/Sites/magento1point4.2.dev/app/code/core/Mage/Page/Block/Template/Links.php on line 112

Вот основной код, который вызывает эту ошибку

app/code/core/Mage/Page/Block/Template/Links.php
public function addLinkBlock($blockName)
{
    $block = $this->getLayout()->getBlock($blockName);
    $this->_links[$this->_getNewPosition((int)$block->getPosition())] = $block;        
    return $this;
}

Этот метод предполагает, что он сможет извлекать блок по любому переданному имени, поэтому мы не можем просто удалить блок wishlist_link, как это было в предыдущих версиях.

Единственным механизмом удаления ссылки является следующий метод в том же классе блоков

app/code/core/Mage/Page/Block/Template/Links.php
public function removeLinkByUrl($url)
{
    foreach ($this->_links as $k => $v) {
        if ($v->getUrl() == $url) {
            unset($this->_links[$k]);
        }
    }
    return $this;
}

Однако это делается с помощью сравнения строк, и нет надежного способа (который я знаю) генерировать объект URL из файла макета, приводить его как строку и передавать в метод (это потребуется). , поскольку существует множество параметров конфигурации, которые могут изменить конечный URL-адрес строки). Это делает этот метод не полезным для наших нужд.

Итак, что мы можем изменить в существующем блоке wishlist_link, чтобы использовать пустой или несуществующий шаблон. Таким образом, блок по-прежнему отображается, но отображается как пустая строка. В результате мы избегаем упомянутой выше фатальной ошибки, но все же удаляем ссылку на выбранные страницы.

Следующее действие удалит ссылку из всех страниц, использующих default handle. </p> <pre><!-- file: local.xml --> <layout> <default> <reference name="wishlist_link"> <action method="setTemplate"><template>blank-link.phtml</template></action> </reference> </default> </layout>

3 голосов
/ 17 июля 2012

В вашем файле local.xml,

<?xml version="1.0"?>
<layout version="0.1.0">
  <default>
    <reference name="root">
      <reference name="top.links">
        <!-- Remove wishlist link in magento 1.4.x and newer -->
        <remove name="wishlist_link"/>
      </reference>
    </reference>
  </default>
</layout>
1 голос
/ 24 июня 2014

Добавьте следующее в ваш файл local.xml.

<reference name="top.links">
    <remove name="wishlist_link"/>  
</reference>

Это работает! Я удалил Wishlink из Toplinks и хотел добавить его обратно в другой блок, но это невозможно, если вы удалите его таким образом. К сожалению.

1 голос
/ 13 декабря 2010

Вы можете удалить ссылку из списка желаний в админ-панели Система> Конфигурация> Список желаний> Включено = "Нет"

0 голосов
/ 19 октября 2015

Я знаю, что опоздал на несколько лет, но для всех тех людей, которые все еще ищут ответы на этот вопрос.

У меня есть способ обойти эту проблему, которая является лишь дополнительной работой.но он не хакерский и дает вам ПОЛНЫЙ контроль над вашим блоком top.links.

Просто снимите блок top.links и воссоздайте его, он будет пустым (не более wishlist_link блок) и всеВы должны сделать, это добавить любые ссылки, которые вы хотите внутри него!(Делайте все это в вашем файле theme/layout/local.xml, конечно.)

<layout version="0.1.0">
<default>
    <!-- HEADER -->
    <reference name="header">

        <!-- Unsetting the already existing top links block -->
        <action method="unsetChild">
            <name>topLinks</name>
        </action>

        <!-- Re-creating a new top links block -->
        <block type="page/template_links" name="top.links" as="topLinks">
            <!-- EXAMPLE: Account Dashboard Link -->
            <action method="addLink" translate="label title" module="catalog">
                <label>Account Dashboard</label>
                <url helper="customer/getAccountUrl"/>
                <title>Account Dashboard</title>
            </action>
            <!-- You can add any other links that you want -->
        </block>

    </reference>
</default>
</layout>

Также помните, что для некоторых ссылок, таких как Sign In и Log Out, вам нужно будет ссылаться на свой блок top.links внутрисоответствующие <customer_logged_out> и <customer_logged_in> ручки вместо <default> в качестве руководства для этого вы можете посмотреть в customer.xml файле Magento.

ВАЖНО: Если есть какие-либо модуливключенные в ваш проект, которые добавляют ссылки в блок top.links, эти ссылки не будут отображаться, поскольку local.xml обрабатывается последним, поэтому помните об этом при использовании этого метода :)

Я являюсьСертифицированный Magento Front End Developer с более чем 3-летним опытом работы, и я преодолел МНОГИЕ головные боли макета XML до такой степени, что мы стали лучшими друзьями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...