Magento 2: Как добавить текст в контейнер через XML


11

Я пытаюсь сделать одну строку текста перед списком ссылок в нижнем колонтитуле. Создание файла шаблона для этого кажется пустой тратой ресурсов на эту задачу. Как я понял, я мог выводить текст с Magento\Framework\View\Element\Textблоком в макете.

XML

<referenceContainer name="footer">
  <container name="footer.column.about_us" htmlTag="div" htmlClass="column about-us" before="-">
    <container name="column.about_us.label" htmlTag="div" htmlClass="label">
      <block class="Magento\Framework\View\Element\Text" name="about_us.label">
        <arguments>
          <argument name="data" xsi:type="array">
            <item name="text" xsi:type="string">About Us</item>
          </argument>
        </arguments>
      </block>
    </container>
    <block class="Magento\Framework\View\Element\Html\Links" name="footer_links.about_us">
      <arguments>
        <argument name="css_class" xsi:type="string">footer links</argument>
      </arguments>
    </block>
  </container>
</referenceContainer>

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

Чтобы было ясно, что я сейчас вижу:

<div class="column about-us">
  <ul class="footer links">...</ul>
</div>

когда я хочу увидеть:

<div class="column about-us">
  <div class="label">About Us</div>
  <ul class="footer links">...</ul>
</div>

Какие-либо предложения?

Ответы:


22

Вам нужно использовать аргумент напрямую без массива.

Вместо того

    <arguments>
      <argument name="data" xsi:type="array">
        <item name="text" xsi:type="string">About Us</item>
      </argument>
    </arguments>

Тебе нужно:

    <arguments>
      <argument translate="true" name="text" xsi:type="string">About Us</argument>
    </arguments>

альтернатива

Вы также можете попробовать с <action>тегом:

<action method="setText">
      <argument translate="true" name="text" xsi:type="string">About Us</argument>
</action>

Добавление div напрямую

Вы также можете добавить div прямо в тексте с помощью следующего:

<argument translate="true" name="text" xsi:type="string"><![CDATA[<div class="label">About Us</div>]]></argument>

Как бы вы добавили аргумент в существующий блок, например, в блок product.info.review можно сослаться на него и добавить другой аргумент типа string?
Девтип

@Devtype полностью. Вы можете использовать <referenceBlock name="product.info.review">для этого
Рафаэль в Digital Pianism

@RaphaelatDigitalPianism ссылка на блок не работает для меня, с другой стороны, ссылка на контейнер работает. Я что-то пропустил!!
Девтип

@Devtype нет, это должно работать как для блоков, так и для контейнеров. Не стесняйтесь создать новый вопрос и подробно описать свою проблему;)
Рафаэль на Digital Pianism

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.