Денис Чубенко

Денис Чубенко

Был в сети 13 февраля 2025, 17:53
Заказы не принимаю
У меня данная ошибка появляется только когда пользуюсь поиском по сайту из формы поиска. Результатов в всплывающем окне показывает 5, ошибок будет 10. Но у меня стоит старая версия mSearch2-1.9.2. С новой версией mSearch2 не проверял.
Столкнулся с необычным поведением DOMDocument.
есть код в content
<h2>Назначение стационарных углекислотных резервуаров</h2>
<ul>
<li>Длительное хранение (неограниченный срок) жидкой углекислоты с минимальными потерями продукта.  </li>
<li>Подача углекислоты на линию потребления. </li>
<li>Заправка любых емкостей жидкой углекислотой. </li>
</ul>
<p> </p>
<h2>Выгодные особенности углекислотных резервуаров</h2>
после использования loadHTML и saveHTML для обработки content, достаточно только загрузить данные и сохранить
$content = $modx->resource->content;
        $content = mb_convert_encoding($content, 'HTML-ENTITIES', 'UTF-8'); //исправляем ошибки кодировки
        libxml_use_internal_errors(true);

        $dom = new DOMDocument;
        if ($dom->loadHTML($content, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD)){
                //компилируем html и устанавливаем
                $html = $dom->saveHTML($dom->documentElement);
                $modx->resource->set('content', $html);
        }
        break;
получаю поломанную верстку.
Перемещается окончание заголовка h2 в самый конец. Вот вывод в логи переменной $html
<h2>Назначение стационарных углекислотных резервуаров<ul>
<li>Длительное хранение (неограниченный срок) жидкой углекислоты с минимальными потерями продукта.  </li>
<li>Подача углекислоты на линию потребления. </li>
<li>Заправка любых емкостей жидкой углекислотой. </li>
</ul>
<p> </p>
<h2>Выгодные особенности углекислотных резервуаров</h2></h2>
если при загрузке content убрать ключ — LIBXML_HTML_NOIMPLIED, то все будет корректно, но добавятся теги
<html><body>

Подскажите, что нужно прописать, что бы не ломало верстку и лишние теги не добавлялись?
Почему же нет. Если взять fenom то можно делать что угодно. Можно менять класс в самом чанке опираясь на значение idx. Например
<div class="{$idx | in : [1, 2] ? 'col-6' : 'col-4'} ">
или задавать размеры картинке
{set $phpthumb = $idx | in : [1, 2] ? 'w=555&h=290&zc=1&q=70&bg=ffffff' : 'w=360&h=290&zc=1&q=70&bg=ffffff'}
<img src="{$image | phpthumbon : $phpthumb }"  alt="{$pagetitle}">
или выводить нужный div
{if $idx==1} <div class="row">{/if} 
... 
 {if $idx==1} </div>{/if}
тут уже можно творить, что угодно, главное самому не запутаться.
Все зависит от поставленной задачи. Если тебе просто надо менять город, адреса, почту и телефоны для каждого поддомена, то контексты создавать нет смысла. Можно воспользоваться дополнениями, например, SEODomains или changeDomain, или cityFields, по моему еще какие-то были.
Нет там ни чего сложного. Все написано или в тексте статьи или в комментариях.
Сначала надо создать Каталог и Разделы каталога, если надо то и подразделы. Вручную или Импортом.
Потом загрузить все картинки на сайт, положив во временную папку.
Создать import.csv без заголовка с разделенными ";" столбцами. Можно сделать в exel сохранив в нужном формате.
В этом файле необходимо заполнить: pagetitle, parent, template, tv1, tv2, .., price, size,size,gallery,gallery.
Где pagetitle — Название товара;
parent — id раздела или подраздела;
template — Номер шаблона товара, если не прописан в настройка магазина по умолчанию;
tv1, tv2,… список дополнительных полей, с указанием id этого поля, а не названия;
price — цена товара, числовое значение, с точкой разделителем;
size — указать размер товара,
size,size — если их несколько, так и создавать под каждое значение свой столбик, если у какого-то товара он один, значит столбик второго размера должен быть пустой;
gallery — путь к картинке на сервере, которые загрузили ранее;
gallery,gallery,gallery,gallery — с картинками столько столбиков сколько картинок у товара, если у какого-то товара их меньше, значит пустые поля создаем. Общее количество столбиков в строке не должно меняться.
Касательно TV полей, если id доп полей больше 9, то надо поправить 49 строку в csv.php
if (preg_match('/^tv(\d)$/', $v))
добавить плюсик возле «d»
if (preg_match('/^tv(\d+)$/', $v))
Иначе скрипт не увидит доп поля и не даст разрешение на их сохранение.
Теперь формируешь строку, с четким соответствием порядка полей
csv.php?file=file.csv&fields=pagetitle,parent,template,tv1,tv2,price,size,size,gallery,gallery&update=1&key=pagetitle&debug=1&delimeter=;
Дальше то же все понятно
&update=1&key=pagetitle&debug=1&delimeter=;
— это разрешить обновлять, ключевое поле — pagetitle, режим отладки включен, разделитель колонок ";"
Запускаем, проверяем, появился ли товар в нужном разделе, все ли корректно заполнилось, меняем debug=0, запускаем и ждем, надеясь, что все корректно заполнено.
Если необходимы какие-то другие поля, прописываем их так же. content, longtitle, introtext, published, old_price, color
<img src="assets/resourceimages/{$row.image | phpthumbon : "w=250&h=250&zc=1"}"
в таком виде phpthumbon файл не видит.
<img src="{'assets/resourceimages/'~$_modx->resource.id~'/'~$row.image | phpthumbon : "w=250&h=250&zc=1"}"
вот так возможно и увидит.
Есть не большая тонкость.
<a href="assets/resourceimages/{$_modx->resource.id}/{$row.image}"
здесь собирается путь не посредственно в HTML и потом картинку видит именно браузер, а надо что бы ее увидел сначала сниппет, поэтому путь к картинке надо собирать раньше.
Вот такой вариант, работает
<table>
    [[+name:notempty=`<tr>
        <td style="padding:2px 7px 2px 0px"><b>Имя:</b></td>
        <td>[[+name]]</td>
    </tr>`]]
    [[+phone:notempty=`<tr>
        <td style="padding:2px 7px 2px 0px"><b>Телефон:</b></td>
        <td>[[+phone]]</td>
    </tr>`]]
    [[+email:notempty=`<tr>
        <td style="padding:2px 7px 2px 0px"><b>Почта:</b></td>
        <td>[[+email]]</td>
    </tr>`]]
    [[+link:notempty=`<tr>
        <td style="padding:2px 7px 2px 0px"><b>Ссылка:</b></td>
        <td>[[+link]]</td>
    </tr>`]]
    [[+mess:notempty=`<tr>
        <td style="padding:2px 7px 2px 0px"><b>Сообщение:</b></td>
        <td>[[+mess]]</td>
    </tr>`]]
    <tr>
        <td style="padding:2px 7px 2px 0px"><b>Страница:</b></td>
        <td><a href="[[++site_url]][[+uri]]">[[+page]]</a></td>
    </tr>
</table>
Добавляю все поля которые мне нужны из разных форм. Клиенту приходят только те поля, что заполнены.