Konstantin

Konstantin

С нами с 24 декабря 2022; Место в рейтинге пользователей: #6488
Артур Шевченко
06 августа 2024, 23:31
1
0
создатели движка настоятельно рекомендуют это сделать
Что мешает сделать так же (см. под заголовком Protect the Core and Other Locations) со второй версией?

Я не отрицаю наличие проблемы, просто не знаю как её решить со стороны компонента.
Павел Романов
10 января 2024, 12:36
1
+1
В колонке назовите это поле как-нибудь иначе:


В рендере используйте реальное имя.
Если pdoTools установлен и поле называется «project», то так:
Артур Шевченко
14 ноября 2023, 11:22
1
+2
Ничто там непонятного? Вот был у тебя вызов
{'!AjaxForm' | snippet: [
'validate' => 'name:required,phone:required',
'successMessage' => 'Форма отправлена!',
'hooks' => 'email',
'emailTo' => 'some@email.ru',
'emailTpl' => 'defaultEmail',
'form' => 'defaultForm'
]}
Ты копируешь в файл core/components/sendit/presets/sendit.inc.php
return [
    'default' => [
        'validate' => 'name:required,phone:required',
        'successMessage' => 'Форма отправлена!',
        'hooks' => 'email',
        'emailTo' => 'some@email.ru',
        'emailTpl' => 'defaultEmail',
        ]
]
А вместо вызова сниппета вставляешь саму форму, которой добавляешь два атрибута data-si-form=«defaultForm», data-si-preset=«default». Всё форма работает. Согласен непривычно, но ничего сложного. Возможно стоит в доку добавить раздел Миграция с AjaxForm.

А по фильтрам, там SendIt идёт как зависимость, но сниппеты будут вызываться классическим способом)))
Сергей Карпович
28 сентября 2023, 13:50
1
0
В итоге порядок действий
1. в Collums нужно создать отдельное поле для рендера.
2. В нем активируем this.renderChunk и в renderChunk template вызываем созданный сниппет
Типо такой:
[[migxIDtoPagetitle?data=`[[+players]]` &chtougodno=`[[+MIGX_id]]` ]]
3. И код сниппета migxIDtoPagetitle: modx.pro/help/6945#comment-136437
Alexey
13 января 2023, 07:45
1
+1
Попробуй так:

$modx->log(modX::LOG_LEVEL_ERROR, print_r($dt, 1));

Это вариант для логирования массива
Fidst
04 декабря 2020, 10:52
1
0
Решено. Надо в /rest создать .htaccess(копия корневого .htaccess) и туда вставить код из шага 2
Евгений Webinmd
20 января 2020, 21:29
3
+3
<img src="{('img/'~$item.image) | phpthumbsup : 'w=240&h=240&zc=1'}">
Павел Романов
02 апреля 2019, 20:28
1
+1
Создайте плагин, в котором получайте значение TV и удаляйте директорию.
Если на удаление ресурса, то повесьте плагин на событие OnDocFormDelete, если на очистку корзины, то на OnBeforeEmptyTrash.

В первом случае есть объект ресурса и значение его TV можно получить через:
$resource->getTVValue('tvname');

Во втором — есть массив ID удаляемых ресурсов, которые можно использовать для получения объектов и дальше как в первом варианте.
Дмитрий Мансуров
26 марта 2019, 02:40
1
0
Я дописал и поправил ваш код.
Теперь он не путается со сниппетом localizator и дружит с ТВ полями
Работает так
{9 | locfield : 'tv_name'}
Можно использовать id tv поля, можно имя (видно из кода)
Запилил я это все в плагин (проверено)
<?php

/** @var modX $modx */
switch ($modx->event->name) {
    case 'pdoToolsOnFenomInit':
        /** @var Fenom $fenom
            Мы получаем переменную $fenom при его первой инициализации и можем вызывать его методы. 
            Например, добавим модификатор вывода имени домена сайта из произвольной ссылки.
        */
        $pdo = $modx->getService('pdoTools');

        // localizator
        $fenom->addModifier('locfield', function ($id, $field = null) use ($pdo, $modx) {
            $pdo->debugParserModifier($id, 'locfield');
            
            /** @var modResource $resource */
            if (empty($id)) {
                $resource = $modx->resource;
            } elseif (!is_numeric($id)) {
                $field = $id;
                $resource = $modx->resource;
            } elseif (!$resource = $pdo->getStore($id, 'resource')) {
                $resource = $modx->getObject('modResource', $id);
                $pdo->setStore($id, $resource, 'resource');
            }
            
            $key =  $modx->getOption('cultureKey');
            if( $modx->getOption('cultureKey') != 'ru' ) {
                $q = $modx->newQuery( "localizatorContent" );
                $q->where( array( "`resource_id` = '" . $id . "'", "`key` = '" . $key . "'" ) );
                $q->select( array( $field ) );
                $s = $q->prepare();  // print $q->toSQL(); die;
                $s->execute();
                $array = $s->fetch(PDO::FETCH_ASSOC);
                $field_value = $array[$field];
                if(empty($field_value)){
                    if(is_numeric($field)){
                        $tvId = intval($field);
                    }else{
                        $tvObj = $modx->getObject('modTemplateVar', array('name' => $field));
                        $tvId = $tvObj->get('id');
                    }
                    
                    $q = $modx->newQuery( "locTemplateVarResource" );
                    $q->where( array( "`contentid` = '" . $id . "'", "`key` = '" . $key . "'", "`tmplvarid` = '" . $tvId . "'" ) );
                    $q->select(  'value'  );
                    $s = $q->prepare();   
                    $s->execute();
                    $array = $s->fetch(PDO::FETCH_ASSOC);
                    
                    return $array['value'];
                }else{
                    return $field_value;
                }
                
            }
            
            $output = '';
            if (!empty($resource)) {
                if (!empty($field)) {
                    if (strtolower($field) == 'content') {
                        $output = $resource->getContent();
                    } else {
                        $output = $resource->get($field);
                        if (is_null($output)) {
                            $output = $resource->getTVValue(preg_replace('#^tv\.#i', '', $field));
                        }
                    }
                } else {
                    $output = $resource->toArray();
                }
            }
            $pdo->debugParserModifier($id, 'locfield');
            return $output;
        });
        break;
}
Галочку
pdoToolsOnFenomInit
не забудьте

И для страждущих getImageList (проверено)
[[getImageList?  &tpl=`why_we.tpl` &value=`[[*why_we]]`]]
или даже так, когда данные в другом ресурсе (не успел проверить, но вроде должно)
{'getImageList' | snippet : [
    'tpl' => 'why_we.tpl',
    'value' => (9 | locfield : 'tv_name')
]}
Баха Волков
18 июля 2018, 10:48
1
0
а для строки в столбцах Collection помимо сниппета, еще добавил Collections.renderer.image
Не нужно.

Сделать нужно так,
<?php
$obj = json_decode($value);

return '<img src="stock-photo/' . $scriptProperties['row']['id'] . '/' . $obj[0]->image . '" />';
ну или как я написал выше