Как в плагине получить все блоки PageBlocks вместе?

Может кто-то подсказать, как правильно написать плагин, который срабатывает на сохранение документа и записывает количество символов всех блоков PageBlocks в TV-переменную «symbols»?

Этот код возвращает «0»:

<?php

$contentblocks = $modx->getService('PageBlocks', 'PageBlocks', MODX_CORE_PATH . 'components/pageblocks/model/');
$contentblocks = strlen(strip_tags($contentblocks));

switch ($modx->event->name) {
    case 'OnDocFormSave':
        $resource->setTVvalue('symbols', $contentblocks);
        break;
}
Evgeny
19 июля 2022, 14:26
modx.pro
470
0

Комментарии: 2

Артур Шевченко
19 июля 2022, 14:36
0
Я думаю надо изучить схему компонента, получить методом getIterator() все блоки привязанные к текущему ресурсу, потом в цикле получить у каждого блока поле с контентом, потом вырезать тэги и посчитать количество символов, путём инкрементирования какой-нибудь переменной, например, $count. А потом записать это значение в TV symbols.
    Evgeny
    21 июля 2022, 11:39
    0
    Изучил, вроде делаю все как надо, в снипете конструкция работает, а в плагине нет… понять не могу почему.

    <?php
    $contentblocks = $modx->getService('PageBlocks', 'PageBlocks', MODX_CORE_PATH . 'components/pageblocks/model/');
    $blocks = $contentblocks->getCollection('pageBlock');
    
    
    $output = '';
    foreach ($blocks as $block) {
        $output .= $modx->getChunk($block->chunk, $block->values);
    }
    
    $count = strlen(strip_tags($output)); 
     
    switch ($modx->event->name) {
        case 'OnDocFormSave':
            $resource->setTVvalue('symbols', $count);
            break;
    }
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    2