Всего 125 963 комментария

Роман
16 мая 2022, 10:20
0
Если правильно понял:
Можно поместить контент в отдельный чанк, и вызывать OnChunkFormRender.
Если нужно чтобы уже вся страница создалась, то вызов OnWebPagePrerender

А так что вы хотите сделать? Какая конечная цель?
Александр Мельник
16 мая 2022, 08:50
0
время ответа сервера не идеально, но не критично.
Я использую такую блочную систему только если руководство требует ручного управления блоками на странице. Это нужно далеко не везде, чаще всего макеты страниц статичны.
Артур Шевченко
16 мая 2022, 00:47
0
Если нужна будет помощью, обращайся, чем смогу помогу.
Алексей Смирнов
15 мая 2022, 23:22
0
А мне вот тож сдать еще проект и допилить более четкую инструкцию.
Потому как в твоем решении я увидел еще один сигнал об удобстве управления контентом.
В общем, учитывая кол-во появляющихся «хотелок» то развитие тем, конструкторов очень даже интересная и востребованная тема.
Будем ее развивать. Хочется использовать готовое решение в доль и поперек, а не только как сборка-modx (не буду называть сайты которые это предлагают). :)
Артур Шевченко
15 мая 2022, 22:30
0
Лёш, чес слово, я найду время потестить твой доп, щас проект доделаю и найду)))
Артур Шевченко
15 мая 2022, 22:29
0
Ты так и не сказал, если блоков много время ответа сервера не страдает?
Vladimir
15 мая 2022, 20:22
0
Пробовал так
switch ($modx->event->name) {
case 'OnWebPageComplete':
//Получаем доступ к готовому DOM дереву
$output = $modx->resource->getContent();
$modx->log(1, output );
break;
}

Но получаю не полностью сам контент страницы, а часть покрайней мере так в консоли, видел в консоле 1 вызов [[++settings_version]]

То есть какой-то сжатый кусок, сама страница дефолтная от установки modx'a, но получаю сжатый такой кусок в таком виде. Сохранил вывод с
$modx->resource->getContent();
в файл.

<p>You have successfully installed MODX Revolution [[++settings_version]]!</p>
<p>Now that MODX is installed you can login to the manager to create your templates, manage content and install third party extras to add functionality to your website.</p>
<h2>New to MODX?</h2>
<p>Pages on a MODX site are called <a href="https://docs.modx.com/current/en/building-sites/resources">Resources</a>, and are visible on the left-hand side of the manager in the Resources tab. Resources can be nested under other resources, making it easy to create a tree of resources. There are different types of resources for different use cases.</p>
<p>Building your website is done through a combination of <strong>Templates</strong>, <strong>Template Variables</strong>, <strong>Chunks</strong>, <strong>Snippets</strong> and <strong>Plugins</strong>. Collectively these are known as <strong>Elements</strong>, and can also be found in the left-hand side of the manager, in the Elements tab.</p>
<p><a href="https://docs.modx.com/current/en/building-sites/elements/templates">Templates</a> contain the outer markup of any page. Each resource can only be assigned to a single template at a time. By adding <a href="https://docs.modx.com/current/en/building-sites/elements/template-variables">Template Variables</a> to a template, you can add custom fields for any resource using that particular template.</p>
<p>With <a href="https://docs.modx.com/current/en/building-sites/elements/chunks">Chunks</a> you can share parts of the markup, such as a header, across different templates. <a href="https://docs.modx.com/current/en/building-sites/elements/snippets">Snippets</a> are pieces of PHP that return dynamic content, such as summaries of other resources or the current date. With snippets, you will often use Chunks to mark up the pieces of content it returns, instead of mixing the PHP and HTML.</p>
<p>Finally, <a href="https://docs.modx.com/current/en/extending-modx/plugins">Plugins</a> enable more advanced features by hooking into the extensive events system provided by MODX.</p>
<p>To learn more about MODX, be sure to check out the <a href="https://docs.modx.com/current/en/getting-started">Getting Started</a> section in the official documentation.</p>
А это получается что я получаю именно контент самого ресурса а не контент шаблона перед рендером
Alexey
15 мая 2022, 19:22
0
Получается, что так. Но с другой стороны, почему всегда стопроцентно загружаются всё поля, когда кликаешь тут — skrinshoter.ru/s/150522/s76QqLsq? Ещё одна непонятка.
Роман
15 мая 2022, 18:19
0
Правильно ли я понял, что данные не успевают загрузится, а грид уже сформировался?
Алексей Смирнов
15 мая 2022, 18:06
0
Вы сейчас прям описываете работу компонента MagicThemes.
Где весь описываемый функционал есть и в удобном варианте.
Чуть по другому работает, но суть такая же.
Alexey
15 мая 2022, 17:48
0
В качестве эксперимента поменял конфиг комбобокса, который подтягивает данные с процессора, на локальный:

CalcPackage.combo.TemplatePage = function (config) {
    config = config || {};
    Ext.applyIf(config, {
        store: new Ext.data.ArrayStore({
            id: 0
            ,fields: ['unit','display']
            ,typeAhead: true
            ,typeAheadDelay: 2000
            ,preventRender: true
            ,triggerConfig: {
                tag: 'span',
                cn: [
                    {
                        tag: 'div',
                        cls: 'x-form-trigger',
                        trigger: ''
                    },
                ]
            }
            ,data: [
                ['1','listovki']
                ,['2','vizitki']
            ]
        })
        ,mode: 'local'
        ,displayField: 'display'
        ,hiddenName: 'display'
        ,valueField: 'unit'
    });
    CalcPackage.combo.TemplatePage.superclass.constructor.call(this, config);
};
Ext.extend(CalcPackage.combo.TemplatePage, CalcPackage.combo.ComboBox);
Ext.reg('calcpackage-combo-template-page', CalcPackage.combo.TemplatePage);

Проблема у соответствующего поля исчезла, как страницу контроллера не перезагружал, выбранное поле выводится.

Общие выводы:
в таблице БД, которую выводит грид, значение поля (на которое установлен комбобокс) хранится в цифровом виде. При загрузке страницы процессор дергает значение поля, затем комбобокс — для данного примера — обрабатывает ЛОКАЛЬНО это значение, подсовывая строку из массива — skrinshoter.ru/s/150522/fUKjGSB6.

Если же комбобокс настроен на работу со своим процессором, то — получив значение поля из процессора грида — он отправляет запрос к этому своему процессору, ждет и выводит ответ в гриде. И вот на этой дельте между получением значения из основного процессора, отправкой запроса и получением ответа от своего процессора всё плохое и происходит.

В итоге, так и непонятно, что делать в этом случае. Не будешь ведь добавлять js-костыль, который после полной загрузки страницы будет генерировать событие click по этой кнопке skrinshoter.ru/s/150522/s76QqLsq
Игорь
15 мая 2022, 16:50
0
Спасибо за ответы. Все получилось )
Alexey
15 мая 2022, 16:08
+2
В шаблоне нужной страницы должен быть вызов сниппета

[[getImageList? &tpl=`fancybox`&docid=`1`&tvname=`fancyboxTv`&toSeparatePlaceholders=`img`]]

с параметром &docid=`1`, где 1 — id главной страницы. <cut/>

ЗЫ. Упс — опоздал с советом))
Роман
15 мая 2022, 16:07
+1
Ну конечно, docid обязательно нужно указать. А так по умолчанию он подтягивает с текущей страницы.
Игорь
15 мая 2022, 16:04
+3
Может быть как-то в вывоз надо указать что хотим показывать картинки с id =1?

[[getImageList? &docid=`1` &tpl=`fancybox`&tvname=`fancyboxTv`&toSeparatePlaceholders=`img`]]
Александр Мельник
15 мая 2022, 12:51
0
внутрь чанка пробрасывается информация о блоке. чтобы уже внутри чанка можно было разобраться, откуда грузить данные.
Александр Мельник
15 мая 2022, 12:49
0
<?php
$fqn = $modx->getOption('pdoFetch.class', null, 'pdotools.pdofetch', true);
$path = $modx->getOption('pdofetch_class_path', null, MODX_CORE_PATH . 'components/pdotools/model/', true);
if ($pdoClass = $modx->loadClass($fqn, $path, false, true)) {
    $pdoFetch = new $pdoClass($modx, $scriptProperties);
} else {
    return false;
}


$blockList = $modx->resource->getTVValue("blockList");
$blockList = json_decode($blockList ,true);

$html = "";
foreach ($blockList as $key => $block){
    if (empty($block['chunkName']) or $block['isActive'] != 'Да')
        continue;

    $chunk = '@FILE blocks/'.$block['chunkName'];

    $html .= $pdoFetch->getChunk($chunk, $block);
}

return $html;
примерно так.
Артур Шевченко
15 мая 2022, 12:26
0
Почти как у меня))) И я пожалуй спионерю у тебя пару идей))) Добавлю скриншоты и сделаю заготовки для шаблонов. У тебя твой сниппет который всё это разбирает не тормозит загрузку страницы? В моем варианте происходит прегенерация кода шаблона он сохраняется в файл и потом парсится как обычный шаблон, это здорово, некоторые страницы получаются статичными, но вот обновлять их может оказаться ресурсозатратно. Можешь показать код сниппета?