Magento: перемещение навигации по учетной записи клиента слева направо


Я пытаюсь настроить страницу учетной записи клиента для макета из 3 столбцов и хочу переместить навигацию по учетной записи клиента из положения по умолчанию в левом столбце в правый столбец. До сих пор я пробовал это в файле local.xml моей собственной темы:

<customer_account_index>
    <reference name="root">
        <action method="setTemplate"><template>page/3columns.phtml</template></action>
    </reference>
    <reference name="left">
        <remove name="customer_account_navigation"/>
    </reference>
    <reference name="right">
        <block type="customer/account_navigation" name="customer_account_navigation" template="customer/account/navigation.phtml">
            <action method="addLink" translate="label" module="customer"><name>account</name><path>customer/account/</path><label>Account Dashboard</label></action>
            <action method="addLink" translate="label" module="customer"><name>account_edit</name><path>customer/account/edit/</path><label>Account Information</label></action>
            <action method="addLink" translate="label" module="customer"><name>address_book</name><path>customer/address/</path><label>Address Book</label></action>
        </block>
    </reference>
</customer_account_index>

Как и ожидалось, страница учетной записи клиента будет иметь макет из 3 столбцов, а навигация по учетной записи клиента будет удалена из левого столбца.

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

Author: fritzmg, 2016-04-22

2 answers

Проблема заключалась в том, что я использовал

<reference name="left">
    <remove name="customer_account_navigation"/>
</reference>

Чтобы удалить навигацию по учетной записи клиента из левой колонки. Это проблематично, потому что эти <remove> действия будут выполнены после объединения всех дескрипторов макета (см. https://stackoverflow.com/a/6358263/374996 ). Таким образом, решение состояло в том, чтобы изменить удаление на

<reference name="left">
    <action method="unsetChild">
        <name>customer_account_navigation</name>
    </action>
</reference>

И даже лучше: вместо создания нового блока (с помощью <block …>…) вы можете использовать

<reference name="right">
    <action method="insert">
        <name>customer_account_navigation</name>
    </action>
</reference>

Чтобы повторно вставить существующий блок в правая колонка.

Таким образом, в целом, для перемещения блока, в данном случае customer_account_navigation, например, из левого столбца в правый столбец, все, что вам нужно, это

<reference name="left">
    <action method="unsetChild">
        <name>customer_account_navigation</name>
    </action>
</reference>
<reference name="right">
    <action method="insert">
        <name>customer_account_navigation</name>
    </action>
</reference>
 1
Author: fritzmg, 2017-05-23 12:37:12

Name="правильно" будет работать всякий раз, когда ваш страницы учетной записи имеют макет 2 столбца справа, 3 столбца.

Возможно, вам потребуется перейти на <reference name="content"> с <reference name="right">

Кроме того, вам нужно изменить обработчик на customer_account с customer_account_index из-за c обработчик ustomer_account вызывается на всех страницах учетной записи клиента

 0
Author: Amit Bera, 2016-04-22 09:50:26