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 столбцов, а навигация по учетной записи клиента будет удалена из левого столбца.
Однако навигация не отображается в правый столбец (любой другой блок, отображаемый по умолчанию в правом столбце, отображается так, как ожидалось, поэтому общей проблемы с макетом нет), и я не уверен, почему.
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>
Name="правильно" будет работать всякий раз, когда ваш страницы учетной записи имеют макет 2 столбца справа, 3 столбца.
Возможно, вам потребуется перейти на <reference name="content">
с <reference name="right">
Кроме того, вам нужно изменить обработчик на customer_account
с customer_account_index
из-за c обработчик ustomer_account вызывается на всех страницах учетной записи клиента