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

Александр Мельник
20 июня 2022, 07:37
0
У меня работает следующим образом.
Смотрим скриншот.

Есть тв поле blocklist которое содержит в себе перечень всех возможных на сайте блоков. Под блоком я понимаю — название, указание на чанк в котором вьюшка и прочая инфа.
В ресурсе «Настройки (2)» перед началом работы с сайтом я заполняю это поле, причем заполняю максимально, тоесть все все блоки которые есть на данный момент.
Чтобы менеджеру было проще, а система в целом была гибче, есть еще группа ресурсов, на скрине это ресурсы в родителе «Настройка шаблонов (48)». Эти ресурсы уже отвечают за какой-то определенный тип страниц. Здесь я тоже перед началом работы создаю все все блоки, НО ненужные деактивирую, сортирую блоки, так чтобы они соответствовали макету этой страницы. Ну к примеру если это услуга, то я деактивирую все, кроме блоков
— хлебные крошки
— h1
— баннер
— текстовое поле
— форма заказа
— ссылка назад
Что происходит далее. Я через инструмент «Настройка форм» и через компонент «Collections» стараюсь максимально автоматизировать правильное применение шаблонов, когда менеджер создает новый ресурс.
И вот уже при создании нового ресурса срабатывает плагин, который просто наполняет этот новый ресурс блоками (заполняет тв поле blocklist). Если плагин видит, что создается ресурс с шаблоном 8 (к примеру это услуги) то он скопирует этот список с ресурса 56, где уже настроены блоки для услуг. Если не можем понять, какую именно страницу создает менеджер, то будет скопирован список блоков со страницы «Настройки», тоесть полный список и менеджер сам потом деактивирвует ненужное, расставит блоки в нужной очередности.
В итоге получается, что менеджер может:
— быстро создать страницу с уже заранее продуманными блоками под нее
— после создания изменить страницу как угодно, ведь скопировались абсолютно все блоки, просто они деактивированы. Ничто не мешает конкретно эту страницы «услуги» сделать совершенно другой и активировать на ней блок «слайдер» и блок «дополнительная форма обратной связи».
— изменить в какой-то момент настройки (перечень активных блоков) для тех же услуг (если смотреть на скрин то изменить блоки в ресурсе 53) и все создаваемые после этого страницы тоже изменятся.
Сам плагин очень примитивен.
<?php
switch ($modx->event->name) { 
    case 'OnDocFormSave':
        $template = $resource->get('template');
        switch ($template) {
            case '3': // продукция
                $example = 49;
                break;
            case '8': // услуги
                $example = 53;
                break;
            case '7': //новость
                $example = 56;
                break;
                      
            case '9': // типовые решения
                $example = 55;
                break;
                
            case '4': // инфо страница
                $example = 57;
                break;
                 
            case '19': // акции
                $example = 62;
                break;
            case '21': // реализованные проекты
                $example = 54;
                break;
            default:
            $example = 2;
                break;
        }

        if ( $resource->get('id')!=2 and $mode == 'new') {
           
            $where = array(
                'contentid' => $example
              , 'tmplvarid' => 3
            );
        $tv = $modx->getObject('modTemplateVarResource', $where);
        $value=  $tv->get('value');
           
            $resource->setTVValue('blockList', $value);
        }
        
    break;
}
Артур Шевченко
19 июня 2022, 23:32
1
+1
Правильно, мой косяк, я забыл написать преобразование в масив
{set $photo_collection = json_decode($item.id | resource : 'photo_collection', true)}
  {if $photo_collection}
     {foreach $photo_collection as $item}
        {set $collection = $item.collection | fromJSON}
        {foreach $collection as $el}
            {$el.image}
        {/foreach}
    
     {/foreach}
  {/if}
Артур Шевченко
19 июня 2022, 23:30
0
В чанке есть вот такое {$c['rate']} это не то?
Роман
19 июня 2022, 23:26
0
К сожалению так не получается, пробовал, все сложнее, второй foreach не выводит ничего,

{set $photo_collection = json_decode($item.id | resource : 'photo_collection', true)}
  {if $photo_collection}
     {foreach $photo_collection as $item}
        
        {foreach $item.collection as $el}
            {$el.image}
        {/foreach}
    
     {/foreach}
  {/if}
Если вывести из первого foreach $photo_collection
То такой массив там, и я хочу вытащить оттуда collection, в нем лежат изображения в формате json похоже, и вот это не получается
Array
(
    [0] => Array
        (
            [MIGX_id] => 1
            [colorName] => NERO / BLACK 
            [vendor] => L20085401
            [colorMarker] => black
            [collection] => [{"MIGX_id":"3","image":"2SoAetNZ.jpeg"},{"MIGX_id":"4","image":"5A3zbEBs.jpeg"},{"MIGX_id":"5","image":"5cy9U9im.jpeg"},{"MIGX_id":"1","image":"b2-G7nbg.jpeg"},{"MIGX_id":"2","image":"aR0FzIGA.jpeg"}]
            [collection_view_ro] => {"MIGX_id":"1","name":"chunk_photo_collection","use_as_fallback":"","value":"","clickaction":"","handler":"","image":"","idx":0,"_renderer":"this.renderChunk","selectorconfig":""}
            [_this.value] => 
            [collection_view] => 
        )

    [1] => Array
        (
            [MIGX_id] => 2
            [colorName] => BORDEAUX-FLUO ORANGE
            [vendor] => L20085414
            [colorMarker] => orange
            [collection] => [{"MIGX_id":"3","image":"Ryz-untQ.jpeg"},{"MIGX_id":"4","image":"-pXqJOEi.jpeg"},{"MIGX_id":"5","image":"H-7gDmzj.jpeg"},{"MIGX_id":"1","image":"AqeGW2OA.jpeg"},{"MIGX_id":"2","image":"8ElOkJNA.jpeg"}]
            [collection_view_ro] => 
            [_this.value] => 
            [collection_view] => 
        )

    [2] => Array
        (
            [MIGX_id] => 3
            [colorName] => Желтый
            [vendor] => L20085460
            [colorMarker] => neon
            [collection] => [{"MIGX_id":"1","image":"s_1c59AU.jpeg"},{"MIGX_id":"2","image":"2bvVS8Wo.jpeg"},{"MIGX_id":"3","image":"gkEqimIE.jpeg"}]
            [collection_view_ro] => 
            [_this.value] => 
            [collection_view] => 
        )

    [3] => Array
        (
            [MIGX_id] => 4
            [colorName] => Синий
            [vendor] => L20085408
            [colorMarker] => blue
            [collection] => [{"MIGX_id":"1","image":"1LIor5rA.jpeg"},{"MIGX_id":"2","image":"Y6geSNls.jpeg"},{"MIGX_id":"3","image":"J6SpPwLQ.jpeg"},{"MIGX_id":"4","image":"TXS7Rdsk.jpeg"}]
            [collection_view_ro] => 
            [_this.value] => 
            [collection_view] => 
        )

)
Артур Шевченко
19 июня 2022, 23:04
1
+1
{set $tvname = json_decode(1 | resource : 'migxtvname', true)}
  {if $tvname}
     {foreach $tvname as $item}
        {$item.title}
        {foreach $item.collection as $el}
            {$el.name}
        {/foreach}
     {/foreach}
  {/if}
Антон
19 июня 2022, 20:05
0
после переноса на хостинг в логах стал ругаться:
/home/httpd/vhosts/site.com/httpdocs/core/components/assetstv/elements/tv/input/assetstv.class.php 78
PHP warning: implode(): Invalid arguments passed
и после сохранения стал исчезать заполненный alt для изображений.
Giant Dad
19 июня 2022, 15:57
0
Так контекстов предполагается много, плюс самих шаблонов там дофига. Нужно какое-то более универсальное решение
Giant Dad
19 июня 2022, 15:56
0
Ну как в контенте, там может быть и дизайн будет другой. Там вообще предполагалось, что можно будет сделать на основе вот этой статьи. cat-art.ru/blog/multiyazyichnost-modx-revo Только без Babel.
Артур Шевченко
19 июня 2022, 10:12
0
Расскажи, пожалуйста подробнее про пункт 4 на какое событие у тебя плагин и что в нём? А то я думаю сделать так же и этот момент смущает, потому что не понимаю как подсунуть данные в форму редактирования из другого ресурса.
Александр Быковский
19 июня 2022, 08:29
0
Спасибо. Такой код рабочий
{set $chars = $characteristics | fromJSON}
{foreach $chars as $char}
	<div class="table-row">
		<div>{$char['title']}</div>
		<div>{$char['text']}</div>
	</div>
{/foreach}
Юрий
19 июня 2022, 00:03
0
Раздражение вызвала эта игра в версию 3.0. Принципиального — ноль, проблем с переходом — масса. Куча самодельных дополнений непонятно, обновятся авторами-самоделкиными или нет… То, что должно быть достоинством системы, стало ее роковым недостатком.
Новый сайт делать на MODx уже не рискну.
Артур Шевченко
18 июня 2022, 23:49
+1
Это очень похоже на JSON. Преобразуй в массив и будет работать.
Александр Быковский
18 июня 2022, 23:07
0

В целом данные отдаёт. Это я в VSCode вставил с форматированием
Александр Мельник
18 июня 2022, 19:22
+1
спасибо, что находите время и силы на улучшения. Это круто и заслуживает уважения.
Артур Шевченко
18 июня 2022, 15:19
0
Так делал
{$characteristics | print}
Что показывает?
Ivan
18 июня 2022, 10:57
0
Попробуйте в таблице config очистить value у поля session_handler_class и очистить кэш в папке core/cache. Тогда сессии будут храниться в файлах.

А вообще просто обратитесь к хостеру хотя бы с этой ошибкой
Пытаюсь удалить записи в modx_session но выскакивает ошибка #1036 — Table 'modx_session' is read only
joxi.ru/eAObzEjtGjMgG2
это явно нездоровое поведение.
Роман
18 июня 2022, 10:24
-1
Сделайте разные шаблоны, для разных контекстов.
{($_modx->config.cultureKey=='ru')? tpl.topMenuRU: tpl.topMenu}
&tpl=`tpl.topMenu`
Вообще я бы для pdoMenu использовал &tpl=`@INLINE `
Артур Шевченко
17 июня 2022, 22:45
0
Если у вас отличие только в контенте, то зачем понадобились контекст, почему не PolyLang?
Роман
17 июня 2022, 16:52
0
Посмотрите в конфиге mysql innodb_force_recovery = 1, нужно поменять на 0, либо проверьте, сколько свободного места на хостинге, может быть закончилось, и поэтому ничего не пишется.