Misha Bulic

Misha Bulic

С нами с 11 ноября 2016; Место в рейтинге пользователей: #309

Как поставить обработчик на контент в ресурсе?

При переносе/переезде старых сайтов на новые приходится переносить содержимое страниц со ссылками. При смене структуры сайта меняются и ссылки. Можно конечно сделать редиректы, но я хочу чтобы на новом сайте ссылки сразу вели куда надо.
для себя я сделал обработчик такой:
<?php
$filecsv = 'urls.csv';
$data_array = array();
$row = 1;
if (($handle = fopen($filecsv, "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) { 
        $row++; 
        $data_array[$data[0]] =  $data[1];
    }
    fclose($handle);
} 
$replacements = $data_array; 
$string =  $_POST["input"] ;
$string = str_replace(array_keys($replacements), array_values($replacements), $string);
$string = str_replace('target="_blank"', ' ', $string);
$string = str_replace('rel="noopener"', ' ', $string);
?>
Тут в csv файле лежат редиректы, и при обработке он меняет все ссылки(еще до кучи убирает target='_blank')

Вопрос в том, можно ли это встроить в сам modx? У меня несколько видений:
  1. Сделать плагин и при сохранении он бы каждый раз обрабатывал контент
  2. Сделать какую то кнопку, которая бы делал обработку
  3. Плагин к tinymce, тоже кнопкой
Подскажите как можно реализовать?
Misha Bulic
22 апреля 2021, 18:39
modx.pro
122
0

Как сделать условие выборки для article.

Создал для быстрой вставки товаров в тело любой страницы, хочу чтобы не него можно было вносить назания товара (Артикль). Раньше было сделано по id ресурса через resources
вызов такой:
{include 'file:chunks/blocks/pdo_project.tpl' $resources='212,207,197'}
Код чанка такой:
{set $params = [
'depth' => '0',
'resources' => $resources,
'element' => 'msProducts',
'tpl' => '@FILE chunks/cards/card.tpl',
'includeThumbs' => 'medium',
'limit' => 80,
'includeTVs' => 'price1,area',
'tvPrefix' => '',
'parents' =>  0 ,
]}
<div class="rows row row-cols-1 row-cols-sm-2 row-cols-md-3 catalog mt-2">
    {'!pdoPage' | snippet : $params}
</div>
Сейчас пытаюсь через where заменить
'resources' => $resources
на
'where'=> '{"article:IN":$articles}',
но ничего не работает.
Артикли на кириллице
Misha Bulic
07 апреля 2021, 18:02
modx.pro
123
0

Скрипт отправляет форму на почту только с главной страницы

У меня есть скрипт который отправляет письма с любых HTML форм. Использую его на разных сайтах и везде работает, а на новом сайте почему то отправляет только с главной страницы. На других страницах он отдаёт код 200 — форма успешно отправлена. Но сами письма не приходят.
Форма:
Misha Bulic
28 марта 2021, 14:54
modx.pro
88
0

Галерея через migx

Создавал галерею для небольших сайтов по инструкции с сайта Создание галереи migx. На нескольких сайтах всё работает нормально, но на текущем последнем не позволяет загружать картинки через загрузку с компа. Пишет нельзя загружать файлы в корневой раздел. Хотя в источнике файлов всё прописано верно.

Может быть кто то уже сталкивался с такой проблемой и знает как её решить?
Misha Bulic
21 марта 2020, 11:27
modx.pro
295
0

Пагинация вложена сама в себя

Помогите разобраться с пагинацией:
{var $result = '!pdoPage' | snippet : [
'ajaxMode' => 'default',
'parents' => 9,
'sortby' => $_modx->resource.sortBy,
'sortdir' => $_modx->resource.sortDir,
'includeTVs' => 'size,area,image1,pro,price1',
'tpl' => '@FILE elements/chunks/card.tpl',
'limit' => 15,
'tvPrefix' => '',
'where' => $_modx->resource.tagfilter,
'tvFilters' => $_modx->resource.tagfilter2,
'tplPageWrapper' => '@INLINE <nav aria-label="Page navigation"><ul class="pagination  justify-content-center">{$prev}{$pages}{$next}</ul></nav>',
'tplPage' => '@INLINE <li class="page-item"><a class="page-link" href="{$href}">{$pageNo}</a></li>',
'tplPageActive' => '@INLINE <li class="page-item active"><a class="page-link" href="{$href}">{$pageNo}</a></li>',
'tplPagePrev' => '@INLINE <li rel="prev"><a class="page-link" href="{$href}">«</a></li>',
'tplPageNext' => '@INLINE <li rel="next"><a class="page-link" href="{$href}">»</a></li>',
'tplPagePrevEmpty' => '@INLINE ',
'pageLimit' => 6,
'tplPageNextEmpty' => '@INLINE ',
'ajaxElemWrapper' => '#child_list',
'ajaxElemRows' => '#child_list .card-deck',
'ajaxElemPagination' => '#child_list .pagination',
'ajaxElemLink' => '#child_list .pagination a',
]}

{$result}
    {$_modx->getPlaceholder('page.nav')}
{else}
    <p class="lead">Нет подходящих проектов</p>
{/if}
Вот этот код работает странно, При открытии страницы каталога, он нормально отображает пагинацию, а при переходе на другую страницу он дважды вкладывает пагинацию в tplPageWrapper:
Misha Bulic
29 ноября 2018, 16:56
modx.pro
429
0

Дополнительные параметры к сниппету getChildCount

Есть в интернете сниппет для вывода количества дочерних ресурсов getChildCount:
<?php
$count = 0;
$parent = isset($parent) ? (integer) $parent : 0;
if ($parent > 0) {
    $criteria = array(
        'parent' => $parent,
        'deleted' => false,
        'published' => true,
    );
    $count = $modx->getCount('modResource', $criteria);
}
return (string) $count;
Как добавить к этому сниппету параметров? Он по умолчанию считает только свои дочерние элементы. Вложенные в них не считаются.
И можно ли как нибудь добавить фильтрацию по tv полю в этот сниппет?
Misha Bulic
24 марта 2018, 17:22
modx.pro
789
0

Как в pdoResources вывести текст при отсутствии выборки

Как вывести в pdoResources текст при отсутствии результатов выборки?
{'!pdoPage' | snippet : [
'ajaxMode' => 'default',
'sortby' => 'id',
'sortdir' => 'ASC',
'includeTVs' => 'size,area,image1,pro,price1',
'tpl' => 'projectcard',
'limit' => 15,
'tvPrefix' => '',
'where' => '["`TVprice1`.`value` BETWEEN 501 and 999"]',
'tplPageWrapper' => '@INLINE <nav aria-label="Page navigation"><ul class="pagination  justify-content-center">{$prev}{$pages}{$next}</ul></nav>',
'tplPage' => '@INLINE <li class="page-item"><a class="page-link" href="{$href}">{$pageNo}</a></li>',
'tplPageActive' => '@INLINE <li class="page-item active"><a class="page-link" href="{$href}">{$pageNo}</a></li>',
'tplPagePrev' => '@INLINE <li rel="prev"><a class="page-link" href="{$href}">« Назад</a></li>',
'tplPageNext' => '@INLINE <li rel="next"><a class="page-link" href="{$href}">Дальше »</a></li>',
'tplPagePrevEmpty' => '@INLINE ',
'tplPageNextEmpty' => '@INLINE ',
'ajaxElemWrapper' => '#child_list',
'ajaxElemRows' => '#child_list .rows',
'ajaxElemPagination' => '#child_list .pagination',
'ajaxElemLink' => '#child_list .pagination a',
]}
Сейчас если результатов нет, то он выводит array
Misha Bulic
01 февраля 2018, 12:16
modx.pro
993
0

2 уровень меню только для одного пункта

Подскажите как реализовать:
Есть 5 пунктов меню, у 3-х из них есть много дочерних элементов. Мне нужно в меню вложенность сделать только для одного.
[[pdoMenu?
	&parents=`0`
        &level=`1`
        &resources=`-8`
        &tpl = `@INLINE <li[[+classes]]><a class='nav-link' href="[[+link]]" [[+attributes]]>[[+menutitle]]</a>[[+wrapper]]</li>`
        &outerClass=`navbar-nav`
        &rowClass=`nav-item`
        &tplHere=`@INLINE <li [[+classes]]><span class='nav-link active' >[[+menutitle]]</span>[[+wrapper]]</li>`
        &firstClass=``
        &lastClass=``
]]
Misha Bulic
28 декабря 2017, 08:23
modx.pro
489
0

Условие where pdoPage

Подскажите как реализовать в pdoPage условие больше 100 и меньше 150 у поля area

{'!pdoPage' | snippet : [
      'ajaxMode' => 'default',
      'parents' => 23,
      'tpl' => 'projectcard',
  'limit' => 15,
  'includeTVs' => 'number,size,area,img,number,price1',
  'tvPrefix' => '',
  'includeContent' => 1,

  'where' => '{"area:=<": 150 AND "area:>": 100}',

  'tplPageWrapper' => '@INLINE <div class="pagination"><ul class="pagination pagination-lg">{$prev}{$pages}{$next}</ul></div>',
  'tplPage' => '@INLINE <li><a href="{$href}">{$pageNo}</a></li>',
  'tplPageActive' => '@INLINE <li class="active"><a href="{$href}">{$pageNo}</a></li>',
  'tplPagePrev' => '@INLINE <li rel="prev"><a href="{$href}">« Назад</a></li>',
  'tplPageNext' => '@INLINE <li rel="next"><a href="{$href}">Дальше »</a></li>',
  'tplPagePrevEmpty' => '@INLINE ',
  'tplPageNextEmpty' => '@INLINE ',
  'ajaxElemWrapper' => '#child_list',
  'ajaxElemRows' => '#child_list .rows',
  'ajaxElemPagination' => '#child_list .pagination',
  'ajaxElemLink' => '#child_list .pagination a',
  ]}
Misha Bulic
06 декабря 2017, 15:07
modx.pro
2 995
0

Можно ли сделать такое с помощью мультисайта?

Заинтересовался я реализацией проектов с помощью мультисайта и есть у меня несколько вопросов по этому поводу:
1. Есть главный сайт site.ru с полным каталогом товаров, допустим их там 1000. Я заполняю все доп поля с характеристиками этих товаров.
Далее я создаю новые домены и хочу использовать данные полей из этих товаров. Т.е. на site2.ru я хочу наполнять 200 товарами из главного сайта. Можно ли при создании ресурса выбрать как источник полей ресурсы главного сайта? И при изменении полей на главном сайте они изменялись на всех зависимых.
2. Будут ли проблемы с SEO?
3. При покупке дополнения из магазина оно будет работать на всех доменах?
4. Доступ для сеошников и менеджеров ограничит их только одним сайтом(Чанки, ресурсы, файлы)?
Misha Bulic
22 октября 2017, 09:15
modx.pro
589
0