Парсинг Google таблиц

Прошу помощи по снипету. Сделал вот такой костыль:
<?php
$idx = $modx->getObject('modTemplateVar', array('name' => 'idtab'))->getValue($modx->resource->get('id'));
$gid = $modx->getObject('modTemplateVar', array('name' => 'gid'))->getValue($modx->resource->get('id'));
$range = $modx->getObject('modTemplateVar', array('name' => 'range'))->getValue($modx->resource->get('id'));
$csv = file_get_contents('https://docs.google.com/spreadsheets/d/'.$idx.'/export?format=csv&gid='.$gid.'&range='.$range);
$csv = explode("\r\n", $csv);
$array = array_map('str_getcsv',$csv);

$htm .= '<table class="table table-striped"><tbody>';
$i=0;
unset($array[0]);
if (is_array($array) || is_object($array))
{ foreach ($array as $arr){
$i++;

$htm .= '<tr>';
$htm .= '<td scope="row">'.$i.'</td>';
foreach ($arr as $td) {
$htm .= '<td scope="row">'. $td .'</td>';
 }
$htm .= '</tr>';
}
$htm .= '</tbody></table>';
}
echo $htm;
Он работает и все устраивает. И все бы хорошо но мне нужно вызвать его на странице несколько раз. Подставить значение idtab, gid, range из нескольких ресурсов, т.е. на одном ресурсе вывести несколько листов google таблицы. И тут мои «познания» закончились. Попробовал сделать так:
[[pdoResources?
            &parents=`0`
            &resources=`6,331,458,459,460`
            &tpl=`isp`
            &limit=`30`
        ]]
где чанк isp имеет содержимое:
<hr>
<h1>[[+pagetitle]]</h1>

[[Google-Shits?]]
<hr>
Но он подтягивает одну таблицу 5 раз. Как это исправить?
Georg
03 марта 2022, 11:10
modx.pro
1
410
0

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

Артур Шевченко
03 марта 2022, 22:32
+1
Как это исправить?
Сделать idtab, gid, range параметрами сниппета. Тогда сниппет будет вызываться так
[[!Google-Shits?
&idtab=`value`
&gid=`value`
&range=`value`
]]
Ну а сами параметры, я бы запихнул в migx.
Вместо этого нужно оставить только параметры.
$idx = $modx->getObject('modTemplateVar', array('name' => 'idtab'))->getValue($modx->resource->get('id'));
$gid = $modx->getObject('modTemplateVar', array('name' => 'gid'))->getValue($modx->resource->get('id'));
$range = $modx->getObject('modTemplateVar', array('name' => 'range'))->getValue($modx->resource->get('id'));
    Georg
    04 марта 2022, 10:21
    0
    Спасибо за ответ. Я не хотел использовать migx, но где моя ошибка понял
      Артур Шевченко
      04 марта 2022, 14:11
      +1
      Можно под каждую таблицу создать отдельное ТВ или по три ТВ, но по-моему лучше обойтись одним MIGX.
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    3