Как сделать, чтобы amp-img не включал текст из тега <p> - PullRequest
0 голосов
/ 24 января 2019

Существует две версии страницы: amp и non amp. В версии без усилителя раскладка текста выглядит так

<p><img src="https://www.example-site.ru/files/12345.jpg" alt="" width="30" height="30"> Some text for example. </p>

В версии с усилком раскладка становится такой

<p>
  <amp-img layout="responsive" width="1280" height="768" src="https://www.example-site.ru/files/12345.jpg" alt="" class="i-amphtml-element i-amphtml-layout-responsive i-amphtml-layout-size-defined i-amphtml-layout">
    <i-amphtml-sizer style="padding-top: 60%;"></i-amphtml-sizer>Some text for example <img decoding="async" alt="" src="https://www.example-site.ru/files/12345.jpg" class="i-amphtml-fill-content i-amphtml-replaced-content"></amp-img>
</p>

Из-за того, что тег amp-img содержал текст, он не отображается при просмотре страницы усилителя, поскольку находится под картинкой. Как этого можно избежать?

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

$this->content = str_ireplace("<img", "<amp-img layout='responsive' width='1280' height='768' ", $this->content);

1 Ответ

0 голосов
/ 30 января 2019

В отличие от <img>, который является пустым элементом , <amp-img> является контейнером и всегда должен быть явно закрыт с помощью </amp-img>.

Следовательно, вызов str_ireplace, который у вас есть, приведет к тому, что текст будет внутри <amp-img>, то есть <amp-img src="...">Some text for example.</amp-img>, что сделает его потомком <amp-img>. Поскольку он не является ни резервным, ни заполнителем, этот дочерний элемент <amp-img> просто не будет обработан.

Трудно предложить решение, не зная больше о других применяемых вами преобразованиях, но я рекомендую переосмыслить ваш подход и убедиться, что теги <img> заменены на теги <amp-img>, которые должным образом закрыты.

...