Всего 123 794 комментария

Сергей Карпович
26 мая 2023, 14:36
0
Спасибо, вроде бы то что нужно.
Подскажите, как передать в чанк ID ресурса с которого отображется фото, что бы путь корректно прописать, а то в [[+image]] приходит не полный путь а только название файла
Павел Романов
26 мая 2023, 14:19
+2
Попробуйте сделать такой сниппет:
<?php
$totalVar = $modx->getOption('totalVar', $scriptProperties, 'total');
$limit = $modx->getOption('limit', $scriptProperties, 10);
$offset = $modx->getOption('offset', $scriptProperties, 0);
$sortby = $modx->getOption('sortby', $scriptProperties, 'MIGX_id');
$sortdir = $modx->getOption('sortdir', $scriptProperties, 'DESC');
$docid = $modx->getOption('docid', $scriptProperties, $modx->resource->get('id'));
$docid = str_replace(' ', '', $docid);

$table = $modx->getOption('table_prefix').'site_tmplvar_contentvalues';
$sql = "SELECT * FROM {$table} WHERE `contentid` IN ({$docid}) AND `tmplvarid` = '{$tvId}'";
$q = $modx->prepare($sql);
$q->execute();
$tvs = $q->fetchAll(PDO::FETCH_ASSOC);

$array = array();
foreach($tvs as $tv){
   	$a = json_decode($tv['value'], 1);
   	foreach($a as $i){
   	    $array[] = $i;
   	}
}
$modx->setPlaceholder($totalVar, count($array));
function sorter($key) {
    return function ($a, $b) use ($key) {
        return strnatcmp($a[$key], $b[$key]);
    };
}
usort($array, sorter($sortby));
$sortdir == 'DESC' ? krsort($array) : ksort($array);
$array = array_slice($array, $offset, $limit);
foreach($array as $item){
    $out .= $modx->getChunk($tpl, $item);
}
return $out;

И используйте его в pdoPage:
[[!pdoPage?
    &element=`SnippetName`
    &tvId=`43` // ID TV "gallery"
    &docid=`18,38,59,46` // ID ресурсов
    &limit=`12`
    &tpl=`tpl-gallery`
]]
[[!+page.nav]]
Денис Усманов
26 мая 2023, 11:05
0
Всё равно тут поясню зачем) Затем, что бы Minishop2 воспринимал поле count как DECIMAL а не INT.
Александр
26 мая 2023, 11:02
+1
Не понял зачем плагин, я делал без него меняя класс корзины и JS. Вообще ничего вроде больше не трогал. Отлично работает. Только обычно когда реализовывается добавление дробного кол-ва товаров нужно отображать в миникорзине(если такая есть) не кол-во товаров всего, а кол-во позиций в корзине.

UPD: Понял зачем плагин. Закинул клиенту где делал такой функционал :)
Ivan
26 мая 2023, 09:40
0
В общем они исправили проблему
Александр Мельник
26 мая 2023, 07:47
0
Вы ведь сделали два разных шаблона, верно?
Один для списка новостей, второй для детальной новости?
В первом вызываете pdoresources а во втором НЕ вызываете его, а просто обращаетесь к полям ресурса через
[[*pagetitle]] [[*content]] и так далее?

а то сложилось чувство, что вы либо одинаковый шаблон назначаете как списку новостей так и отдельной новости, либо же шаблоны разные, но и в том и другом вызывается pdoresources.
Andrew
25 мая 2023, 22:37
0
Могу ошибаться, но где-то читал что так
<a href="[[+uri]]">Подробнее</a>
нужно делать в EVO, а вот так
<a href="[[~[[+id]]]]">Подробнее</a>
в REVO. Не судите строго могу ошибаться.
Andrew
25 мая 2023, 22:20
0
Может быть я что то не так делаю, т.к. с модх только начал знакомиться.
Создал чанк vnewstpl с содержимым
<section class="news">
    <div class="container">
        <div Class="News-one-post">
            <div class="news-title">
                
                    <div class="news-data"><i class="icon-calendar">[[+publishedon:date=`%d.%m.%Y`]]</i>
                    </div>
                        <div class="news-media">
                          [[+tv.videonewsTV:phpthumbof=`w=120&h=120`]]"
                            <div class="news-one-news"><a href="[[~[[+id]]]]">[[+pagetitle]]</a>
                    
                            </div>
                    
                                <p><a href="[[~[[+id]]]]">[[+introtext]]</a> </p>
                        </div>
               
                    <div class="mask-image"><a class="info" href="[[~[[+id]]]]">подробнее</a>
                    </div>
            </div>
        </div>
    </div>

</section>
Создал доп поле videonewsTV
Сделал шаблон Видео:
[[$HEAD]]
<body>

[[$HEADER]]
[[$nav_item]]
<!-- Страница новостей-->

[[pdoResources?
	&tpl=`vnewstpl`
	&parents=`3`
	&depth=`0`
	&includeTVs=` videonewsTV`
	&includeContent=`2`
]]
[[$FOOTER]]
Присвоил ресурсу Видео шаблон видео и в настройках обозначил его как контейнер.
Создал в разделе видео несколько документов. Теперь по ссылке Видео отображается лента новостей, но при переходе в подробно все равно отображается лента новостей, а не новость детально.
Andrew
25 мая 2023, 22:12
0
<section class="news">
    <div class="container">
        <div Class="News-one-post">
            <div class="news-title">
                
                    <div class="news-data"><i class="icon-calendar">[[+publishedon:date=`%d.%m.%Y`]]</i>
                    </div>
                        <div class="news-media">
                          [[+tv.newsTV:phpthumbof=`w=120&h=120`]]"
                            <div class="news-one-news"><a href="[[~[[+id]]]]">[[+pagetitle]]</a>
                    
                            </div>
                    
                                <p><a href="[[~[[+id]]]]">[[+introtext]]</a> </p>
                        </div>
               
                    <div class="mask-image"><a class="info" href="[[~[[+id]]]]">подробнее</a>
                    </div>
            </div>
        </div>
    </div>

</section>
При переходе в детальную новость меняется ссылка, но содержимое страницы тоже самое.
Страница с новостями trksever/videonews/
При переходе на детальную trksever/videonews/v2.html. Но содержимое тоже все новости лентой.
Andrew
25 мая 2023, 22:04
0
Ни так ни так не работает. Открывает страницу со всеми новостями. Причем изменяя адрес ссылки.
Павел Романов
25 мая 2023, 19:04
0
Используйте вставку кода, а то теги съедает:


Вывод ссылки в чанке должен быть таким:
<a href="[[+uri]]">Подробнее</a>
или таким:
<a href="[[~[[+id]]]]">Подробнее</a>
Dan
Dan
25 мая 2023, 14:18
0
Вывод чего? В контенте ресурса у меня просто рандомный набор слов и слова из words плагин удаляет внутри контента.
Евгений
25 мая 2023, 14:16
0
вывод через разделитель или по умолчанию?
Dan
Dan
25 мая 2023, 13:38
0
Я у себя протестил, такой код норм чистит. Вы после сохранения страницу ресурса обновите в админке и увидите, что слова удалились из контента.
<?php
switch ($modx->event->name) {
        case 'OnDocPublished':
        case 'OnBeforeDocFormSave':
        case 'OnDocFormSave':
        $res = $modx->getObject('modResource', 1);
        $words = json_decode($res->getTVValue('words'), true);
           
        $content = $resource->get('content');
        $pattern = '/(?:' . join('|', $words) . ')/i';
        $content = preg_replace($pattern, '', $content);
        
        $resource->set('content', $content);
        $resource->save();
        break;
              
}
Евгений
25 мая 2023, 12:47
0
рабочий плагин строка в нем выглядит так если слова руками вписывать
$words = array('word1,word2`)
Евгений
25 мая 2023, 11:36
0
<?php
switch ($modx->event->name) {
        case 'OnDocPublished':
        case 'OnBeforeDocFormSave':
        case 'OnDocFormSave':
            if ($resource->get('template') == 27 && !$resource->get('content')) $resource->set('published', 0);
$res = $modx->getObject('modResource', 11);
$words = $res->getTVValue('words');
$modx->log(1, print_r($words,1));
           
            $content = $resource->get('content');
            $pattern = '/(?:' . join('|', $words) . ')/i';
            $content = preg_replace($pattern, '', $content);
            
            $resource->set('content', $content);
            $resource->save();
        break;
              
}
вот так выводит, надо по и дее без ковычек и в ...
["testx","testy"]

ну и само собой слова не чистятся
на coloricker плагин ругался я его отключил

[2023-05-25 11:39:37] (ERROR @ /var/www/www-root/data/www/.ru/core/cache/includes/elements/modplugin/59.include.cache.php: 9) [«testx»,«testy»]
[2023-05-25 11:39:37] (ERROR @ /var/www/www-root/data/www/.ru/core/cache/includes/elements/modplugin/59.include.cache.php: 12) PHP warning: join(): Invalid arguments passed

12 строка — $pattern = '/(?:'. join('|', $words). ')/i';
Константин Ильин
25 мая 2023, 11:16
0
в вашем исходном коде, в название события есть пробел в начале, оно раньше не запускалось.
case ' OnBeforeDocFormSave':
так же строчка $words = $res->getTVValue('words'); может вернуть уже готовый массив и не надо его вытаскивать из json, как я ранее писал надо смотреть что там возвращает. Вот так:
$words = $res->getTVValue('words');
$modx->log(1, print_r($words,1));
Потом смотреть в журнале ошибок модх
Dan
Dan
25 мая 2023, 10:07
0
А у вас поле точно типа tvSuperSelect? Странно конечно. Если не разберитесь, можете мне в тг или в сообщения написать, смогу сегодня в обеду глянуть