Павел Романов

Павел Романов

Был в сети 30 июля 2026, 15:23
Заказы принимаю
Если $data — массив с номером, товарами и датой, можно так:
<?php
$pdo = $modx->getService('pdoTools');
$data['count_products'] = count($data['products']);
return $pdo->getChunk('pdfHtmlTemplate', $data);

В чанке pdfHtmlTemplate:
{$num}
{$date}
{$products}
{$count_products}
Добавьте поле в таблицу (например, new_field) и сделайте плагин на событие OnMODXInit
<?php
$modx->loadClass('msProduct');
$modx->map['msProduct']['fields']['new_field'] = '';
$modx->map['msProduct']['fieldMeta']['new_field'] = array(
    'dbtype' => 'varchar',
    'phptype' => 'string',
    'precision' => '190',
    'null' => false,
    'default' => '',
);

Естественно, тип данных может быть разным.
Примеры полей можно посмотреть в файле core/components/minishop2/model/minishop2/mysql/msproduct.map.inc.php
Они шлют прямыми запросами на assets/components/ajaxform/action.php.
Сделайте сниппет chkbot:
<?php
$_SESSION['afchk'] = 1;
return true;

Добавьте его в &preHooks:
[[!AjaxForm?
&preHooks=`chkbot`
&hooks=`spam,email`
...
]]

А в файле assets/components/ajaxform/action.php на 23 строке добавьте:
if($_SESSION['afchk'] != 1){
    echo  $AjaxForm->success('Сообщение успешно отправлено.');
    die();
}
unset($_SESSION['afchk']);
Либо добавьте свой пакет в системную настройку extension_packages, либо используйте параметр loadModels.
И если в базе нет поля publishedon, то укажите сортировку по существующему полю:

{'pdoResources' | snippet : [
    'loadModels' => 'название пакета',
    'class' => 'Cities',
    'sortby' => '{ "id":"DESC" }'
]}
Да, естественно. Можно добавить в скрипт:
<?php
$tvid = 123; // ID TV-шки
$vendor = 'Производитель' // Название производителя
$template = 6; // ID шаблона товара

if(!function_exists('removeDirectory')){
    function removeDirectory($dir){
        if ($objs = glob($dir."/*")) {
            foreach($objs as $obj) {
                is_dir($obj) ? removeDirectory($obj) : unlink($obj);
            }
        }
        rmdir($dir);
    }    
}

$sql = "SELECT * FROM {$modx->getTableName('modTemplateVarResource')} WHERE tmplvarid = {$tvid}"; 
$q = $modx->prepare($sql);
$q->execute();
$tvs = $q->fetchAll(PDO::FETCH_ASSOC);
foreach($tvs as $tv) {
    if($tv['value'] != $vendor) continue; // если название не то, пропускаем
    if(!$resource = $modx->getObject('modResource', array('id' => $tv['contentid'], 'template' => $template)) continue; // если нет ресурса с таким ID и шаблоном, пропускаем
    $dir = MODX_ASSETS_PATH.'images/products/'.$tv['contentid'].'/';
    removeDirectory($dir);    
    $resource->remove(); // удаляем ресурс
}
Что-то типа этого (бэкап базы только сделайте):
<?php
$tvid = 123; // ID TV-шки
$vendor = 'Производитель' // Название производителя
$template = 6; // ID шаблона товара

$sql = "SELECT * FROM {$modx->getTableName('modTemplateVarResource')} WHERE tmplvarid = {$tvid}"; 
$q = $modx->prepare($sql);
$q->execute();
$tvs = $q->fetchAll(PDO::FETCH_ASSOC);
foreach($tvs as $tv) {
	if($tv['value'] != $vendor) continue; // если название не то, пропускаем
   	if(!$resource = $modx->getObject('modResource', array('id' => $tv['contentid'], 'template' => $template)) continue; // если нет ресурса с таким ID и шаблоном, пропускаем
	$resource->remove(); // удаляем ресурс
}
Попробуйте так:
[[getImageList?
    &docid=`123` 
    &where=`{ "part-name:LIKE":" %***% " }` 
    &tpl=`tpl.part`
]]
123 — ID ресурса с TV migxTable
*** — критерий для отбора в поле Название

Чанк tpl.part
<div class="part-data">
  <h2>[[+part-name]]</h2>
  <p>Изображение заведения: <img src="[[+part-image]]"></p>
  <p>Адрес заведения: [[+part-adress]]</p>
</div>