Роман

Роман

С нами с 10 сентября 2018; Место в рейтинге пользователей: #1040
Роман
23 октября 2025, 07:34
0
на событие OnBeforeDocFormSave сработал этот вариант:
<?php
/**
 * Plugin: Unique URL Checker
 * Event: OnBeforeDocFormSave
 */

$resource = $scriptProperties['resource'];
if (!($resource instanceof modResource)) {
    return;
}

$mode = $scriptProperties['mode'];
$pagetitle = $resource->get('pagetitle');

// Генерируем базовый alias из pagetitle
$baseAlias = $resource->cleanAlias($pagetitle);

if (empty($baseAlias)) {
    return;
}

$context = $resource->get('context_key');
$parent = $resource->get('parent');
$resourceId = $resource->get('id');

$finalAlias = $baseAlias;
$counter = 1;
$maxAttempts = 100;

while ($counter <= $maxAttempts) {
    $criteria = [
        'alias' => $finalAlias,
        'context_key' => $context,
        'parent' => $parent,
        'id:!=' => $resourceId,
        'deleted' => false
    ];
    
    $existing = $modx->getCount('modResource', $criteria);
    
    if ($existing == 0) {
        break;
    }
    
    $finalAlias = $baseAlias . '-' . $counter;
    $counter++;
}

// Устанавливаем финальный alias
$resource->set('alias', $finalAlias);

if ($finalAlias != $baseAlias) {
    $modx->log(modX::LOG_LEVEL_INFO, 
        "Сгенерирован уникальный alias: {$finalAlias} (ресурс ID: {$resourceId})"
    );
}

return;
Роман
23 октября 2025, 07:20
0
вот ИИ предложил, сам не проверял:
<?php
/**
 * Plugin: Unique URL Checker
 * Event: OnDocFormSave
 * Description: Проверяет уникальность URL документа и добавляет цифры к alias при дублировании
 */

// Проверяем, что мы в контексте сохранения документа
if ($mode == modSystemEvent::MODE_NEW || $mode == modSystemEvent::MODE_UPD) {
    $resource = &$scriptProperties['resource'];
    
    // Пропускаем если это не обычный ресурс или если alias пустой
    if (!($resource instanceof modResource) || empty($resource->get('alias'))) {
        return;
    }
    
    // Получаем контекст и текущий alias
    $context = $resource->get('context_key');
    $originalAlias = $resource->get('alias');
    $currentAlias = $originalAlias;
    $parent = $resource->get('parent');
    
    // Исключаем текущий ресурс из проверки при обновлении
    $excludeId = $resource->get('id') ?: 0;
    
    $counter = 1;
    $maxAttempts = 100; // Защита от бесконечного цикла
    
    // Проверяем уникальность alias
    while ($counter <= $maxAttempts) {
        // Проверяем существование ресурса с таким alias в том же контексте и родителе
        $criteria = [
            'alias' => $currentAlias,
            'context_key' => $context,
            'parent' => $parent,
            'id:!=' => $excludeId,
            'deleted' => false
        ];
        
        $existingResource = $modx->getObject('modResource', $criteria);
        
        // Если ресурс с таким alias не найден - выходим из цикла
        if (!$existingResource) {
            break;
        }
        
        // Если нашли дубликат - добавляем цифру к alias
        if ($counter == 1) {
            $currentAlias = $originalAlias . '-' . $counter;
        } else {
            // Увеличиваем число в суффиксе
            $currentAlias = preg_replace('/-\d+$/', '-' . $counter, $originalAlias);
        }
        
        $counter++;
    }
    
    // Если alias изменился - сохраняем новый alias
    if ($currentAlias != $originalAlias) {
        $resource->set('alias', $currentAlias);
        
        // Добавляем сообщение в системный лог
        $modx->log(modX::LOG_LEVEL_INFO, 
            "Автоматически изменен alias ресурса {$resource->get('id')} с '{$originalAlias}' на '{$currentAlias}' для избежания дублирования"
        );
    }
}

return;
?>
Роман
11 ноября 2022, 16:26
0
Дарья, поищите в элементах чанк с названием `payBlock`
Роман
15 августа 2022, 14:35
0
а в вызове есть &includeTVs?
вот тут был вариант решения modx.pro/help/18517
сравните
Роман
15 августа 2022, 13:35
0
а если заменить *imgBlogDetails на +tv.imgBlogDetails?
Роман
21 июня 2022, 14:23
0
Никита, возможно будет работать инлайн вариант со скобками вида {{+}} Посмотри раздел «способы вызова чанков» docs.modx.pro/komponentyi/pdotools/obshhie-parametryi
Роман
21 июня 2022, 13:09
+1
а так? управление/отчеты/информация о системе — phpinfo():

еще по теме, скорее всего в инлайне не отрабатывают сниппеты, лучше делать отдельный чанк
Роман
30 июля 2020, 19:07
0
Спасибо за скорый ответ. феном — работает ок, но на 2-ой странице мне надо снова всем элементам раздать классы от 1 до 10..., затем также для остальных страниц, а их может быть много… и на каждой не обязательно 10 элементов, может 20, может 40 в зависимости от лимита… хочется найти какое-то универсальное решение
Роман
20 февраля 2020, 13:32
0
может в таком случае сгодится вот такой вариант, предложенный на просторах хабра пользователем AlexRas — qna.habr.com/q/288777.
Процитирую:
Делаете одно поле (это поле которое основное), делаете еще поле (это поле которое выводится внутри основного)
Внутри основного поля в конфигурацию добавляется «inputTV»:«image2» image — это название дополнительного поля которое нужно вывести внутри.
и выводите все вот так.
Первый вызов:
[[getImageList? tvname=`tv` tpl=`tpl`]]
Второй вызов в чанке tpl:
[[getImageList? value=`[[+image]]` tpl=`tpl2`]]
Роман
20 февраля 2020, 08:54
0
Сложно представить проект, возможно, я делал бы так: отель — это категория ресурсов, его дети — это сами ресурсы, к ним загружаем фото посредством migx и выводим например как слайдер, а по поводу 1-го, 2-х и более номеров — это отдельное тв.поле ресурса и сортировка по нему в дальнейшем если понадобится.
Роман
19 февраля 2020, 12:34
0
Посмотрите Migx.