Финансовая поддержка VPS, бесплатные дополнения и docs Донаты оплачивают сервер и двигают бесплатные дополнения MODX и документацию. Поддержать

Всего 126 129 комментариев

Сергей
Сергей
Почему может не подхватывать системную настройку ec_mail_manager? Подставляет emailsender, а при указании mailManager подхватывает его верно.

PS: перестало подхватывать сразу после обновления пакета до последней версии, до этого работало.
Александр Туниеков
Александр Туниеков
Поправил немного
<?php
$id = $input;
if (empty($id)) {
    $resource = $modx->resource;
} else {
    $resource = $modx->getObject('modResource', ['id' => intval($id)]);
}
if(!$resource) return [];

$out = $resource->toArray();
// чтоб страница не упала в рекурсию
unset($out['content']);

$id = $resource->id;
$sql = "
    SELECT IF(tvr.value != \"\", tvr.value, tv.default_text) AS tv_value, tv.name, tv.type
    FROM {$modx->getTableName('modTemplateVarResource')} tvr
    LEFT JOIN {$modx->getTableName('modTemplateVar')} tv
    ON tv.id = tvr.tmplvarid
    LEFT JOIN {$modx->getTableName('modTemplateVarTemplate')} tvt
    ON tvt.tmplvarid = tvr.tmplvarid 
    WHERE tvr.contentid = {$id} AND tvt.templateid = {$resource->template}
";
// $modx->log(1,$sql);
$q = $modx->prepare($sql);
$q->execute();
$tvs = $q->fetchAll(PDO::FETCH_ASSOC);

foreach($tvs as $tv){
    switch($tv['type']){
        case 'text': case 'textarea':
            $out[$tv['name']] = $tv['tv_value'];
        break;
        default:
            $out[$tv['name']] = $resource->getTVValue($tv['name']);
    }
}
return $out;
Александр Туниеков
Александр Туниеков
Я тут решил немного помочь и сделал сниппет
res
<?php
$id = $input;
if (empty($id)) {
    $resource = $modx->resource;
} else {
    $resource = $modx->getObject('modResource', ['id' => intval($id)]);
}
if(!$resource) return [];

$out = $resource->toArray();
$id = $resource->id;
$sql = "
    SELECT IF(tvr.value != \"\", tvr.value, tv.default_text) AS tv_value,tv.name
    FROM {$modx->getTableName('modTemplateVarResource')} tvr
    LEFT JOIN {$modx->getTableName('modTemplateVar')} tv
    ON tv.id = tvr.tmplvarid
    LEFT JOIN {$modx->getTableName('modTemplateVarTemplate')} tvt
    ON tvt.tmplvarid = tvr.tmplvarid 
    WHERE tvr.contentid = {$id} AND tvt.templateid = {$resource->template}
";
// $modx->log(1,$sql);
$q = $modx->prepare($sql);
$q->execute();
$tvs = $q->fetchAll(PDO::FETCH_ASSOC);

foreach($tvs as $tv){
    $out[$tv['name']] = $tv['tv_value'];
}
return $out;
Использовать
{set $res = 1 | res}
<pre>{$res | print_r}</pre>
Расчитанно, что все tv текстовые. Если надо чтоб tv обрабатывались перед помещением в массив, то надо вызывать getTVValue.
foreach($tvs as $tv){
    $out[$tv['name']] = $resource->getTVValue($tv['name']);
}
Артур Шевченко
Артур Шевченко
Данная настройка ограничивает максимальное количество одной позиции товара, а не количество позиций. Если нужно, чтобы в корзине было не больше одного товара — пиши плагин на событие msOnBeforeAddToCart.