Изменить порядок блоков через файл local.xml

(StartA < = EndB) и (EndA> = StartB)

Доказательство:
ConditionA, которому Позволяют, Средний, что DateRange Полностью После DateRange B
_ |---- DateRange A ------| |---Date Range B -----| _
(Верный, если StartA > EndB)

ConditionB, которому Позволяют, Средний, что DateRange A Полностью Перед DateRange B
|---- DateRange A -----| _ _ |---Date Range B ----|
(Верный, если EndA < StartB)

Тогда, Перекрытие существует, если Ни A, Ни B не верны -
(Если один диапазон ни полностью после другого,
, ни полностью перед другим, то они должны наложиться.)

Теперь один из [1 127] законы De Morgan говорит что:

Not (A Or B) < => Not A And Not B

, Который переводит в: (StartA <= EndB) and (EndA >= StartB)

ПРИМЕЧАНИЕ: Это включает условия, где края накладываются точно. Если Вы хотите исключить, это,
изменяется эти >= операторы к >, и <= к [1 110]

NOTE2. Благодаря @Baodad см. этот блог , фактическое перекрытие является наименьшим количеством:
{endA-startA, endA - startB, endB-startA, endB - startB}

(StartA <= EndB) and (EndA >= StartB) (StartA <= EndB) and (StartB <= EndA)

NOTE3. Благодаря @tomosius читает более короткая версия:
DateRangesOverlap = max(start1, start2) < min(end1, end2)
Это - на самом деле синтаксический ярлык для того, что является более длительной реализацией, которая включает дополнительные проверки, чтобы проверить, что даты начала идут или перед endDates. Получение этого сверху:

, Если запускаются и даты окончания не могут работать, т.е. если возможно, что startA > endA или startB > endB, тогда также необходимо проверить, что они в порядке, так, чтобы средства Вы добавили два дополнительных правила законности:
(StartA <= EndB) and (StartB <= EndA) and (StartA <= EndA) and (StartB <= EndB) или:
(StartA <= EndB) and (StartA <= EndA) and (StartB <= EndA) and (StartB <= EndB) или,
(StartA <= Min(EndA, EndB) and (StartB <= Min(EndA, EndB)) или:
(Max(StartA, StartB) <= Min(EndA, EndB)

, Но реализовать Min() и Max(), необходимо кодировать, (использующий C троичный для краткости):
(StartA > StartB? Start A: StartB) <= (EndA < EndB? EndA: EndB)

22
задан double-beep 2 February 2019 в 14:55
поделиться

1 ответ

Вам нужно выполнить небольшой трюк, удалить дочерний блок и добавить его в новую позицию:

<reference name="parent.block.name">
    <action method="unsetChild">
        <alias>child_block_alias</alias>
    </action>
    <action method="insert">
        <blockName>child.block.name</blockName>
        <siblingName>name_of_block</siblingName>
        <after>1</after>
        <alias>child_block_alias</alias>
    </action>
</reference>

Эта инструкция XML-макета делает то, что вы хотите. Посмотрите на этот краткий справочник параметров для метода insert:

  • blockName - уникальное имя вашего блока в макете, product.view, например,
  • siblingName - это уникальное имя блока, которое уже существует в целевом блоке вставки, используется для позиционирования вашего блока. Оставьте пустым, чтобы отобразить его сверху или снизу.
  • after - логический идентификатор позиции блока. Если равно 1, то блок будет добавлен после siblingName или внизу списка детей, если siblingName пусто
  • alias - это псевдоним вашего блока, если это пусто будет использовано имя блока.

Некоторые примеры:

Переместить блок боковой панели корзины после недавно просмотренных продуктов

<reference name="right">
    <action method="unsetChild">
        <alias>cart_sidebar</alias>
    </action>
    <action method="insert">
        <blockName>cart_sidebar</blockName>
        <siblingName>right.reports.product.viewed</siblingName>
        <after>1</after>
    </action>
</reference>

Переместить блок боковой панели корзины перед недавно просмотренными продуктами

<reference name="right">
    <action method="unsetChild">
        <alias>cart_sidebar</alias>
    </action>
    <action method="insert">
        <blockName>cart_sidebar</blockName>
        <siblingName>right.reports.product.viewed</siblingName>
        <after>0</after>
    </action>
</reference>

Переместить блок боковой панели тележки в конце правого блока

<reference name="right">
    <action method="unsetChild">
        <alias>cart_sidebar</alias>
    </action>
    <action method="insert">
        <blockName>cart_sidebar</blockName>
        <siblingName></siblingName>
        <after>1</after>
    </action>
</reference> 

Переместить блок боковой панели тележки вверху слева блок

<reference name="right">
    <action method="unsetChild">
        <alias>cart_sidebar</alias>
    </action>
</reference>
<reference name="left">
    <action method="insert">
        <blockName>cart_sidebar</blockName>
    </action>
</reference>

Наслаждайтесь работой с Magento!

64
ответ дан 29 November 2019 в 03:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: