Всего 125 988 комментариев

Aleksandr Huz
10 ноября 2021, 12:40
0
У меня ошибка с таким вариантом.
modContext is deprecated since version 3.0. Replace references to class modContext with MODX\Revolution\modContext to take advantage of PSR-4 autoloading.
А вот с таким норм:
$this->modx->getCollection('MODX\Revolution\modContext')
Иван Бочкарев
10 ноября 2021, 12:37
0
Отличная мысль — вот ссылка modx.pro/development/19443
Aleksandr Huz
10 ноября 2021, 12:36
+1
Когда-то @Олег Щавелев создал гугл таблицу
Может возобновим работу с этой таблицей? C моей стороны готов протестировать несколько компонентов + все свои компоненты до НГ будут переделаны для modx3
Іван Клімчук
10 ноября 2021, 12:33
+2
Правильно писать
$this->modx->getCollection(modContext::class)
, к слову, во 2 верси тоже так можно (и нужно).
Иван Бочкарев
10 ноября 2021, 12:27
0
Для Formit уже давно висит фикс github.com/Sterc/FormIt/pull/247

А так, чем больше обратной связи от сообщества тем лучше!
Aleksandr Huz
10 ноября 2021, 12:24
0
Информация не полная, тестировали топ используемых дополнений.
Тот же FormIt установился с куча ошибок.

Также такие конструкции вызывают ошибки:
$this->modx->getCollection('modContext')

Поэтому я бы не полагался на этот список.
Иван Бочкарев
10 ноября 2021, 12:01
0
Также список совместимых с MODX3 дополнений уже сейчас можно посмотреть тут: sitedash.app/extras

Информация не полная, тестировали топ используемых дополнений.
Артур Шевченко
10 ноября 2021, 10:17
0
У пользователя есть поле extended что по сути уже и есть поле migx, т.е. хранит данные в json. Если тебе нужно табличное представление данных, то можно создавать для каждого пользователя отдельный ресурс и указать этого пользователя создателем данного ресурса. А вообще, надо понимать какая именно задача стоит, возможно стоит создать свою таблицу в БД.
Павел Гвоздь
09 ноября 2021, 20:46
0
Увы, нет. Нужно для этого будет написать плагин небольшой, который будет такую логику реализовывать.
Максим
09 ноября 2021, 20:07
0
Не, нужно чтобы ПС видели все, что есть на странице) Спасибо за Ваш вариант! В моем случае JS норм)
Александр Мельник
09 ноября 2021, 19:50
0
Если же для вас важно, чтобы и поисковая система видела только первое предложение, то да — немного сложнее. Нужно нагуглить как писать свои модификаторы и написать такой, который можно применить к текстовому выводу {$contents|showFirstSentence}
После этого в шаблоне прописать ссылку — показать еще. При клике по ней нужно совершить ajax запрос на ваш файл, в котором вы подключите объект modx по учебнику docs.modx.com/current/en/extending-modx/modx-class/loading-externally, каким то образом (через data атрибут ссылки ?) получите идентификатор ресурса, на котором идет запрос текста, получите весь текст (чтобы не заморачиваться с отрезанием первого предложения, которое уже есть на странице) и поместите этот текст на страницу, перезаписав первое предложение и кнопку — подробнее.
Максим
09 ноября 2021, 19:49
0
Вдруг кому будет полезно.
<script>
  const pageWidth = document.documentElement.scrollWidth
  if(pageWidth < 659){
    var bukvi = document.getElementById('spoiler');
  var sentens = bukvi.textContent;
  var spoilerON = sentens.split('.')[0];
  var lenS = spoilerON.length;
  var sentensP2 = sentens.slice(lenS + 1);
  bukvi.innerHTML = '<span class="begin_spoiler">' + spoilerON + '.' + '</span>' + '<span id="end_spoiler" class="end_spoiler">' + sentensP2 + '</span>';
  
  var button = document.createElement('button');
  bukvi.after(button);
  button.innerText = "Подробнее";
  button.id = "spoilerBT"
  button.onclick = function (){
    var spoilerTXT = document.getElementById("end_spoiler");
    spoilerTXT.classList.toggle("active");
    if(button.innerText == "Подробнее"){
      button.innerText = "Cкрыть";
    }
    else{
      button.innerText = "Подробнее";
    }
  }
  }
</script>
И стили:
.end_spoiler{
      display: none;
    }
    .end_spoiler.active{
      display: inline;
    }
Денис Усачев
09 ноября 2021, 19:41
0
решение довольно простое
1. добавляем в чанк шаблон tpl.msEmail конструкцию из Получение и вывод pagetitle от другого ресурса с условием проверки локализации
{if $_modx->config.cultureKey == 'ru'}         
 {set $tTitle =  $product.name}
    {else}
{set $tTitle = 'pdoResources' | snippet : [
    'tpl' => '@INLINE {$pagetitle}',
    'class' => 'localizatorContent',
    'sortby' => 'id',
    'limit' => 1,
    'where' => [
        'key' => ('localizator_key' | option),
        'resource_id' =>  $product.id
    ],
]}
{/if}
и {$product.name} заменяем на наш {$tTitle}

проверяем наш шаблон письма через
{'!msGetOrder' | snippet : [
            'id' => 460, //номер заказа
            'tpl' => 'tpl.msEmail.new.user',
        ]}
Александр Мельник
09 ноября 2021, 19:32
0
Все зависит от того зачем вы это делаете. Пока что выглядит так, что вам поможет javascript. Получить весь текст, найти кусок до точки, остальное скрыть. Добавить ссылку — подробнее, подвесить на нее событие, которое откроет остальной текст.
Но это будет иметь смысл, если вы не из СЕО соображений это делаете, потому что в исходном коде, который вернул сервер будет присутствовать весь текст.
Максим
09 ноября 2021, 19:25
0
Нет. Этот вариант мне не подходит, в этом варианте нужно добавлять теги в текст, чтобы обрезать его на ДО и ПОСЛЕ, я не могу вмешиваться в поток content и добавлять туда теги. Если это делать руками, то придется 160 страниц править.
iWatchYouFromAfar
09 ноября 2021, 17:36
0
А, ну для этого я бы посмотрел в сторону написания своего небольшого компонента. Кстати, именно такой кейс в свое время был и у меня. В процессе его реализации и смены кое-каких требований, пришел к выводу, что проще будет сменить стек.
Giant Dad
09 ноября 2021, 17:34
0
Спасибо за совет. Я попробую
Giant Dad
09 ноября 2021, 17:34
0
А migx для того, чтобы можно было добавлять и удалять элементы, каждый из которых содержал бы в себе кол-во баллов и дату сгорания. Т.е. кол-во полей должно динамически меняться
iWatchYouFromAfar
09 ноября 2021, 17:30
0
А зачем вам для этого migx? Вот пример добавление в раздел пользователя таба, внутри которой можете рендерить что угодно и работать с этими полями штатно, как с другими полями пользователя.